We are using windows azure table for logging errors within our applications hosted inside either worker role or web role. We are logging sufficient information in table so that it is easy to identify which role, which component of a class has logged error.

Component Id (fully qualified class name) is used partition key and random unique Guid is as row key.

This logging information is displayed on ASP.NET MVC website, where administrator can search this log based on filter criteria like component id, date range, role identifier, severities etc.

This works fine till table is small. Once azure table contains huge amount of records(200000 or more), filter on azure table is taking too long time and it times out. We are using .NET azure storage API to query tables.

We also wanted a paging on returned resultset, but it looks like in azure table we don't get exact count for records returned.

We tried using azure storage API to apply filter and get data based on current page number, but its not working. I understand that we may have to redesign our table structure, especially partitionkey and rowkey, but not sure how to proceed with.