簡體   English   中英

Mongodb大數組或查詢

[英]Mongodb large array or query

我的問題與mongo處理大型數組的能力有關。

我想在主題更新到主題的所有訂閱者時發送推送通知。 假設一個主題可以有100萬訂閱者。

在主題文檔中保留一個龐大的數組,該數組包含所有已預訂的用戶ID,效率高嗎? 還是保守的方法更好?是為每個用戶保留一系列訂閱的主題,然后查詢用戶集合以查找特定主題的訂閱者?

編輯:

無論如何,我都會在用戶集中保存一組訂閱的主題(用於視圖和編輯)

如果陣列很大,並且文檔的累積大小超過16 MB,則將其拆分為另一個集合。 您可以將主題包含在集合中,並將其所有訂閱者放入引用主題集合的單獨集合中。

主要假設:與主題相關和與人相關的元數據存儲在不同的集合中,此處討論的集合僅用於跟蹤主題訂戶。

將訂戶存儲為與主題標識符(作為文檔關鍵字,即索引字段)相關聯的列表/數組有助於實現高效的結構。 有了感興趣的主題后,您可以按主題標識符查找訂戶列表。 在這里,正如@Saleem正確指出的那樣,您需要警惕大量的訂戶列表,這會導致文檔超過16MB的文檔大小限制。 但是,除了通過制作一個不同的集合來處理(如@Saleem所建議的那樣)而使設計變得復雜之外,您還可以簡單地將訂戶列表(使用模數16MB的操作分成所需的多個部分)並為同一集合中的主題。 鑒於主題標識符是一個索引字段,查找時間將不會受到影響,因為16MB可以容納大量的用戶標識符,並且如果需要的話,所需的拆分數應該非常低。

您建議的另一種結構,即訂戶標識符是文檔密鑰及其在文檔中所有已訂閱主題的文檔密鑰,對於大型數據集而言,效率並不高。 這種結構將涉及查找所有訂閱當前主題的訂戶。 如果訂閱的主題存儲為列表/數組(似乎是可能的選擇),則該查詢將包含$in子句,該子句比索引字段查找要慢,即使對於用戶群很大的小型主題列表也是如此。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM