iTwin / itwinjs-core

Monorepo for iTwin.js Library
https://www.itwinjs.org
MIT License
615 stars 210 forks source link

On server processing? #7

Closed jan-slegr closed 5 years ago

jan-slegr commented 5 years ago

Hi,

it's more a thought than issue reporting:

As far as I remember iModelJs library now, it's based on classic client - server schema. My question is whether a server processing has been evaluated as possible future iModelHub feature?

Because iModelHub is designed as digital twin repository, I suppose some analysis will require to access all data, which maybe time and resource consuming to create in a form of briefcase to the client.

With regards,

  

ColinKerr commented 5 years ago

Jan, The imodel-query-agent sample shows a server side 'agent' which listens for change sets, queries what is in them and takes some action. While the example runs on your local machine, it can also be run on a server.

Here is a link to the example: https://github.com/imodeljs/imodel-query-agent

jan-slegr commented 5 years ago

Hi Colin,

thansk for your explanation. I am aware of the mentioned example, but I thought about it as about "local service" automatically ;-) It's great to know the server variant exists also.

Regards,

Jan

kabentley commented 5 years ago

Jan,

I wouldn't say that iModel.js is a "classic client / server" architecture. Instead, we say it is a "distributed database." It follows the "Git" model wherein there can be many copies of the database. Each backend process has a complete copy of the iModel, called a "briefcase" (hence the extension ".bim" for briefcase of iModel). They are synchronized through changesets, just like Git.

Backends can run anywhere - on a desktop or mobile, in which case they run on the same machine as the frontend, or on a cloud computer, in which case we call them "agents". See here.

Agents can be notified of changesets (note, changesets are small, briefcases are big), so they can perform whatever time/resource consuming operations on their own machine so it's infinitely scalable. And of course they have the advantage that they can tell what's changed so they don't have to re-process everything all the time.

HTH, Keith