Firestore:在數(shù)組字段中處理一大塊有序數(shù)據(jù)會有多糟糕?

我有數(shù)百個項目的子集合,這些項目可以由其所有者手動排序。

我想知道在Firebase中處理大塊排序數(shù)據(jù)的最佳方法是什么。

現(xiàn)在我正在使用一個帶有大整數(shù)值的“order”字段。當(dāng)創(chuàng)建一個新項目時,我會按照上一個項目的順序,向其添加1000 000,然后將其設(shè)置為新項目。但是如果一個項目在兩個項目之間移動,我需要更新它的順序。所以我取這兩個項目之間的差值,除以2,然后設(shè)置新的順序。

事情是這樣的

限制是,如果我繼續(xù)在兩個其他項目之間添加項目,那么差異將接近1(500/2=250,250/2=125。。。62... 31... 15... 7.3...). 在這一點上,我將無法再對這兩個項目之間的任何內(nèi)容進行排序。

所以我的第一個想法是,一旦我接近1,批量更新以下所有項目。這是可行的,但我不喜歡這個解決方案。

所以我想知道,如果我創(chuàng)建一個數(shù)組字段(在一個孤獨的子文檔中)列出所有項目ID,然后使用它列出項目,會怎么樣。陣列非常適合這樣做,所以很誘人。

盡管如此,我知道Firestore文檔的大小不能超過1Mb,所以我想知道我獲得這樣大小的文檔的可能性有多大。

我還想知道這個主意有多糟糕。這很少見,但有些收藏品可能有5000件左右(有時可能會更多)。

謝謝你的幫助

? 最佳回答:

使用數(shù)組是維持訂單最常用的方法。它的主要問題實際上是最大文檔大小,以及需要讀取整個數(shù)組才能添加/更改其中的項。

將項目放置到的兩個項目之間的差異細分的方法也很常見。我只是使用了一個浮點數(shù),在我看來,它讀起來更自然一些,并且去掉了最小距離1。但在執(zhí)行計算的平臺上或Firestore的后端,當(dāng)您接近浮點數(shù)的最大精度時,您可以進行的交換數(shù)量仍然有限制。

這些選項之間沒有單一的最佳選擇,這完全取決于您的use-case、您訪問數(shù)據(jù)庫的方式以及您希望執(zhí)行操作的次數(shù)。我通常在數(shù)量較少時使用陣列,如果我可以在服務(wù)器上執(zhí)行操作(帶寬不是問題),甚至可以使用中等大小的陣列。對于較大的系統(tǒng),我使用浮點ranking字段,并且傾向于忽略該字段的最大精度。如果被迫的話,我可能會想出一種優(yōu)雅的方法來定期重置ranking值。

主站蜘蛛池模板: 日韩免费无码一区二区视频| 亚洲一区免费视频| 日韩精品人妻av一区二区三区| AV无码精品一区二区三区| 亚洲V无码一区二区三区四区观看| 亚洲国产一区二区三区在线观看| 国产观看精品一区二区三区| 色一情一乱一伦一区二区三欧美| 日本免费电影一区二区 | www.亚洲一区| 一区二区三区在线观看免费| 国产成人无码AV一区二区| 天天爽夜夜爽人人爽一区二区| 免费无码一区二区| 动漫精品专区一区二区三区不卡 | 日韩内射美女人妻一区二区三区| 精品一区二区三区AV天堂| 亚洲一区视频在线播放| 成人影片一区免费观看| 国产福利一区二区三区在线观看 | 精品国产一区二区三区久久| 亚洲欧洲一区二区| 美女视频黄a视频全免费网站一区 美女免费视频一区二区 | 亚洲欧美成人一区二区三区| 成人精品视频一区二区三区尤物| 国产一区二区三区在线看片| 色综合一区二区三区| 亚洲AV无码一区二区二三区入口 | 国产精品亚洲一区二区三区在线观看| 美日韩一区二区三区| 国产主播福利一区二区| 亚洲av无码一区二区三区天堂| 精品不卡一区二区| 精品久久久中文字幕一区| 亚洲av无码一区二区三区人妖| 色婷婷av一区二区三区仙踪林| 亚洲欧洲一区二区| 色老头在线一区二区三区| 国产成人无码精品一区二区三区| 亚洲线精品一区二区三区| 丰满岳妇乱一区二区三区|