Presentation is loading. Please wait.

Presentation is loading. Please wait.

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

Similar presentations


Presentation on theme: "ODATA DELTAS Deltas provide a hypermedia-driven solution for retrieving changes to a given set of data."— 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 o 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 o 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" o 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 contains a delta Link as a element href is the url to retrieve deltas rel is "http://odata.org/delta" 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 Customers http://DeltaService.svc/Customers http://DeltaService.svc/Customers('BOTTM') BOTTM Bottom-Dollar Markets Elizabeth Lincoln http://purl.org/atompub/tombstones/1.0http://odata.org/delta Customers http://DeltaService.svc/Customers http://DeltaService.svc/Customers('BOTTM') BOTTM Bottom-Dollar Markets Elizabeth Lincoln http://purl.org/atompub/tombstones/1.0http://odata.org/delta ATOM EXAMPLE

12 JSON FORMAT "results" array has a "__link" property Value is the URL Tombstones "results" array contains "__deleted" objects for each deleted entry o "id" property o "when" property o "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" },http://DeltaService.svc/Customers('BOTTM' { "__deleted": { "id":"http://DeltaService.svc/Customers('Cus10')", "when":"\/Date(1297187419617)\/" "reason": "deleted" } }, ],http://DeltaService.svc/Customers('Cus10' "__delta":"http://DeltaService.svc/Customers?$deltatoken=8015" }http://DeltaService.svc/Customers?$deltatoken=8015 } { "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" },http://DeltaService.svc/Customers('BOTTM' { "__deleted": { "id":"http://DeltaService.svc/Customers('Cus10')", "when":"\/Date(1297187419617)\/" "reason": "deleted" } }, ],http://DeltaService.svc/Customers('Cus10' "__delta":"http://DeltaService.svc/Customers?$deltatoken=8015" }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?


Download ppt "ODATA DELTAS Deltas provide a hypermedia-driven solution for retrieving changes to a given set of data."

Similar presentations


Ads by Google