我正在我们的项目中实现DynamoDB。我们必须将大数据字符串放入数据库中,因此我们将数据拆分成小块并插入多行,只更改了一个属性值 - 字符串的一部分。一列(范围键)包含许多部分。插入和选择数据对于小型和大型字符串非常适用。问题是删除项目。我读到当你想删除一个项目时,你需要为这个项目指定主键(散列键或散列键和范围键 - 取决于表)。但是,如果我想删除对其中一个属性具有特定价值的项目,该怎么办?我是否需要扫描(扫描,而不是查询)整个表格以及每行运行删除或批量删除?或者是否有一些不使用两个查询的解决方案?我要做的是避免扫描整个表格。我想我们在这样的表格中会有大约100-1000万行,所以扫描速度会很慢。
感谢您的帮助。
答案 0 :(得分:1)
在DynamoDB中有无法删除任意元素。您确实需要知道hash_key
和range_key
。
如果query
不符合您的需求(即您甚至不知道hash_key
),那么您就会陷入困境。
最好是重新设置数据建模。建立 custom index 或“延迟删除”。
要实现'延迟删除',请使用表作为要删除的元素队列。定期在其上运行EMR以在单个扫描操作中执行批处理中的所有删除操作。这不是最好的解决方案,而是我能想到避免重新建模的唯一方法。
TL; DR :没有真正的办法,只有解决方法。我强烈建议您至少重新建模部分数据。