我正在尝试从我的集合中删除垃圾箱。
问题是当我删除它们时,它们仍然显示在
aql> show bins
+-------+------------------+-------+-----------+
| quota | bin | count | namespace |
+-------+------------------+-------+-----------+
| 32768 | "family" | 14 | "test" |
| 32768 | "querybinstring" | 14 | "test" |
| 32768 | "querybinint" | 14 | "test" |
| 32768 | "binstringfoo" | 14 | "test" |
+-------+------------------+-------+-----------+
尽管数据已从集合中删除。
aql> select * from test.testset
0 rows in set (0.000 secs)
当我的 binNames 达到唯一 binNames 约束的 32k 限制时,就会出现问题。
我必须重新启动 aerospike,删除的 bin 名称才会真正消失。
那么除了删除垃圾箱后重新启动还有其他方法吗?
aerospike 重新启动后到底会发生什么? (这将删除已删除的[标记为已删除]垃圾箱)
注意:我已经通过使用
删除垃圾箱对此进行了测试- client.delete()
- 设置过期时间
还有一个问题 - 有什么方法可以通过 aql 从集合中删除所有垃圾箱?
最佳答案
- 删除 Aerospike 中元数据的方法
查看此论坛,了解删除 Aerospike 中 bin 元数据的方法列表。
https://discuss.aerospike.com/t/bin-names-deletion/731
- 从 AQL 中删除 Bin
您可以使用 AQL 将垃圾箱设置为 NULL 来删除垃圾箱
例如:插入namespace.set(PK, bin)值('1', NULL) 将从主键为“1”的记录中删除 bin
- 一般性了解删除
Aerospike 将数据分为两部分:索引和值。索引始终存储在 DRAM 中,值可以存储在 SSD 或 DRAM 中(有或没有磁盘用于持久化)。当一条记录被删除时,对该记录的引用也会从索引中删除。实际数据并未从磁盘中删除。另一个进程会发现磁盘上的数据没有被使用并回收空间。
请注意,已删除的对象有可能重新出现。为此,必须满足以下条件:
节点必须配置为从磁盘加载数据。如果数据已被删除,但尚未从磁盘中删除。 (即索引条目已被删除)。在这种情况下,当节点启动时,它将从磁盘读取数据并重建索引。由于数据尚未从磁盘中删除,因此节点会认为它仍然处于事件状态并为其构建新的索引条目。所以被删除的对象将会返回。如果您知道要关闭某个节点,则可以使用快速重启功能来防止已删除的数据返回。即使数据库进程停止运行,这也会将索引保留在内存中。
新版本中的另一个选项是使用“冷启动空”配置,该配置可防止从磁盘加载数据,但只能从集群中的其他节点迁移。
更多信息请点击这里: http://www.aerospike.com/docs/reference/configuration/#cold-start-empty
关于气钉 : Delete all bins,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27546948/