Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
cassandra上不同的可能搜索参数_Cassandra_Nosql_Primary Key - Fatal编程技术网

cassandra上不同的可能搜索参数

cassandra上不同的可能搜索参数,cassandra,nosql,primary-key,Cassandra,Nosql,Primary Key,我是卡桑德拉的新手。在我的头撞在墙上几天后,事情开始变得有意义了,除了。。。。 我总是需要PK来执行查询 亨里克-你接触到了卡桑德拉的许多最基本的概念(迄今为止) 1) 分区键(如您所指的PK)是决定数据存储在C*集群上的位置的键,无论是否为复合键。分区器决定如何将分区键的值转换为令牌。集群中的每个节点负责令牌范围的一部分。因此,当您想要查询某些数据时,通过按分区键进行查询,您实际上是在指示C*从环中的哪个节点获取数据 不要考虑在范围查询中使用字节顺序分区器。看看这个答案 2) 按查询进行设计。

我是卡桑德拉的新手。在我的头撞在墙上几天后,事情开始变得有意义了,除了。。。。
我总是需要PK来执行查询 亨里克-你接触到了卡桑德拉的许多最基本的概念(迄今为止)

1) 分区键(如您所指的PK)是决定数据存储在C*集群上的位置的键,无论是否为复合键。分区器决定如何将分区键的值转换为令牌。集群中的每个节点负责令牌范围的一部分。因此,当您想要查询某些数据时,通过按分区键进行查询,您实际上是在指示C*从环中的哪个节点获取数据

不要考虑在范围查询中使用字节顺序分区器。看看这个答案

2) 按查询进行设计。《卡桑德拉:权威指南:网络规模的分布式数据》一书中有一个关于数据建模的精彩章节。读一本关于数据建模的C*类书籍是一件很好的事情

例如,您拥有订单和行项目的系统。注意:我并不提倡将Cassandra用于订购系统,它只是一个易于理解的关系模型

您的用户希望获得所有订单的项目,所以您可以建立一个表,如

CREATE TABLE orders_to_items (o_id uuid, item_id uuid, PRIMARY KEY(o_id));
如果您还想查看某个项目已添加到的所有订单,则需要/想要一个单独的表

CREATE TABLE items_on_orders (item_id uuid, o_id uuid, PRIMARY KEY(item_id));
因此,您可以看到这两个单独的查询,最终生成两个单独的表

有趣的是,这里有几个简单的答案

是-反规范化,反规范化。这就是C*的意义所在

不要受物化视图的诱惑:除非您真正理解它们,否则我建议您避免

3)对于你的搜索项目(按名称搜索),你可能想考虑一个额外的工具,比如卡桑德拉上面的Lucene来执行你所说的“搜索”。我在Cassandra的stratio Lucene插件中看到了一些不错的、真实的成功


注意:我在AWS中运行一个9节点、3.11.2 C*群集。

我认为对于这种搜索,最好使用Solr或Elasticsearch之类的搜索工具,这样更自然。Randy!非常感谢您花时间回答这个问题!我真的没有考虑BOP或物化视图,因为我甚至不知道它们是什么意思(我研究了它,但我仍然不确定我是否理解它们)。我会拿到这本书的。在你提到Stratio Lucene插件之后,我就开始关注它了,它看起来很棒。我确信它会满足我的需要。非常感谢你!!