9

現在、プラットフォームにインスタント メッセージング システムを実装しています。ユーザーにチャット履歴を提供し、ユーザーが行った最後の 5 つの会話を表示できるようにする必要があります (Facebook のようなプレビュー)。

当然のことながら、これらすべてのデータをどのように保存できるかを考える必要があります。

私たちはElasticsearchを使用しています。これは、チャット メッセージを保存し、読み取り操作の可用性を高めるための信頼できるソリューションになると考えています。

私たちの質問は、読み取り操作が高速で重すぎないようにするための、 Elasticsearch 内の最適なデータ構造は何かということです。

私たちは多くの解決策を考えましたが、これが私たちが思いついた最良のものかもしれません.

メッセージ表現は次のようになります。

{ 
   "ID" : 1,
   "sender" : "john",
   "receiver" : "doe",
   "content" : "Lorem ipsum dolor sit amet, consectetur adipiscing elit."
   "date" : "timestamp"
}

ネストされたオブジェクトを使用して、会話内にメッセージを保存できます。

 {
     "ID" : 317,
     "participants" : "john, doe",
     "date" : "timestamp of the last received message",
     "messages": [
         {
            "ID": "49753",
            "sender" : "john", 
            "receiver" : "doe",
            "content" : " Lorem ipsum dolor sit amet, consectetur adipiscing elit.",
            "date" : "timestamp" 
         },
         {
            "ID": "49754",
            "sender" : "doe", 
            "receiver" :"john",
            "content" : " Lorem ipsum dolor sit amet, consectetur adipiscing elit.",
            "date" : "timestamp" 
         },....
               ]
}

この解決策についてフィードバックをお寄せください。また、より良い解決策があればお知らせください。

前もって感謝します

4

1 に答える 1