我知道這並不能解決你所問的問題,但我仍然不相信分頁應該按照你的建議進行。我的意思是,由於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