ACID обновление документа ElasticSearch - PullRequest
0 голосов
/ 28 мая 2019

Я пытаюсь построить систему, похожую на трут, прямо сейчас.Здесь мне нужно знать, какие карты уже были просмотрены.

Если я сохраню карты в ElasticSearch, а затем получу такой документ:

{nama: David, location: {lat, lon}, seenFromUsers: []}

Мне просто интересно, имеет ли смысл создавать список в самом объекте.Вероятно, там 2000 записей.Но если я делаю обновление в ElasticSearch, то мне всегда нужно пропустить все 2000 записей.Если два пользователя делают это одновременно, один теряется?Как я могу просто добавить другой идентификатор в массив?Это вообще возможно?

Какие еще есть решения?

1 Ответ

1 голос
/ 29 мая 2019

Еще одним решением будет совершенно другой подход. Вместо этого, если создавать такие документы, как это

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

И теперь вы сможете выполнить простой запрос для всех положительных лайков профиля или двунаправленных лайков / совпадений ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...