【问题标题】:Cassandra explanations卡桑德拉解释
【发布时间】:2015-04-28 18:20:11
【问题描述】:

我从 Datastax 学习 Cassandra。我对此有几个问题。请帮助我理解这些背后的逻辑。

假设,我有 2 张桌子。

1) 用户

First Name- Text
Last Name- Text
UserID - UUID PRIMARY KEY

2) 股票

Stock ID PRIMARY KEY
UserID
ColXYZ

现在我的疑问是:-

1) 我需要用first_name = 'XYZ' 过滤User 表。它是一个瓶颈,因为它不是 PM,因此我无法过滤它。这种架构背后有什么原因吗??

2) 既然我不能按 PM 以外的任何列进行过滤,我如何记住用户的 UUID?例如:-假设用户 XYZ 有一个 UUID 7892hbwdw81212ww (something),我如何首先知道用户 XYZ 的 UUID ???由于我无法按任何其他列过滤,我需要知道该用户的 UUID?我怎么会知道呢?

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

4) 谁决定需要将数据复制到哪些节点?我知道协调器根据分区键将请求转发到需要存储数据的实际节点。但是数据会复制到哪些节点呢?

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

【问题讨论】:

  • 今后,请尽量将您的问题限制在一个实际问题上。

标签: cassandra datastax nosql


【解决方案1】:

我会(可能很遗憾地)咬人...... user1162512 :)

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

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

  3. 除了 RF,您还有读写一致性级别的概念。您可以按查询控制这些。您可以指定 Read 和 Write cl,以便 Read + Write > RF。如果你这样做,你将有很强的一致性。如果您的读取 CL 为 1 且 RF > 1,您可能会得到陈旧的数据。这就是可调一致性概念的用武之地。

  4. 分区程序选择第一个分区。副本由复制策略选择。http://www.datastax.com/documentation/cassandra/2.0/cassandra/architecture/architectureDataDistributeAbout_c.htmlhttp://www.datastax.com/docs/1.0/cluster_architecture/replication

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

希望对您有所帮助。

【讨论】:

  • 感谢 ashic 提供了非常好的“尖刻”解释。 :P 它以某种方式消除了我的疑虑。但是我仍然不清楚如何为 Cassandra DB 建模的概念。你能不能再“咬”我一次,并在stackoverflow.com/questions/28763294/… 上提供一个很好的体验。谢谢:)
【解决方案2】:

回答1。在 first_name 列上创建索引,例如:- 在用户(first_name)上创建索引名字; 除了您可以按名字选择数据之外,还请在选择查询的末尾提供“允许过滤”。

ans2. ans1 首先将解决第二个问题。

答案3。如果您设置的一致性级别超过第一个,cassandra 将匹配来自节点的数据等于一致性级别,而不是提供更新的数据。

ans4. cassandra根据网络距离决定复制。

ans5 。在cassandra上做一些练习后会很容易。你可以将它用作数据源。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2015-10-19
  • 2015-03-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-16
  • 1970-01-01
相关资源
最近更新 更多