Я изучаю, как использовать DynamoDB и Cloudsearch для своего приложения. Я не понимаю пары вещей о схеме базы данных для DynamoDB. Учитывая эту схему:
Таблица USERS
{
"id_users"(PI): <number>,
"created": <string>,
"email" (GSI): <string>,
"firstname": <string>,
"lastname": <string>
"password"(GSI): <string>,
"verified": <boolean>,
"category": <string>,
"colors": <array of strings>, // list of favourite colors of the users (it's an example)
"locale": <string>,
"user_location": { //GeoJSON structure
"type": <string> ex. "location",
"geometry": {
"type": <string> ex. "Point",
"coordinates": [ <number> ex. 125.6, <number> 10.1]
},
"properties": {
"city": <string>,
"country": <string>
}
},
"accounts": [
{
"type": <string>, // ex. "facebook"
"ID": <number>, // ex. 23248323243473743
"access_token": <string>,
"profile_url": <string>
},
{
"type": <string>, // ex. "google"
"ID": <number>, // ex. 23248323243473743
"access_token": <string>,
"profile_url": <string>
}
]
}
Это часть полной схемы.
Итак, путь приложения myurl.com/users/{:id_users}
.
Мне нужно найти активных пользователей и / или в пределах радиуса или страны, и кому нравится один или несколько цветов (пример). Я прочитал, что не могу добавлять индексы на более глубоком уровне, чем первый уровень дерева, и индекс может быть только строковым, целочисленным или двоичным. Кроме того, Cloudsearch имеет больше типов индексов, это идеально подходит для "colours"
и "verified"
, но я не могу добавить «глубокий» индекс для "coordinates"
. Я мог бы переместить координаты на первом уровне вот так:
location_coordinates: [ <number> ex. 125.6, <number> 10.1],
location_city: <string>,
location_country: <string>,
но это не «элегантно». Я мог бы создать внешнюю таблицу для местоположений пользователей, но я могу потерять все преимущества базы данных документов и не могу получить / прочитать все данные одним вызовом, когда пользователь посещает профиль.
Мне нужно изменить схему базы данных? Как?
Кого волнует элегантность, я должен поставить координаты на первый уровень?
Тот факт, что у "coordinates"
элемента нет связанного индекса, это отрицательно сказывается на производительности? Очевидно, когда я ищу пользователей по гео-запросу.
Какие-либо предложения?
Спасибо за помощь, Алессандро.