卡桑德拉的解释

时间:2015-02-26 11:33:30

标签: cassandra datastax nosql

我是从Datastax学习Cassandra的。我也有同样的问题。请帮助我理解这些背后的逻辑。

假设,我有2张桌子。

1)用户

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

2)股票

Stock ID PRIMARY KEY
UserID
ColXYZ

现在我的怀疑是: -

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

2)因为,我不能按PM以外的任何列进行过滤,我怎么能记住用户的UUID?例如: - 假设用户XYZ有一个UUID 7892hbwdw81212ww (something),我怎样才能在第一时间知道用户XYZ的UUID ???由于我无法通过任何其他列进行筛选,我需要知道该用户的UUID?我怎么知道这个?

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

4)谁决定需要复制数据的所有节点?我知道协调员根据需要存储数据的分区键将请求转发给实际节点。但是在哪些节点中数据会被复制?

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

2 个答案:

答案 0 :(得分:2)

我(可能很遗憾)咬人.. 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之外,您还拥有读写一致性级别的概念。您可以控制每个查询。您可以指定读取和写入cl,以便Read + Write> RF。如果你这样做,你将具有很强的一致性。如果您的读取CL为1且RF> 1,你可能会得到陈旧的数据。这就是可调整一致性的概念所在。

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

  5. 这取决于。如果你知道查询的类型(即什么类型的查询,不一定是所有查询),并且需要非常快速的摄取,读取,高可用性,内置的跨数据中心复制,水平可伸缩性,可调整性,那么cassandra是一个非常好的数据存储。对于更多分析工作负载,您可以将其与Apache Spark配对,这样可以更灵活地获取数据,但不会像实时查询一样快。如果你打算在生产中使用它,你需要花一些时间来学习一些细节,但我想这与任何技术有关。查看datastax学院的免费视频,了解最佳介绍。

  6. 希望有所帮助。

答案 1 :(得分:0)

ANS1。在first_name列上创建索引,如: - 在User(first_name)上创建索引名字; 您可以通过first_name选择数据,也请提供“允许过滤”。在选择查询的末尾。

ANS2。 ans1首先解决第二个问题。

ANS3。如果你设置的consitency级别超过一个cassandra将匹配来自等于一致性级别的节点的数据,那么它将提供更新的数据。

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

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