2

I am trying to delete bins from my set.
The thing is when I delete them, they are still shown in

aql> show bins
+-------+------------------+-------+-----------+
| quota | bin              | count | namespace |
+-------+------------------+-------+-----------+
| 32768 | "family"         | 14    | "test"    |
| 32768 | "querybinstring" | 14    | "test"    |
| 32768 | "querybinint"    | 14    | "test"    |
| 32768 | "binstringfoo"   | 14    | "test"    |
+-------+------------------+-------+-----------+

though the data has been deleted from the set.

aql> select * from test.testset
0 rows in set (0.000 secs)

The issue arises when my binNames reaches 32k limit of unique binNames constraint.
I have to restart aerospike for the deleted bin names to be really gone.

So is there any other way than to restart after deleting bins ?
What really happens when aerospike is restarted ? (which deletes the deleted [marked as deleted] bins )

Note : I have tested this by deleting the bins using

  1. client.delete()
  2. set expiration

One more question - Is there any way I can delete all bins from a set through aql ?

4

2 回答 2

3
  • Aerospike 中删除元数据的方法

看看这个讨论论坛,了解在 Aerospike 中删除 bin 元数据的方法列表。

https://discuss.aerospike.com/t/bin-names-deletion/731

  • 从 AQL 中删除 Bin

您可以使用 AQL 将 bin 设置为 NULL 来删除它

例如:插入到 namespace.set (PK, bin) 值 ('1', NULL) 将从具有主键 '1' 的记录中删除 bin

  • 一般理解删除

Aerospike 将数据分为两部分:索引和值。索引始终存储在 DRAM 中,值可以存储在 SSD 或 DRAM 中(有或没有磁盘以实现持久性)。当一条记录被删除时,对它的引用将从索引中删除。实际数据不会从磁盘中删除。另一个进程会发现磁盘上的数据没有被使用并回收空间。

请注意,已删除的对象可能会重新出现。为此,必须发生以下情况:

该节点必须配置为从磁盘加载数据。如果数据已被删除,但尚未从磁盘中删除。(即索引条目已被删除)。在这种情况下,当节点启动时,它会从磁盘读取数据并重建索引。因为数据还没有从磁盘中删除,节点会认为它仍然处于活动状态并为它建立一个新的索引条目。所以被删除的对象会返回。如果您知道您将关闭一个节点,您可以使用快速重启功能防止已删除的数据返回。即使数据库进程关闭,这也会将索引保存在内存中。

较新版本中的另一个选项是使用“冷启动空”配置,该配置可防止从磁盘加载数据,但只能通过从集群中的其他节点迁移。

更多信息在这里: http ://www.aerospike.com/docs/reference/configuration/#cold-start-empty

于 2014-12-18T20:24:09.237 回答
1

您创建的每个键空间都将成为 Aerospike 的数据文件夹的一部分。您可以直接删除该文件。

这是我们发现一次删除所有数据的简单方法之一。

folder loc :: /opt/aerospike/usr/
于 2015-05-05T15:14:04.663 回答