2016-11-24 44 views
0

我在DB的結構如下:如何根據子鍵的值有效地進行查詢?

MessagesInvolvingUserID: 
    - [UserID01]: 
    - [MessageID01]: [TimeStamp01] 
    - [MessageID02]: [TimeStamp02] 
    ... 
    - [UserID02]: 
    - [MessageID03]: [TimeStamp03] 
    - [MessageID04]: [TimeStamp04] 
    ... 

我不知道如何有效地構造表示每個用戶ID的最新MESSAGEID(基於時間戳值)字典?

我覺得 「蠻力」 方法是有效的:

  1. 觀察MessagesInvolvingUserID的價值
  2. 遍歷每個抽過濾器的最新消息ID
  3. 構建字典

但這似乎非常低效,因爲這涉及下載和執行工作客戶端。任何建議更優雅的方法?

回答

0

如果你想有一個顯示了每個用戶的最新時間戳列表,您應該存儲,顯示在您的數據庫中的每個用戶的最新時間戳列表。

LatestTimstampForUserID: 
    - [UserID01]: [TimeStamp02] 
    - [UserID02]: [TimeStamp04] 
    ... 

現在,您可以非常有效地從數據庫中讀取此數據並顯示列表。

成本是,當爲用戶發佈新消息時,您需要更新數據庫中的多個位置。這在使用NoSQL數據庫時非常常見,例如Firebase實時數據庫。

1

爲什麼不在每條帶有時間戳值的消息下創建一個Timestamp鍵,然後查詢按時間戳排序的消息?你用什麼語言查詢數據庫中的項目?你有沒有嘗試過這樣的:

ref.child(「MessagesInvolvingUserID」).child(userID).child("MessageID01").queryOrderedByChild("timestamp").observeEventType(.ChildAdded, withBlock: { snapshot in ... 
相關問題