Данные о местоположении (географических точках) обновляются каждые 5 минут для миллионов пользователей. Мы должны искать пользователей с указанными c атрибутами (возраст / интересы / языки) и, в частности, географическим диапазоном. Хотелось понять правильную стратегию хранения таких данных в Elasti c.
Option1
Создать документ пользователя со следующими ключами
- Метаданные и атрибуты пользователя (age , интересы, языки, зарплата и т. д. c около 8-10 доступных для поиска атрибутов)
- Текущее местоположение (меняется каждые несколько минут)
"liveLocation" : {
"type" : "Point",
"coordinates" : [-72.333077, 30.856567]
}
- данные о местоположении - несколько адреса - домашний адрес, рабочий адрес и т. д. c вместе с географическими точками. (обновляется не часто) -
"addresses" :
[
{
"type" : "home",
"address" : "first floor, xyz, near landmark",
"city" : "Newyork",
"country" : "Country",
"zipcode" : "US1029",
"location" : {
"type" : "Point",
"coordinates" : [-73.856077, 40.848447]
},
{
... more atype of addresses
}
]
Мы хотим выполнить поисковые запросы гео по всем полям типа гео. Мое беспокойство - живое местоположение для пользователей будет обновляться довольно часто. Это жизнеспособный подход?
Option2
- Рассматривать каждое обновление местоположения как данные временного ряда и вставлять новый документ. Это позволит избежать обновления документов. вместо этого будет вставлять новые документы для каждого пользователя каждые несколько минут.
Проблемы -
При поиске всех пользователей (дома / в офисе / в прямом эфире) в определенном географическом диапазоне я должен учитывать только последние обновленные документы для каждого пользователя . Как это сделать в elasti c?
Мы должны искать пользователей с указанными c атрибутами (возраст / интересы / язык) и в частности географическим диапазоном. Если опция 2 предпочтительна, должны ли пользовательские атрибуты-метаданные и обновления местоположения рассматриваться как отношения родитель-ребенок или как-то иначе?
В заключение - Какой должен быть правильный подход.