昨天研究了一個(gè)CosmosDB分頁的問題。
我們知道,在訪問CosmosDB的時(shí)候,所有對CosmosDB操作的成本,將由Azure CosmosDB的Request Unit(RU)來表示。讀取1-KB項(xiàng)的成本為1個(gè)請求單位(RU)
假設(shè)我們進(jìn)行一個(gè)查詢,如果查詢的結(jié)果很多,數(shù)據(jù)量很大的話,則會造成RU消耗很多,理所當(dāng)然的成本也會很高。
我們可以在訪問的時(shí)候,通過設(shè)置:x-ms-max-item-count,來設(shè)置訪問返回的數(shù)據(jù)量。
在這里,筆者主要使用Postman來進(jìn)行演示。
1.我們選擇按照時(shí)間范圍查找
2.在Header的設(shè)置里
x-ms-documentdb-query-enablecrosspartition,表示跨分區(qū)鍵查詢
x-ms-max-item-count,表示返回的數(shù)據(jù)量為10條。如果我們在請求中沒有指定x-ms-max-item-count,則默認(rèn)返回前100條數(shù)據(jù)。
如果返回的數(shù)據(jù)少于100條,則返回所有數(shù)據(jù)。
3.我們可以看到查詢的結(jié)果,一共有10條
4.注意,在上面的返回結(jié)果中,有一個(gè)x-ms-continuation需要注意。
在上面的請求中,如果返回的數(shù)據(jù)有100條,但是我們只請求了10條數(shù)據(jù),則請求額外的數(shù)據(jù),需要在下一次請求中帶x-ms-continuation這個(gè)值
5.好了,到目前為止,我們已經(jīng)取出前10條數(shù)據(jù),且CosmosDB服務(wù)器告訴我x-ms-continuation。
我們請求第11條-第20條數(shù)據(jù)(即設(shè)置x-ms-max-item-count為10),則需要在http header里面,指定x-ms-continuation。
同樣的,我們請求第11-30條數(shù)據(jù),則設(shè)置x-ms-max-item-count為20
如下圖:
6.該請求會返回第11條-第20條數(shù)據(jù),如下圖:
通過這種方式,既可以降低一次請求過多的數(shù)據(jù),造成RU消耗過大,而且還可以實(shí)現(xiàn)分頁的功能。