我现在正在尝试建立一个类似Tinder的系统。在这里,我需要知道哪些牌已经被看到了。
如果我将卡片保存在ElasticSearch中,然后有这样一个文档:
{姓名:大卫,位置:{纬度,纬度},seenFromUsers:[] }
我只是想知道在对象本身中创建一个列表是否有意义。它可能有2000个条目。但是如果我在ElasticSearch中进行更新,那么我总是必须传递所有2000个条目。如果两个用户同时这样做,会不会有一个用户迷路了?如何简单地将另一个ID添加到数组中?这有可能吗?
还有其他的解决方案吗?
发布于 2019-05-29 21:24:48
另一种解决方案是一种完全不同的方法。相反,如果创建像这样的文档
{
"name": "David",
"location": { "lat": ..., "lon": ...},
"seenFromUsers": ["Laura", "Simone"]
}在关系中这样思考:
{
"name": "David",
"seenBy": "Laura"
}
{
"name": "David",
"seenBy": "Simone"
}这种方法将为您提供更简单的查询,ACID问题也就解决了。新的纵断面图就是新的文档...
这样做的好处是,您将摆脱内部对象,并且更容易向此关系中添加额外的数据:
{
"name": "David",
"seenBy": "Laura",
"timestamp": ...,
"liked": true
}
{
"name": "David",
"seenBy": "Simone",
"timestamp": ...,
"liked": false
}现在你可以对个人资料或双向喜欢/匹配的所有正面喜欢做一个简单的查询。
https://stackoverflow.com/questions/56340893
复制相似问题