現在、プラットフォームにインスタント メッセージング システムを実装しています。ユーザーにチャット履歴を提供し、ユーザーが行った最後の 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"
},....
]
}
この解決策についてフィードバックをお寄せください。また、より良い解決策があればお知らせください。
前もって感謝します