I am evaluating the use of Azure Table Storage for an application I am building, and I would like to get some advice on...
- whether or not this is a good idea for the application, or
- if I should stick with SQL, and
- if I do go with ATS, what would be a good approach to the design of the storage.
The application is a task-management web application, targeted to individual users. It is really a very simple application. It has the following entities...
- Account (each user has an account.)
- Task (users create tasks, obviously.)
- TaskList (users can organize their tasks into lists.)
- Folder (users can organize their lists into folders.)
- Tag (users can assign tags to tasks.)
There are a few features / requirements that we will also be building which I need to account for...
- We eventually will provide features for different accounts to share lists with each other.
- Users need to be able to filter their tasks in a variety of ways. For example...
- Tasks for a specific list
- Tasks for a specific list which are tagged with "A" and "B"
- Tasks that are due tomorrow.
- Tasks that are tagged "A" across all lists.
- Tasks that I have shared.
- Tasks that contain "hello" in the note for the task.
- Etc.
- Our application is AJAX-heavy with updates occurring for very small changes to a task. So, there is a lot of small requests and updates going on. For example...
- Inline editing
- Click to complete
- Change due date
- Etc...
Because of the heavy CRUD work, and the fact that we really have a list of simple entities, it would be feasible to go with ATS. But, I am concerned about the transaction cost for updates, and also whether or not the querying / filtering I described could be supported effectively.
We imagine numbers starting small (~hundreds of accounts, ~hundreds or thousands of tasks per account), but we obviously hope to grow our accounts.
If we do go with ATS, would it be better to have...
- One table per entity (Accounts, Tasks, TaskLists, etc.)
- Sets of tables per customer (JohnDoe_Tasks, JohnDoe_TaskLists, etc.)
- Other thoughts?
I know this is a long post, but if anyone has any thoughts or ideas on the direction, I would greatly appreciate it!