#database #design-patterns #database-design #nosql #amazon-dynamodb
#База данных #проектирование-шаблоны #database-design #nosql #amazon-dynamodb
Вопрос:
Я пытаюсь найти лучшее решение для структуры данных / хранилища данных (с максимальной производительностью) для следующего запроса:
У меня есть список атрибутов, которые мне нужно сохранить для всех пользователей в США, например:
------------ ------- -------------
| Attribute | Value | SSN |
------------ ------- -------------
| hair color | black | 123-45-6789 |
| eye color | brown | 123-45-6789 |
| height | 175 | 123-45-6789 |
| sex | M | 123-45-6789 |
| shoe size | 42 | 123-45-6789 |
Как вы можете догадаться, в общей совокупности нет ничего уникального и идентифицируемого по этим атрибутам.
Однако давайте предположим, что если бы мы извлекали данные из комбинации 3 или 4 атрибутов, тогда я смог бы однозначно идентифицировать человека (найти его SSN).
Теперь вот трудности, набор комбинаций, которые могут однозначно идентифицировать человека, со временем будет развиваться и корректироваться.
Что было бы моим лучшим выбором для хранения и запроса данных в упомянутом выше сценарии, который будет оставаться высокопроизводительным (<100 мс) в масштабе?
Текущая попытка с объединением двух атрибутов:
SELECT * FROM (SELECT * FROM people WHERE hair='black') p1
JOIN (SELECT * FROM people WHERE height=175) p2
ON p1.SSN = p2.SSN
Но с базой данных с миллионами строк, как вы можете догадаться .. НЕ работает.
Спасибо!
Комментарии:
1. просто интересно, но можете ли вы переключиться на Document DB?
2. Привет @DavidGuida, спасибо за ваш ответ. Я мог бы полностью переключиться на document DB. Решение для хранения данных не является ограничением, важна высокая производительность. Есть ли у вас какие-либо предложения о том, как вы могли бы разработать документ?
Ответ №1:
если хранилище данных не является ограничением, я бы использовал DocumentDB, что-то вроде MongoDB, CosmosDB или даже ElasticSearch.
Например, с помощью Mongo вы могли бы использовать его бессхемный характер и иметь коллекцию пользователей с одним свойством на «атрибут»:
{
"SSN": "123-45-6789",
"eyeColor": "brown",
"hairColor" "blond",
"sex": "M"
}
документы в этой коллекции могут иметь разные свойства, но это не проблема. Все, что вам нужно сделать сейчас, это поместить индекс для каждого из них и выполнить ваши запросы.