首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Cassandra如何搜索字符串的唯一键?

Cassandra如何搜索字符串的唯一键?
EN

Stack Overflow用户
提问于 2016-07-22 15:34:14
回答 2查看 699关注 0票数 1

我想使用字符串(大约大约6到7个字符)作为复合主键中的唯一键。

我已经用谷歌搜索了在主键中使用字符串是否会影响性能,并发现不会,因为Cassandra使用散列来搜索唯一键。(请确认这一点)

所以我想知道Cassandra使用什么技术来搜索唯一键,如果它使用散列,那么它使用哪种散列算法?还想知道Cassandra在冲突的情况下会做什么,因为在哈希中总是有冲突的可能性。

Cassandra使用murmur3散列来处理分区键。它是否使用相同的唯一键来搜索?那么碰撞又如何呢?

EN

回答 2

Stack Overflow用户

发布于 2016-07-22 23:39:36

既然你提到了组合键,所以我假设你有一个像这样的PK,主键(PartionKey,StringVal),其中StringVal是6到7个字符,我猜你想知道C*如何有效地记录这个PK。如果这是你的问题,那么答案在于C*是如何存储数据的。在本例中,使用'StringVal‘作为排序顺序,将给定分区键的所有数据存储为一个物理行。因此,如果对于给定的StringVal值有100万个唯一的'StringVal‘,那么它们都将作为一个物理行(在磁盘上)存储在一个节点上(由PartionKey的散列确定),并以’StringVal‘的默认升序进行排序。PK中除分区键以外的所有列都被称为“聚类”列,因为它们决定了聚类顺序。因此,在本例中,组合键的第一列是分区键,第二列是聚集列,它决定了分区键的所有记录的聚类顺序。现在,如果你想得到一个特定的PK记录,因为C*将主键的偏移量存储在索引文件(列族的-Index.db文件)中,所以获取一个PK的特定记录是非常有效的,因为它涉及到寻找那个位置。此外,这也允许C执行有效的范围查询,例如,您可以通过指定一个范围‘StringVal’,如‘nnn’> sv <‘mmm’来获取与分区键对应的一片物理行,在您的情况下,这将是词法顺序比较。但关键是,因为它在磁盘上的顺序是特定的,并且C*对与‘StringVal’值相对应的各种记录进行了偏移,所以它可以进行非常有效的寻道。

票数 1
EN

Stack Overflow用户

发布于 2016-07-22 21:00:09

对分区键值进行散列,然后将其用于指向拥有该令牌范围的节点。由于哈希值对于一个值总是相同的,所以没有冲突这回事。如果您使用相同的值分区键,您将写入现有分区,这将导致更新。Insert和update都是相同的操作,称为upsert。希望能有所帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38520721

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档