2016-05-10 57 views
1

我正在使用應該嵌入聊天的Firebase開發Android應用程序。Firebase聊天應用程序:查詢消息,優化應該是OR的查詢,或者改進NoSQL db結構

我的問題是,要獲取郵件,我需要查詢所有有我的uid在發件人或收件人字段中的郵件。這在MySQL中非常容易,但在Firebase中(我必須堅持到Firebase)看起來有點痛苦。

我不能就這樣過濾它們。當我使用類似firebase.myapp.io/chat的Firebase網址時,我甚至無法僅僅過濾它們。

Firebase chat

因此,在這個模型中唯一的可能的解決方案,是獲取所有的聊天記錄和客戶過濾他們。這是完成這項工作的好方法。而且,當信息會很多時,如果他們應該的話,一切都會變得非常緩慢。

所以我想到了不同的方式來實現結果:

  • 我得到了聊天對應用戶的UID鍵。在這些價值觀,我得到的聊天記錄但從用戶的角度,還是我得到了我的接收器的鍵作爲值和消息

但是這裏面我不喜歡這種非常,因爲它可以是非常多餘的,因爲每個消息都應該在數據庫中插入兩次。

另一種方式是將消息鍵記憶到另一個對象中,例如chatmessages,在裏面我將用戶uid作爲值,並將其作爲包含聊天消息鍵的鍵。

什麼是最好的NoSQL方式來管理多個私人聊天對話?

+0

複製數據在NoSQL數據庫中非常常見。請參閱http://stackoverflow.com/questions/33540479/best-way-to-manage-chat-c​​hannels-in-firebase,爲聊天室建模提供一種方式。 –

+0

所以我應該創建對象chat_uid1_uid2和chat_uid2_uid1?在內部,我應該把對話正確(帶有時間和文字的消息對象以及最終的其他內容)? – BlackBox

+0

我經常發現自己在數據庫中建模,我在屏幕上看到了什麼。所以如果你想要個人聊天室,我建模個人聊天室。究竟哪種最適合你,取決於許多我不知道的因素(而且你可能還不知道)。如果您想閱讀更多內容,我推薦[這篇關於NoSQL數據建模的文章](https://highlyscalable.wordpress.com/2012/03/01/nosql-data-modeling-techniques/)。 –

回答

0

我目前對創建的聊天應用程序有同樣的問題。我最近發現了一個解決方案:

1)我基本上使用了兩個用戶唯一ID並使用ID.getBytes()將它們轉換爲數字。

2)然後我將2個數字加到另一個(加法)並將它們再次轉換爲base64數字。

3)將結果編號用作聊天室的標識。

它的工作,但因爲我正在做這一切的Android應用程序它顯示我在主線程上做了太多工作的警告。 讓我知道如果有人知道更好的方式來做到這一點!

+0

根據字母順序組合兩個用戶ID並將其用作聊天室ID。 –