我正在尝试从我的集合中删除垃圾箱。
问题是当我删除它们时,它们仍显示在
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时会发生什么?(这将删除已删除的[标记为已删除]垃圾箱)
注意:我已经通过使用删除了垃圾箱进行了测试
还有一个问题-有什么办法可以通过aql从集合中删除所有垃圾箱?
看看这个讨论论坛,那里有很多方法可以删除Aerospike中垃圾箱的元数据。
https://discuss.aerospike.com/t/bin-names-deletion/731
您可以通过将AQL设置为NULL来删除垃圾箱
例如:插入命名空间。集合(PK,bin)值(“ 1”,NULL)将从主键为“ 1”的记录中删除垃圾箱
Aerospike将数据分为两部分:索引和值。索引始终存储在DRAM中,该值可以存储在SSD或DRAM中(具有或不具有磁盘以保持持久性)。删除记录后,将从索引中删除对该记录的引用。实际数据不会从磁盘中删除。另一个过程将发现磁盘上的数据未被使用,并回收空间。
请注意,删除的对象可能会重新出现。为此,必须进行以下操作:
必须将节点配置为从磁盘加载数据。以及是否已删除数据,但尚未从磁盘中删除数据。(即索引条目已被删除)。在这种情况下,当节点启动时,它将从磁盘读取数据并重建索引。由于尚未从磁盘中删除数据,因此该节点将认为该数据仍处于活动状态,并为其建立新的索引条目。因此,删除的对象将返回。如果知道要拆除某个节点,则可以使用快速重启功能来防止删除的数据返回。即使数据库进程已关闭,这也会将索引保留在内存中。
较新版本中的另一个选项是使用“冷启动-空”配置,该配置可防止从磁盘加载数据,但只能从群集中的其他节点进行迁移。
此处的更多信息:http : //www.aerospike.com/docs/reference/configuration/#cold-start-empty
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句