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_Datastax_Nosql - Fatal编程技术网

Cassandra 卡桑德拉解释

Cassandra 卡桑德拉解释,cassandra,datastax,nosql,Cassandra,Datastax,Nosql,我是从学校学卡桑德拉的。我有几个问题要问。请帮助我理解这些背后的逻辑 假设我有两张桌子 1) 用户 First Name- Text Last Name- Text UserID - UUID PRIMARY KEY 2) 股票 Stock ID PRIMARY KEY UserID ColXYZ 现在我的疑问是:- 1) 我需要使用first\u name='XYZ'筛选User表。这是一个瓶颈,因为它不是PM,所以我无法过滤它。这种架构背后有什么原因吗 2) 由于我不能按PM以外的任何列

我是从学校学卡桑德拉的。我有几个问题要问。请帮助我理解这些背后的逻辑

假设我有两张桌子

1) 用户

First Name- Text
Last Name- Text
UserID - UUID PRIMARY KEY
2) 股票

Stock ID PRIMARY KEY
UserID
ColXYZ
现在我的疑问是:-

1) 我需要使用
first\u name='XYZ'
筛选
User
表。这是一个瓶颈,因为它不是PM,所以我无法过滤它。这种架构背后有什么原因吗

2) 由于我不能按PM以外的任何列进行过滤,我如何记住用户的UUID??例如:-假设用户XYZ有一个UUID
7892hbwdw81212ww(某物)
,我首先如何知道用户XYZ的UUID???因为我不能按任何其他列进行筛选,所以我需要知道该用户的UUID?我怎么知道呢

3) 因为对于RF>1,协调器根据拓扑将请求转发到不同的节点,然后根据最新的时间戳向客户端作出响应。如果1模式响应缓慢,并且该节点具有最新更新的数据,该怎么办?在那种情况下会发生什么

4) 谁决定需要将数据复制到哪个节点?我知道协调员根据分区键将请求转发到实际节点,数据需要存储在该节点上。但数据将在哪些节点中复制

5) 此外,使用Cassandra本身就是一项艰巨的任务,因为我可以看到DB设计在其中是一项艰巨的任务。我们的模型设计应该是完美的(对于像我这样的新手来说,这并不总是可能的),我们是否应该认真考虑卡桑德拉作为数据源??

< P>我可能会(遗憾地)咬…用户1162512:)

  • Cassandra致力于极端的数据摄取率和非常快速的查询。它将数据存储在分区中,并将分区存储在一起。主键可以有多个字段。PK的第一个字段称为分区键,这就是定义某个数据是哪个分区的原因。高级查询需要额外的复杂性,正是由于这个原因,cassandra的查询能力比SQL server要弱。它在允许的范围内非常严格。您可以按分区键和后续集群键(PK中的其余列)进行查询。您可以在完全相等的条件下执行这些操作,尽管您可以在查询中的最后一个或“最内层”集群列上执行范围查询。这样做的原因是,在分区内,数据按每个连续的集群键进行排序。比如说,你的PK是(A,B,C,D)。然后A定义了分区。在分区中,数据首先沿B排序,在B中,数据沿C排序,然后沿D排序。查询中严格要求的原因是cassandra可以识别一个数据块并简单地返回该数据块。这些选项类似于二级索引,但您几乎总是希望在使用它们之前访问分区。将每个分区看作一个数据库。你会做一个会影响很多数据库的查询吗?这对性能有好处吗?这些限制是为了确保高性能场景中的持续延迟。是的,查询功能是有限的,但它们确实允许在给定一些数据建模的相当多的视图用例中使用。cassandra中的数据建模是查询驱动的。。。如果您的数据模型是为您的查询而构建的,那么您将获得非常好的性能。查询驱动的建模是一种思维转变,与类似SQL的方法截然不同

  • 您需要创建另一个将用户名映射到id的表。非规范化非常常见。请记住,您必须在一个查询中找到一个分区,最多两个分区。这将是一个查找表。如果您需要更高级的搜索,请使用合适的搜索服务器,如lucene、solr等,然后使用密钥查询cassandra

  • 除了RF,您还有读写一致性级别的概念。您可以对每个查询进行控制。您可以指定读取和写入cl,以便读取+写入>RF。如果你这样做,你会有很强的一致性。如果read CL为1且RF>1,则可能会得到过时的数据。这就是可调一致性概念的由来

  • 分区程序选择第一个分区。复制副本由复制策略选择

  • 视情况而定。如果您知道查询的类型(即什么类型的查询,不一定全部),并且需要非常快速的接收、读取、高可用性、内置的跨数据中心复制、水平可扩展性、可调一致性,那么cassandra是一个非常好的数据存储。对于更多分析性工作负载,您可以将其与ApacheSpark配对,这将允许您以更灵活的方式获取数据,但速度不如实时查询。如果你打算在生产中使用它,你将需要花一些时间来学习一些细节,但我想这与任何技术都是一样的。请查看datastax academy上的免费视频,以获得精彩的介绍


  • 希望这能有所帮助。

    ans1。在first_name列上创建索引,如:- 在用户上创建索引firstname(first_name); 如果您可以按名字选择数据,请在选择查询结束时提供“允许筛选”

    ans2。ans1 first将解决第二个问题

    答复3。如果设置了多个一致性级别,则cassandra将匹配来自等于一致性级别的节点的数据,而不是提供更新的数据

    答复4。复制由cassandra根据网络距离决定


    回答5.在cassandra上进行一些练习后,这将很容易。您可以将其用作数据源。

    以后,请尝试将您的问题限制为一个实际问题。感谢ashic提供的非常好的“尖刻”解释:这在某种程度上消除了我的疑虑。但我仍然不清楚如何对Cassandra DB建模的概念。你能不能再“咬”我一口,给我提供一个很好的体验。谢谢:)有人考虑使用二级索引或允许筛选吗