我目前正在设计一个可以处理许多关系的Aerospike Cluster,并且会很快变大。我在airospike文档中发现了许多使用python客户端检索密钥时生成的摘要,但没有一个在保存内存之外显示它的用处。
来自文档:: 摘要是密钥的哈希。使用RIPEMD-160算法对密钥进行哈希处理,它将获取任意长度的密钥,并且总是返回20字节大小的摘要。如果您有一个长密钥,比如200字节,获取该密钥的摘要将允许您通过保存180字节来提高线路性能。
我的问题是,摘要会增加查找时间吗?是否值得将摘要存储在其他集合中以创建关系?
答案 0 :(得分:2)
检索密钥时不会生成digest
,而是在客户端中启动key
时计算,并且该摘要将用于与群集通信并找到记录。<登记/>
默认情况下,即使实际键也不会与记录数据一起保存。所以内部所有的查找都是使用摘要进行的。
在应用程序中,每条记录都有一个与之关联的密钥。 此密钥是应用程序用于读取或写入记录的密钥。
但是,当密钥被发送到数据库时,密钥(连同 设置信息)被散列为160位摘要。内 数据库,摘要用于解决所有操作的记录。
密钥主要用于应用程序,而摘要是 主要用于解决数据库中的记录。
您不需要直接使用摘要。当你创建关系时,你也会为性能创建一个secondary index,并且无论如何都会基于哈希工作,所以使用摘要而不是密钥没有区别。
您还可以尝试将关系建模为同一记录中的复杂或大型数据类型。
答案 1 :(得分:2)
摘要也用于定位Aerospike群集中的记录。前12位用于表示分区ID,并使用分区ID,分区表映射集群中记录的主节点和副本节点。因此,基本上摘要是快速查找的关键。
此外,使用RIPEMD160算法计算摘要,该算法具有非常小的碰撞率,导致节点之间的数据分布均匀。
只有digest问题是它还构成主索引(摘要+元数据),索引始终存储在内存中,从而限制了可以存储在群集中的记录数。