如何在 aerospike 中获取一条记录的主键(PK)?
How to get the primary key (PK) of a record in aerospike?
我想从 aerospike 中的集合中获取特定记录。
但是当我执行以下查询时,我没有得到结果:
select * from ctl.prodCache where PK='111222';
但是当我执行以下查询时:
select * from ctl.prodCache;
它给了我所有的记录,但根本没有显示主键。
{
"edigest": "BE6ZxLRMKwnbmUqPTvsmcIAgVv8=",
"set": "prodCache",
"ttl": 54,
"gen": 1,
"bins": {
"C": "java.util.ArrayList",
"V": "00 10 70 61 79 74 6D 6D 61 2E 64 6F 6D 61 69 6E 2E 43 "
}
}
有什么建议吗?请帮忙。
默认情况下,Aerospike 不存储您的主键。它存储您的密钥的 RIPEMD160 散列 + 1 个字节的密钥类型 + 集名称。这就是您在摘要输出的 base64
中看到的内容。在AQL中,你可以设置SEND_KEY true
,然后它会显示在关于记录的元数据中。在 AQL 中执行 SET RECORD_PRINT_METADATA true
和 SET OUTPUT JSON 以获得更好的可见性。现在,如果您的键是字符串 '111222'
,您使用 PK='111222'
的查询应该有效,如果它是整数,则使用 PK=111222
并且应该有效。
那是因为默认不把主键和记录一起存储。 record 由元组 (namespace, set, PK)
标识,然后由客户端通过 RIPEMD-160 散列为 20 字节的摘要。该摘要是记录的实际标识符。这是客户端如何找到其分区 ID,查找哪些节点拥有该分区的主节点,并通过一跳转到该节点。
在该节点上,摘要是与主索引匹配以查找此记录的元数据的内容。扫描会将写入策略的 primary index for a particular namespace, get the metadata of all the records, and stream them back to the client. If you chose to have the sendKey
属性设置为 true,密钥将与记录的数据一起保存。然后你可以从 scan/query 得到它。默认情况下不会发生这种情况,因为这可能意味着很多 space
首先从 AQL 执行以下命令:
SET KEY_SEND TRUE
然后将数据插入特定的集合。
之后,执行select查询。
PK 将仅针对已完成插入并将 KEY_SEND 设置为 true 的插入显示。
我想从 aerospike 中的集合中获取特定记录。
但是当我执行以下查询时,我没有得到结果:
select * from ctl.prodCache where PK='111222';
但是当我执行以下查询时:
select * from ctl.prodCache;
它给了我所有的记录,但根本没有显示主键。
{ "edigest": "BE6ZxLRMKwnbmUqPTvsmcIAgVv8=", "set": "prodCache", "ttl": 54, "gen": 1, "bins": { "C": "java.util.ArrayList", "V": "00 10 70 61 79 74 6D 6D 61 2E 64 6F 6D 61 69 6E 2E 43 " } }
有什么建议吗?请帮忙。
默认情况下,Aerospike 不存储您的主键。它存储您的密钥的 RIPEMD160 散列 + 1 个字节的密钥类型 + 集名称。这就是您在摘要输出的 base64
中看到的内容。在AQL中,你可以设置SEND_KEY true
,然后它会显示在关于记录的元数据中。在 AQL 中执行 SET RECORD_PRINT_METADATA true
和 SET OUTPUT JSON 以获得更好的可见性。现在,如果您的键是字符串 '111222'
,您使用 PK='111222'
的查询应该有效,如果它是整数,则使用 PK=111222
并且应该有效。
那是因为默认不把主键和记录一起存储。 record 由元组 (namespace, set, PK)
标识,然后由客户端通过 RIPEMD-160 散列为 20 字节的摘要。该摘要是记录的实际标识符。这是客户端如何找到其分区 ID,查找哪些节点拥有该分区的主节点,并通过一跳转到该节点。
在该节点上,摘要是与主索引匹配以查找此记录的元数据的内容。扫描会将写入策略的 primary index for a particular namespace, get the metadata of all the records, and stream them back to the client. If you chose to have the sendKey
属性设置为 true,密钥将与记录的数据一起保存。然后你可以从 scan/query 得到它。默认情况下不会发生这种情况,因为这可能意味着很多 space
首先从 AQL 执行以下命令:
SET KEY_SEND TRUE
然后将数据插入特定的集合。
之后,执行select查询。
PK 将仅针对已完成插入并将 KEY_SEND 设置为 true 的插入显示。