James Johnson is hosting this one.
The interesting thing about SDS is it sounds like more of a property bag storage. That brings a whole host if questions like how do you manage millions of rows, indexing, querying, etc.
The Entity itself is the property bag, whish is within a container. Each container is contained within an authority. It really sounds like an Authority relates to a database, a Container relates to a table and the Entity is the item. This is exactly how we shouldn’t think about this though! :)
I’m assuming that once in production the containers will be distributable and “replicatable” across datacenters. If you also have your app and services in the cloud then you could really take advantage of multiple instances and distribution across the globe. This would really be amazing.
James suggested checking out Mike Amundsen’s SDS utility. It allows you to create and view your Authorities and what Containers and Entities they contain. You can also see the raw XML response. One nice thing this shows is that SDS is fairly responsive as it was a pretty smooth running app.
SDS uses XML (through REST) to transfer all its data. LINQ and XPATH should be very useful to process this data. I wonder what’s the best way to hydrate this data into an actual object that you can pass around.
There were some questions as to whether this data is also available as JSON, since it’s ultimately handled by WCF. Since your authentication (token and password) are required to access the data I don’t see this being done in an open channel, such as through AJAX on the user front end. Since this will most likely be used entirely within the .Net backend I don’t see a reason to use anything other than XML.
James wasn’t able to upload a BLOb and its metadata in the same Entity. He had to create/upload one Entity with the EntityID and the file data and then another with the metadata and a “foreign key”. I wonder if this is really a limitation of SDS. If so it will probably be addressed before RTM, but in the mean time maybe a multipart XML upload would work. This may also be a limitation of REST and WCF, where again a multipart message body would probably work.
So now James has these two containers which need to be “joined” together. He downloaded both containers and then used LINQ to join and manipulate them. That works but it means that you have to download all the data prior to getting to LINQ. What would be better is if you could use LINQ-to-SDS. 🙂
It looks like there’s no official LINQ-to-SDS, however, if you check out the PhluffyFotos example there is a LINQ-to-SDS provider. I’ll have to look at this. In a previous session Bret Stateham showed how to embed lambda expressions in the REST query, which I’m told is called Dynamic Language Invocation. Definitely worth checking into.