1 / 14

Odata Deltas

Odata Deltas. Deltas provide a hypermedia-driven solution for retrieving changes to a given set of data. Why Deltas?. Client Change Tracking Clients often have local copies of data Want to figure out what has changed Large Data Sets OData is good for retrieving small/moderate sizes of data

primo
Download Presentation

Odata Deltas

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Odata Deltas Deltas provide a hypermedia-driven solution for retrieving changes to a given set of data

  2. Why Deltas? • Client Change Tracking • Clients often have local copies of data • Want to figure out what has changed • Large Data Sets • OData is good for retrieving small/moderate sizes of data • OData is not optimized for large data transfer • But is good for returning small/moderate sizes of changes to slowly changing data sets

  3. Requirements • Keep it Simple! • 80-20 rule • Support Web Scale • Don't require per-client state • NOT designed for multi-master sync • Service is "truth" • Payloads don't carry "exceptions" • No per-client state on server • Clients don't know about other clients

  4. Design • Server generates opaque "delta link" URL • Generally contains encoding of request and "high water mark" so as to avoid per-client state on the server • Multiple clients can maintain their data sets from a single service • Link is returned on the last page of a result • Clients can use link to get newly added, deleted, or changed records • Could be combined with general notification model to alert clients to changes

  5. Initial Population

  6. Result Maintenance

  7. Deltas and Query Options • Query options "preserved" in delta links • $filter, $select • Query options that can be applied to delta queries • $top, $skip, $format, $inlinecount • Query options that are not applicable to deltas • $orderby • $count, $value

  8. Delta Results • Delta results are ordered by when change occurred • Payload shows current values • Clients can merge with local results • Add Tombstones to represent removed rows • Contains ID of removed entry • May contain a "reason" • Hard-delete versus no longer member of the group (i.e., due to change)

  9. Deltas and Server Driven Paging • Delta Link returned on last page of results • Makes sure deltas aren't applied to incomplete results • Results of delta queries may be paged • Each interim page has a next link • Final page may have a delta link for getting changes

  10. ATOM Format • <feed> contains a delta Link as a <link> element • href is the url to retrieve deltas • rel is "http://odata.org/delta" • <feed> contains Atom "deleted-entry" elements for each deleted object deletedEntry= element at:deleted-entry { atomCommonAttributes, attribute ref { atomUri }, attribute when { atomDateConstruct }, attribute m:reason { 'deleted' | 'changed' }  } Where m: is the metadata namespace for data services: "http://schemas.microsoft.com/ado/2007/08/dataservices/metadata"

  11. ATOM Example <feed><title type="text">Customers</title><id>http://DeltaService.svc/Customers</id><entry> <id>http://DeltaService.svc/Customers('BOTTM')</id> <titletype="text" /><linkrel="edit" title="Customer"href="Customers('BOTTM')" /> <categoryterm="NorthwindModel.Customer"scheme="http://schemas.microsoft.com/ado/2007/08/dataservices/scheme" /> <content type="application/xml"> <m:properties> <d:CustomerID>BOTTM</d:CustomerID> <d:CompanyName>Bottom-Dollar Markets</d:CompanyName> <d:ContactName>Elizabeth Lincoln</d:ContactName> </m:properties> </content></entry><deleted-entryref="http://DeltaService.svc/Customers('Cust10')" when="2011-02-16T01:00:25Z"xmlns=http://purl.org/atompub/tombstones/1.0m:reason="deleted"/><linkrel=http://odata.org/deltahref="http://DeltaService.svc/Customers?$deltatoken=8015" /></feed>

  12. JSON Format • "results" array has a "__link" property • Value is the URL • Tombstones • "results" array contains "__deleted" objects for each deleted entry • "id" property • "when" property • "reason" property

  13. JSON Example { "d": { "results": [ { "__metadata": { "id":"http://DeltaService.svc/Customers('BOTTM')", "uri":"http://DeltaService.svc/Customers('BOTTM')", "type":"NorthwindModel.Customer" }, "CustomerID":"BOTTM", "CompanyName":"Bottom-Dollar Markets", "ContactName":"Elizabeth Lincoln" }, { "__deleted": { "id":"http://DeltaService.svc/Customers('Cus10')", "when":"\/Date(1297187419617)\/" "reason": "deleted" } }, ], "__delta":"http://DeltaService.svc/Customers?$deltatoken=8015" } }

  14. Open Issues • How do we treat $expand in a delta query? • Is deleted reason optional? Is it hard to determine in some cases? What does the client do if not known? • Does a server always return a delta link if it can? Might it be expensive to generate?

More Related