News, examples, tips, ideas and plans.
Thoughts around ORM, .NET and SQL databases.

Tuesday, July 28, 2009

What models do we maintain

Since there are at least 3 visible models, it's necessary to explain why we maintain so many of them ;)

Our models stack is combined from the following models:

Xtensive.Storage.Model (+ Xtensive.Storage.Building.Definitions)

That's the top-level model used by storage. In fact, it consists of two parts:
- Definitions model: XxxDef types, e.g. TypeDef
- Runtime model: everything else. E.g. TypeInfo. Exposed via Domain.Model property.
- Serializable version of runtime model: see Xtensive.Storage.Model.Stored namespace.

Definitions are used on the first step of Domain build process. We reflect all the registered typed and build "model definition". The definitions can be freely added, removed or modified by your own IModules - you should just implement OnDefinitionsBuilt method there. This allow modules to dynamically build or change anything they want - e.g. they can add a property to any of registered types, or register a companion (associated) typefor each one of them. Note that nothing special must be done to make this happen, you should just ensure that necessary module is added to the set of registered types.

So definitions describe crude model - there is just minimal information needed to build a runtime model.

And as you might assume, runtime model is built by definitions gathered gathered on the previous step. It is much more complex - e.g. it fully describes any association and mapping.

In general, it is build to immediately answer on any question appearing during the Domain runtime.

Finally, there is an XML-serializable version of model. It is loaded & serialized to database during each schema upgrade. Our schema upgrade layer uses it to propertly translate type-level hints related to old model to its schema-level hints and uses it in upgrade process to make it more intelligent. You can find it serialized into one of rows in Metadata.Extension table.

Xtensive.Storage.Indexing.Model

Let's call it schema model. This is a low-level model of storage we use during schema comparison and upgrade process. It differs from Storage.Model, because:
- Storage model maintains two-way relationships betweem type-level and storage-level objects. E.g. betweem types and tables, properties and columns. But here we need only a part of this model related to storage-level objects.
- Storage model is built to quickly answer on common questions. This model is designed to schema change and comparison well.
- Storage model is more crude. E.g. DO isn't much interested of foreign keys - it should just know there must be a foreign key. Schema model knows all the details about it.

Schema model is used to:
- Compare extracted and required schema. This process is actually more complex than you might expect - to generate the upgarde actions well, we split the comparison process into a set of steps, and comparing the models related to them. In fact, we do something like: ExtractedModel -> Step1Model -> Step2Model -> ... -> RequiredModel. That's why we must be able to clone and change it nearly as any SQL Server does this. Step1Model here may refer to model with dropped foreign key constraints, Step2Model can be e.g. model containing temporarily renamed schema objects and so on. Yes, we can safely handle rename loops like A->B', B->C', C->A' - we detect & break such loops by renaming one of objects in it to temporary named one on intermediate step ;)
- Index engines use this schema as their native schema format. Actually it is quite fast as well, if locked ;)

Schema models are available via two Domain properties:
- ExtractedSchema
- Schema.

Xtensive.Sql.Model

This is the SQL schema model - a schema model of SQL database in its native form. It differs from the above one - it describes all the SQL schema terms instead of a part of them we need. For example, you can find View and Partition objects there, althogh for now we don't have their analogues in schema model.

This model us used to:
- Produce extracted schema model. SQL DOM provides Extractor allowing to extract it for any supported database; the result of its work is sent to SqlModelConverter (a part of any SQL storage provider) to produce the schema model from it. So this converter is responsible for such decisions as ignoring non-supported SQL schema objects and so on.
- Produce SQL statements (commands). SQL DOM refers to its objects by its statement model objects, such as SqlAlterTable.

You can't access this model in runtime, but it is available to any SQL storage provider via its DomainHandler.Mappings member (see Xtensive.Storage.Providers.Sql namespace - it looks like I expluded this part from the brief version of API reference). These mappings are used to produce generally any SQL command sent by provider.

Xtensive.Sql

This is our model of SQL language - so-called SQL DOM. You can think objects from this model (except SQL schema model objects) normally have rather short lifetime, since they represent parts of particular SQL commands. But actually this isn't true:
- We cache almost any SQL request model we build. Cached request models are bound to particular CRUD operations, LINQ and RSE queries. So in general we almost never build a request model twice.
- We cache even pre-translated versions of request parts. Relatively long strings from which we combine the final version of requests. This allows us to produce a version of request with differently named parameters almost instantly.
- Moreover, we support branching in SQL DOM request model. It is used to produce different versions of request containing external boolean parameters. Earlier I wrote this can be quite important: let's imagine we compiled a request with all the branches. One of such branches there may require table scan in query plan, and thus query plan the whole SQL request will rely on table scan. This "slow" branch could be a rarely used one (i.e. condition turning its logic "on" is quite rarely evaluated to true). But the plan will always use table scan, since RDBMS produces the most generic query plan version. An example of such query is "Select * from A where @All==1 or @Id==A.Id". Check out its plan on SQL Server. Then imagine, if normally @All is 0. Branching & pre-translated query parts allow us to handle such cases perfectly.

35 comments:

  1. Lifestyle is a elite magazine circulated to the elite at page parties. Lifestyle Magazine also circulated to the elite at clubs, lounge bars etc.
    Lifestyle Magazine

    ReplyDelete
  2. International Sea Cargo Agents in Delhi - List of international ocean freight services in Delhi and get international sea freight exporter shipping. Thanks you for sharing
    sea freight company in Delhi

    ReplyDelete
  3. Sonison packaging Offer High Quality & Best Strength Super Clear Packing Tape at Affordable Prices, Super Clear Tape Manufacturer Supplier Delhi. Thanks you for very nice its sharing
    Clear Tape Manufacturer in Delhi

    ReplyDelete
  4. Get Details of Flooring Tiles Manufacturers And Dealers. ... Heat Resistance Tiles, Heat Resistant Terrace Tiles. Thanks you for sharing
    tile bonder manufacturer in delhi

    ReplyDelete
  5. Thanks for sharing this blog, this blog is very helpful information for every one.
    Mobile app Development Company in Noida

    ReplyDelete
  6. Very Informative blog, Thank you for this Information.


    ReplyDelete
  7. Most impressive Topic and Blog, this is very helpful Information. thanks for sharing.
    School Management Software in Delhi

    ReplyDelete
  8. Thanks for sharing this blog, this blog is very helpful information for every one.
    Mobile app Development Company in Delhi

    ReplyDelete
  9. Thanks for sharing this blog, this blog is very helpful information for every one.
    Mobile app Development Company in Noida

    ReplyDelete
  10. Nice and interesting post,I appreciate your hard work,keep uploading more, Thank you for sharing valuable information.
    App Development Company in Delhi

    ReplyDelete
  11. Thanks for sharing valuable Information, I really very impressive on your blog. I hope you continue on blogging job.
    Mobile App Development Company in Mumbai

    ReplyDelete
  12. You have a real ability for writing unique content. I like how you think and the way you represent your views in this article. We are Best CRM Software in Mumbai.

    ReplyDelete
  13. What are the merits of hiring writer for Pschology Research Paper Services? One of the significant benefits of hiring Pschology Writing Service Writer is that a learner obtains high-quality and original Pschology Term Paper Services .

    ReplyDelete
  14. You have a real ability for writing unique content. I like how you think and the way you represent your views in this article. We are Best CRM Software in Mumbai.

    ReplyDelete
  15. Your blog is filled with unique good articles! I was impressed how well you express your thoughts.
    iPhoto For Window

    ReplyDelete
  16. Great post and right to the point. I’m sure everyone will appreciate this interesting things. Thanks for posting it.
    Visit us foronline printing services.

    ReplyDelete
  17. Marvelous and fascinating article, thank you so much for sharing with us. Visit Ogen Infosystem for professional website designing and SEO Services in Delhi.
    Website Designing Company in Delhi

    ReplyDelete
  18. This is the best news for those people who are working in maintenance department they have to repair cars and other vehicles but I am not interested in this profession because I am a writer of Assignment writing services
    and I have to complete the assignments in time who are a regular customer of the academic papers.

    ReplyDelete
  19. The article is very nice, thank you for sharing it! I'm not fully through yet (it is extremely long) but it seems well researched and detailed. Best astrology website in India

    ReplyDelete
  20. Nice article, I am a big time fan of your site, keep up the nice work, and I will be a frequent visitor for a very long time. Also read this article Franchise Options In Bangalore

    ReplyDelete
  21. Lifestyle is a high-end publication distributed during page parties to the privileged. Lifestyle Magazine also circulated to the elite at Do My Dissertation, lounge bars etc.

    ReplyDelete
  22. Such a wonderful information blog post on this topic
    How To Change Cash App From Business To Personal 2022? The Cash app is a perfect way to send and receive money with ease and comfort. There are 2 versions of the Cash app which you can use as per your needs. One is for official or business purposes and the second for personal use. You can click on the given link here to learn more about this.

    ReplyDelete
  23. Hi, I am Sofi Hayat, I am working as a tech expert at Yahoo support. I have 3 years of experience in this field. you have any problems related to Yahoo help, etc, then please contact me for instant help related to Yahoo email problems.

    ReplyDelete

  24. Very Well Information/Ideas.thank you.
    Are you preparing for your examination of RBI SO Recruitment 2022? Do you want any sort of assistance in your preparation? Well, you’ve come to the right place so freely visit our website and get all the details. We have all the details that will assist you in preparing for your entrance exam well.

    ReplyDelete
  25. Very impressive post i appreciate you. thanks for sharing with us. hill station is the best place if you are thinking of doing some of the adventurous activities. Traveling in snowy places occupies another importance. You have various options for the hill station and which is the best; you can choose to communicate with the travel service providers. They will make clear everything and help you take to the Best Hill Station In India with no difficulties.  

    ReplyDelete
  26. Going to take admission into Aakash Institute? If the answer is yes then you have launched on the right section. Here we have furnished the entire Aakash Institute Fees for the 2022 Session in which you are going to get admission fees and academic fees information. Just follow the link that has been furnished in this section.

    ReplyDelete
  27. after long times i found this type blog, its very useful content for me and other . iphone app development agency in california and UK, we comprehend that your iOS application should have USPs over the opposition.
    your post is awsome its very knowageful content i never read any blog like this your are a good wrighter and thankyou for this articel .Android App Development Company california & UK
    I am really happy to say it’s an interesting post to read . I learn new information from your article , you are doing a great job . Keep it up. JKM Soft Solutions is search engine optimization services california provider based out of UK,
    This blog is very helpful for everyone and after reading this blog, I got to learn a lot and I grew my friend too much about this blog, I hope you do blog posts like this. best seaward Website Development Company california , JKM Soft Solutions has acquired a great status and occupied with catering customers with its select WordPress

    ReplyDelete