java - 即使 "set"名称为空,Aerospike Java 客户端也会存储数据

标签 java aerospike aerospike-ce

我正在调试我的代码,我发现这个设置名称为“null”的 Aerospike java 客户端代码可以工作并在 aerospike 中插入数据:

AerospikeClient client = new AerospikeClient("localhost", 3000);
Key key = new Key("test", null, inputPayload.getUuid());//Note that the set name is given as "null"

Bin bin1 = new Bin("segments", inputPayload.getSegments());

client.put(null, key, bin1);

我能够插入和检索数据,但是 show sets没有透露任何设定名称。 经过一些调试后,我使用 select * from <namespace> 找到了数据

enter image description here

我的问题是

  1. 如果数据没有存储在集合中,那么它存储在哪里?
  2. 我们知道 aerospike 与关系数据库的比较是:namespace == database 和 set == table。但是在关系型数据库中,我们是不允许直接往db中插入数据的,需要先建表。这是有道理的。那么,为什么 aerospike 允许我们使用空集来做到这一点?

最佳答案

在 Aerospike 中,您最多可以定义 1024 个集合,(0 到 1023)...默认集合 #0 是“空”集合。集合名称只是记录上的元数据——数据建模的便利性,有助于某些命令——尤其是 5.6 版中发布的最新功能,集合索引——大大加快了扫描少量记录(比如 1,000 条)的速度,例如, “setA”,在一个原本巨大的命名空间(比如 10 亿条记录)中。始终将集合元数据附加到您的记录还有其他操作优势,即为每个记录指定一个集合名称,例如在企业版中使用持久截断。如果空集和命名集中的记录混合存在,则不能截断仅空集中的记录。如果您有一个专门的命名空间用于您不想分配集合名称的记录,它可以节省您的存储空间——集合名称与设备存储中的每条记录一起存储。因此,在某些数据模型中存在不使用集合名称的动机。集合名称最多可包含 63 个字符,每个字符在每条记录中占用设备一个字节的存储空间。

关于java - 即使 "set"名称为空,Aerospike Java 客户端也会存储数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67725063/

相关文章:

java - Apache POI 默认情况下锁定所有单元格。如何让所有单元格解锁?

java - 使用 Apache Commons 卡尔曼滤波器进行 2D 定位估计

java - 强制maven站点插件使用特定的java版本?

predicate - Aerospike:如何对二级索引执行 IN 查询

aerospike - 如何使用 aql 对 Aerospike 中特定 bin 中的所有列表进行排序?

aerospike - 从 Aerospike 查询语言中的一组中选择随机 bin?

Java Selenium 路径

in-memory-database - Nosql数据库哪个Key值能保证掉电不丢失数据?

aerospike - Aerospike 中的数据丢失检测

truncate - 是否可以使用 'truncate' 在 Aerospike 中使用 asinfo 发出持久删除?