我知道这并不能解决你所问的问题,但我仍然不相信分页应该按照你的建议进行。我的意思是,由于Azure表存储不支持所需的功能,因此它可能不太合适。
我会得到本地缓存中的数据,在那里执行命令和分页,并用它来完成。有一个建议解决这个限制与仔细构建rowkey/partitionkey,但我强烈建议你不要这样做。
Blog blog= new Blog();
// Note the fixed length of 19 being used since the max tick value is 19 digits long.
string rowKeyToUse = string.Format("{0:D19}",
DateTime.MaxValue.Ticks - DateTime.UtcNow.Ticks);
blog.RowKey = rowKeyToUse;
因此,一个博客B1日10/1/2008上午10时00分00秒将有2521794455999999999为RowKey和B2过时的2008年10月2日上午10时00分00秒将有2521793591999999999为RowKey因此b2将在b1之前。
要检索后10/1/2008为10:00:00 am日所有博客,我们将使用follwing查询:
string rowKeyToUse = string.Format("{0:D19}",
DateTime.MaxValue.Ticks - DateTime.UtcNow.Ticks);
var blogs =
from blog in context.CreateQuery<Blog>("Blogs")
where blog.PartitionKey == "Football"
&& blog.RowKey.CompareTo(rowKeyToUse) > 0
select blog;
(这是由Windows Azure的表,2008年12月拍摄的文件provided由微软)
至于计数的页数,这很容易,简单的分割操作将在这里做的伎俩,至于延续标记,一种方法是(在初始请求时)在每个页面上“散步”并获得延续标记,它基本上只是告诉你下一个分区键是哪一行。但拥有它们意味着你很容易出现一致性错误(例如,如果有人将某些内容发布到同一个表存储中)。
就我个人而言,我会基于rowkeys,如上所述,或者,如果这是一个要求,移动到支持它的存储引擎。
若要进一步阐述,如果您知道只有一个“OrderBy”子句,则可以选择所有子句,并通过一些含义猜测页面边界是什么。
在附注中,我认为提供的分页是不允许在前端进行分页的,但是可以分配1000个结果限制。但这只是我的0.02美元。
对此问题的回答? – 2011-07-06 12:57:59
如果您需要排序和计数表存储不是正确的产品。 SQL Azure提供排序和计数。表存储用于存储大量的行,并在分区键和行键上进行主要搜索。它用于序列化大量的类。 – Paparazzi 2012-01-13 19:36:33
这听起来像你需要一个关系数据库,而不是NoSQL。 – tugberk 2012-02-02 18:05:18