Я занимаюсь реализацией масштабируемой неупорядоченной коллекции объектов поверх Amazon DynamoDB. До сих пор следующие варианты были рассмотрены:Как реализовать масштабируемую, неупорядоченную коллекцию в DynamoDB?
Используйте DynamoDB типов данных документов (карты, список) и использовать путь к документу для доступа автономных пунктов. У этого есть один очевидный недостаток, поскольку коллекция ограничена 400 Кбайт данных, что означает, возможно, 1..10K объектов в зависимости от их размера. Менее очевидным недостатком является то, что стоимость вставки нового объекта в такую коллекцию будет огромной: Amazon указывает, что емкость записи будет вычитаться на основе общего размера элемента, а не только недавно добавленного объекта, поэтому 400 единиц мощности для вставляя объект 1 КБ при приближении к пределу размера. Итак, учитывая это исключено?
Использование составной первичной хеширования + диапазон, где основной хеш остается неизменным для всех объектов в коллекции, а клавиша диапазона - это что-то случайное или атомный счетчик. Очевидным недостатком является то, что наличие идентичного хеш-ключа приводит к плохому распределению ключей - мощность мала, когда есть коллекции с большим количеством объектов. Это означает неправильное разбиение на разделы и наличие проблемы масштабирования при всех чтениях/записи в одной коллекции, привязанных к одному осколку, становясь предметом 3000 чтения/1000 операций записи в секунду для раздела DynamoDB.
Использование глобального вторичного индекса со вторичным ключом хэша + диапазона, где хеш-ключ остается неизменным для всех объектов, принадлежащих к одной и той же коллекции, а ключ диапазона - это что-то случайное или атомный счетчик. Как и выше, разбиение становится неудовлетворительным для GSI, и оно станет узким местом со слишком большим количеством идентичных хэшей, которые быстро истощают всю обеспеченную пропускную способность индекса. Я не нашел, как GSI реализуется точно, поэтому не уверен, насколько сильно он страдает от низкой мощности.
Вопрос в том, смогу ли я жить с (2) или (3) и страдают от неидеального распределения ключей, или есть другой способ реализации коллекции, которая была упущена, или, возможно, я должен вообще рассмотреть глядя в другой движок базы данных nosql.