如何在 Aerospike 中获取 bin 的大小?

How to get the size of a bin in Aerospike?

在 aerospike 中,当我们执行 show sets 时,我们会看到如下内容:

+------------------+--------+---------+-------------------+------------+-------------------+-------------------+----------------+------------+
| disable-eviction | ns     | objects | stop-writes-count | set        | memory_data_bytes | device_data_bytes | truncate_lut   | tombstones |
+------------------+--------+---------+-------------------+------------+-------------------+-------------------+----------------+------------+
| "false"          | "test" | "310"   | "0"               | "byteData" | "25663706"        | "25680736"        | "358239062044" | "0"        |
| "false"          | "test" | "310"   | "0"               | "kwString" | "1076835"         | "1092352"         | "0"            | "0"        |
+------------------+--------+---------+-------------------+------------+-------------------+-------------------+----------------+------------+

这让我们知道集合 byteData 占用大约 25MB。现在,假设集合 byteData 有两个 bin,即。 binAbinB,那我怎么才能得到这两个bin的大小呢?

我找不到直接的方法,但有一个解决方法。解决方法,因为这无法从 aql 提示中获知。我正在使用 Aerospike JAVA 客户端,并且能够使用相同的客户端找到垃圾箱的大小。

假设你在bin中插入字符串,那么你需要做的就是:

Value value = new Value.StringValue(someString);
value.estimateSize(); //Store it in a list, and then sum up the sizes for 
//all the strings inserted in that bin to find the size of the bin

答案参考 - https://discuss.aerospike.com/t/how-to-get-record-size-in-aeropsike/2639

除了 StringValue 之外的其他可能的子 类 已列出 here

Aerospike 存储记录 - 每条记录都可以将名称设置为标签或元数据,并且它可以存储 bin。架构处于记录级别,它将是用户在每条记录的基础上创建的任何内容。因此,估计“集合中垃圾箱的大小”是一种错误的要求。例如,在命名空间 n1 中,在集合 s1 中,我可以添加两条记录 r1 和 r2。 r1 可以有 bins b1 和 c1,r2 可以有 bins b2 和 c2。 b1、c1、b2、c2 可以是彼此完全不同的数据类型。现在,实际上,在给定的集合中,用户将在所有记录中遵循某种类似的模式。

您可以根据存储的数据计算任何记录的大小,包括开销。有关详细信息,请参阅此 link:https://docs.aerospike.com/docs/operations/plan/capacity/index.html 但无法直接从 Aerospike 获取“集合中垃圾箱的大小”。