3

我目前正在设计一个 Aerospike 集群,它可以处理许多关系,并且会很快变得非常大。我在 aerospike 文档中找到了许多参考,这些参考是使用 python 客户端检索密钥时生成的摘要,但没有一个显示它在节省内存之外的有用性。

从文档中::摘要是密钥的哈希。使用 RIPEMD-160 算法对密钥进行哈希处理,该算法将采用任意长度的密钥,并且始终返回 20 字节大小的摘要。如果您有一个长密钥,例如 200 字节,获取该密钥的摘要将允许您通过节省 180 字节来提高线路性能。

我的问题是,摘要会增加查找时间吗?为了建立关系,是否值得将摘要存储在其他集合中?

4

2 回答 2

3

检索密钥时不会生成,digest而是在您key在客户端启动 a 时计算它,并且该摘要将用于与集群通信并定位记录。
默认情况下,即使是实际密钥也不会与记录数据一起保存。因此,无论如何,在内部,所有查找都是使用摘要执行的。

文档中:

在应用程序中,每条记录都有一个与之关联的键。该密钥是应用程序用来读取或写入记录的密钥。

然而,当密钥被发送到数据库时,密钥(连同设置的信息)被散列成一个 160 位的摘要。在数据库中,摘要用于处理所有操作的记录。

密钥主要用于应用程序,而摘要主要用于寻址数据库中的记录。

您不需要直接使用摘要。当您创建关系时,您还将为性能创建一个二级索引,并且无论如何都将基于散列工作,因此使用摘要而不是键没有任何区别。
您还可以尝试将关系建模为同一记录中的复杂或大型数据类型。

于 2015-04-23T07:03:47.180 回答
2

摘要还用于定位 Aerospike 集群中的记录。前 12 位用于表示分区 id,使用分区 id,分区表映射集群中记录的 Primary 和 Replica 节点。因此,本质上摘要是快速查找的关键。

此外,摘要是使用 RIPEMD160 算法计算的,该算法具有非常可忽略的冲突率,从而导致节点之间的数据分布均匀。

摘要的唯一问题是它还构成主索引(摘要+元数据),并且索引始终存储在内存中,从而限制了可以存储在集群中的记录数量。

于 2015-05-07T10:35:01.553 回答