Ответ на этот вопрос зависит от количества предметов, их размера и вашего бюджета. В зависимости от этого у нас есть 3 случая:
1- Количество и размер предметов в таблице не очень много. то, как сказал Штеффен Опель, вы можете использовать запрос вместо сканирования, чтобы получить все элементы для user_id, а затем перебрать все возвращенные элементы и либо облегчить, DeleteItem
либоBatchWriteItem
. Но имейте в виду, что здесь вы можете сжечь большую пропускную способность. Например, рассмотрим ситуацию, когда вам нужно удалить 1000 элементов из таблицы DynamoDB. Предположим, что каждый элемент имеет размер 1 КБ, в результате получается около 1 МБ данных. Эта задача массового удаления потребует в общей сложности 2000 единиц емкости записи для запроса и удаления. Чтобы выполнить эту загрузку данных в течение 10 секунд (что даже не считается быстрым в некоторых приложениях), вам нужно будет установить предоставленную пропускную способность записи для таблицы на 200 единиц емкости записи. Как видите, можно использовать этот способ для меньшего количества элементов или элементов небольшого размера.
2- У нас много предметов или очень крупных предметов в таблице, и мы можем хранить их в зависимости от времени в разных таблицах. Затем, как сказал Джонатан, вы можете просто удалить таблицу. это намного лучше, но я не думаю, что это подходит к вашему случаю. Поскольку вы хотите удалить все данные пользователей, независимо от времени создания журналов, в этом случае вы не можете удалить конкретную таблицу. Если вы хотите иметь отдельную таблицу для каждого пользователя, я думаю, что если количество пользователей велико, то это так дорого и непрактично для вашего случая.
3- Если у вас много данных и вы не можете разделить горячие и холодные данные на разные таблицы, и вам нужно часто выполнять крупномасштабное удаление, то, к сожалению, DynamoDB совсем не подходит для вас. Это может стать дороже или очень медленно (зависит от вашего бюджета). В этих случаях я рекомендую найти другую базу данных для ваших данных.