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