Мы пытаемся получить наши головы, обернутые вокруг вопроса дизайна, что на самом деле не так просто в любой БД. У нас есть 100 000 случайных предметов (может быть намного больше), (мы говорим по-настоящему случайным ключом, мы будем использовать UUID), и мы хотим раздавать их по одному. Заказ не важен. Мы думаем, что мы создадим таблицу динамо элементов, а затем удалим их из этой таблицы по мере их назначения. Мы можем сделать условное удаление, чтобы убедиться, что мы еще не дали этот элемент. Но, пытаясь найти элемент в первую очередь, если мы сделаем сканирование или запрос с лимитом в 1, будет ли он всегда попадать в ту же самую первую доступную запись? Мне интересно, что такое последствия. Динамо будет осколочно на UUID. Мы беспокоимся о том, что каждый сингл пытается попасть в одну и ту же запись все время. Сначала можно было бы удалить, тогда они могли бы нанести удар по второму и т. Д.Извлечение случайных одиночных предметов в Dynamo
Мы могли бы создать экземпляр memcache/redis в эластичном кеше и сохранить список доступных UUDS там. Мы можем сделать случайный выбор элементов из этого, используя redis SPOP, который получает случайный элемент и удаляет его. У нас может возникнуть проблема, когда мы можем выйти из синхронизации между ними, но по большей части это сработает.
Любые мысли о том, как сделать это без кеша, были бы замечательными. Если динамо выполняет сканирование, начиная с разных точек, это будет денди.
Какова причина создания таблицы со всеми вашими присваиваемыми идентификаторами? Если вы используете UUIDs, их должна быть очень низкая вероятность дублирования, поэтому вместо условного удаления вы можете использовать условную запись? – mkobit
Клиент хочет список идентификаторов раньше времени, так как им необходимо включить их с предложением продукта. – CargoMeister
И условная запись, вероятно, будет работать. – CargoMeister