我们目前正在我们的平台上实施即时通讯系统。我们需要为我们的用户提供聊天记录,并能够显示用户最近的 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"
},....
]
}
我们希望收到您对此解决方案的反馈,如果您有更好的解决方案,我们也希望得到您的反馈。
提前致谢