Sunday, 9 January 2011

Goodbye tables, hello blobs

Okay, so after working with azure table storage for two weeks I can finally say I get it. Or more appropriately, I get what it’s not. It’s not, “table” storage …

If you think of a table of data as a series of rows of related entities which you can group and query you can be easily misguided into thinking you get azure table store. In reality Azure table store is more like “Azure Indexes” because in order to make them useful you have to contort you data for each view you wish.

For example, if you want to "group by” you’re better off creating a new table by pivoting your data on the group term. If it’s  particular record you want, you could search on partitionkey and rowkey, BUT, you could just as easily make that a single row partition, or … a blob.

That’s the situation in my use case. I thought because I am reading semi relational data a table would be most appropriate. But I’ve come to the conclusion that actually, I’m better of sticking JSON objects in blob store.

Sunday, 2 January 2011

Oh, Table Storage ...

I'm having a ton of fun with Azure, but the one "version 1.x" feature that bugs me is the immaturity of table storage.

The fundamental ideas behind table storage are great - hi speed, low cost, non relational data. The issues I have are with the details of the implementation.

First off there's the supported structures. Why to we have to use flat objects? Why limit things to, basically,  a property dictionary, when  the semantics support graph serialization? Maybe constraints are good, but I find this limits the transparency of working with Table storage.

My next issue, while it's all well and good using 'similar' semantics to other technologies like Data Services, LINQ and Entity Framework, it kinda defeats the DRY principle in that it's not the same. Why was table storage not provided as a provider for Entity framework, as well as an abstraction over Data Services?

Lastly that brings me to Dev storage. Look, having local easy to configure tools is great, but there are known issues that just hurt the experience Oliver Jones covers some details here:

My thought is, why mess around "faking" table storage over express anyway, when the whole point is to avoid SQL Server?

I figure the semantic and dev fabric issues could actually be solved quite easily, together - release a 'production' ready local version of table storage. This would help unified architecture and the dev experience.