Я смотрю на Amazon DynamoDB, так как это похоже на то, что он устраняет все трудности в обслуживании и масштабировании вашего сервера базы данных. В настоящее время я использую MySQL, а поддержка и масштабирование базы данных - полная головная боль.
Я просмотрел документацию, и мне нелегко пытаться обернуть голову тем, как вы структурируете свои данные, чтобы их можно было легко получить.
Я абсолютно не знаком с NoSQL и нереляционными базами данных.
Из документации Dynamo это звучит так, как будто вы можете запросить только таблицу основного хеш-ключа и клавишу основного диапазона с ограниченным числом операторов сравнения.
Или вы можете запустить полное сканирование таблицы и применить к нему фильтр. Уловка в том, что он будет сканировать только 1 Мб за раз, поэтому вам, вероятно, придется повторить сканирование, чтобы найти X количество результатов.
Я понимаю, что эти ограничения позволяют обеспечить прогнозируемую производительность, но похоже, что очень сложно получить данные. И выполнение полного сканирования таблицы, похоже, было бы очень неэффективным и со временем становилось менее эффективным по мере роста вашей таблицы.
Для экземпляра, скажем, у меня есть клон Flickr. Таблица "Мои изображения" может выглядеть примерно так:
- Идентификатор изображения (номер, первичный хэш-код)
- Дата добавления (число, ключ основного диапазона)
- Идентификатор пользователя (строка)
- Теги (набор строк)
- и т.д.
Таким образом, используя запрос, я смог бы перечислить все изображения за последние 7 дней и довольно легко ограничить их количеством X.
Но если бы я хотел перечислить все изображения от конкретного пользователя, мне нужно было бы выполнить полное сканирование таблицы и фильтр по имени пользователя. То же самое касается тегов.
И поскольку вы можете сканировать только 1 Мб за раз, вам может потребоваться несколько сканирований, чтобы найти X количество изображений. Я также не вижу способа легко остановить X-число изображений. Если вы пытаетесь захватить 30 изображений, ваше первое сканирование может найти 5, а второе может найти 40.
Есть ли у меня это право? Это в основном компромисс? Вы получаете очень быструю предсказуемую производительность базы данных, которая практически не требует обслуживания. Но компромисс заключается в том, что вам нужно построить больше логики для решения этих проблем?
Или я полностью отсюда?