【问题标题】:ACID update of ElasticSearch DocumentElasticSearch 文档的 ACID 更新
【发布时间】:2019-10-13 21:42:42
【问题描述】:

我现在正在尝试构建一个类似 Tinder 的系统。这里我需要知道哪些卡片已经被看到了。

如果我将卡片保存在 ElasticSearch 中,然后有这样一个文档:

{ 姓名:大卫,位置:{lat, lon},seeFromUsers:[] }

我只是想知道在对象本身中创建一个列表是否有意义。大概有2000个条目。 但是如果我在 ElasticSearch 中进行更新,那么我总是必须通过所有 2000 个条目。如果两个用户同时这样做,一个会迷路吗?如何简单地将另一个 ID 添加到数组中?这可能吗?

还有哪些其他解决方案?

【问题讨论】:

标签: elasticsearch


【解决方案1】:

另一种解决方案是完全不同的方法。相反,如果创建这样的文档

{
  "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
}

现在您将能够对个人资料的所有正面赞或双向赞/匹配进行简单查询...

【讨论】:

  • 但是如何连接这两个表而不是在 ElasticSearch 中呢?有孩子吗?你能解释一下吗?
  • 我认为,酸问题以一种优雅的方式解决了。您应该提出另一个问题以便进行讨论,而不会将该问题与您的应用程序的其他方面混淆,并保持标题/问题/答案的完整性。我会找到新的问题。请向我们提供尽可能多的详细信息。干杯!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-01-31
  • 1970-01-01
  • 1970-01-01
  • 2020-02-26
  • 2015-07-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多