Как вы запрашиваете DynamoDB?

Я смотрю на DynamoDB от Amazon, так как кажется, что он избавляет от всех хлопот по обслуживанию и масштабированию сервера базы данных. В настоящее время я использую MySQL, и поддержка и масштабирование базы данных - это полная головная боль.

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

Я совершенно новичок в NoSQL и нереляционных базах данных.

Из документации Dynamo звучит так, будто вы можете запросить таблицу только по первичному хеш-ключу и первичному ключу диапазона с ограниченным числом операторов сравнения.

Или вы можете запустить полное сканирование таблицы и применить к ней фильтр. Суть в том, что он будет сканировать только 1 Мб за раз, поэтому вам, вероятно, придется повторить сканирование, чтобы найти X результатов.

Я понимаю, что эти ограничения позволяют им обеспечивать предсказуемую производительность, но кажется, что это действительно затрудняет вывод ваших данных. И выполнение полного сканирования таблицыкажется как будто это было бы действительно неэффективно и только становилось бы менее эффективным со временем по мере роста вашей таблицы.

Например, скажем, у меня есть клон Flickr. Моя таблица изображений может выглядеть примерно так:

Идентификатор изображения (номер, первичный хэш-ключ)Дата добавления (число, первичный ключ диапазона)Идентификатор пользователя (строка)Теги (набор строк)и т.д

Таким образом, используя запрос, я смогу перечислить все изображения за последние 7 дней и довольно легко ограничить его количеством X.

Но если бы я хотел перечислить все изображения от конкретного пользователя, мне нужно было бы выполнить полное сканирование таблицы и отфильтровать по имени пользователя. То же самое касается тегов.

А поскольку вы можете сканировать только 1 Мб за раз, вам может потребоваться выполнить несколько сканирований, чтобы найти X изображений. Я также не вижу способа легко остановиться на количестве картинок X. Если вы пытаетесь получить 30 изображений, первое сканирование может найти 5, а второе - 40.

У меня есть это право? Это в основном компромисс? Вы получаете действительно быструю предсказуемую производительность базы данных, которая практически не требует обслуживания. Но компромисс в том, что вам нужно выстроить больше логики, чтобы иметь дело с результатами?

Или я здесь совсем не в базе?

Ответы на вопрос(3)

Ваш ответ на вопрос