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