I have tables like this in SQL Server
Users
- UserId (Unique)
- Name
- Age
Friends
- UserId
- FriendId
Topics
- UserId
- Subject
There can be several thousands of users. and there are several other properties in the table.
I can query to get following answers.
- Give me all the friends of user “Tom”.
- Give me all the topics created by “Tom”.
- Give me all the topics created by Tom’s friends that contains “abc” in the subject.
If I were to do it in Azure table storage, how do I structure my tables?
I have gone through this and this I would like someone who had more experience on modeling Azure Table storage to give some insights..
1 and 2 are pretty easy. You create two Azure tables – Friends and Topics indexed by user id (with user id in the key).
3rd one is much more difficult with Azure tables, especially “that contains ‘abc’ in the subject” part.
Azure tables don’t support full text search. Basically it is only possible to efficiently retrieve values (or range of values) either using exact keys or using ‘startswith’ operator. Like “Give me all records where key is equal to ‘key value'”. Or “give me all records where key is greated than ‘key lower bound’ and is less than ‘key upper bound'”.
It is also possible to filter using ‘startswith’ by any non-key field of a record, but this will involve table scan and is not efficient. It’s not possible to do similar filtering with ‘contains’.
So I think you need something with full text search support here.