我是从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?我怎么知道这个?
4)谁决定需要复制数据的所有节点?我知道协调员根据需要存储数据的分区键将请求转发给实际节点。但是在哪些节点中数据会被复制?
5)另外,使用Cassandra本身就是一项重大任务,因为我可以看到数据库设计是一项重大任务。我们的模型设计应该是完美的(对于像我这样的新手来说并不总是这样),我们是否应该认真考虑将Cassandra作为数据源?
答案 0 :(得分:2)
我(可能很遗憾)咬人.. user1162512:)
Cassandra致力于提供极高的数据提取率和极快的查询速度。它将数据存储在分区中,并且分区一起存储和提取。您的主键可以有多个字段。 PK的第一个字段称为分区键,它定义了哪个分区的数据是一个。高级查询需要额外的复杂性,正是由于这个原因,cassandra的查询功能较少(比如SQL服务器)。它允许的内容非常严格。您可以按分区键和连续的群集键(PK中的其余列)进行查询。您可以在完全相同的情况下执行这些操作,但您可以在最后一个或最内层的"上进行范围查询。查询中的聚类列。原因是在分区内,数据按每个连续的聚类键排序。比如说,你的PK是(A,B,C,D)。然后A定义分区。在分区中,数据首先沿着B排序,在其中,数据沿着C然后D排序。查询中严格要求的原因是cassandra可以识别数据块并简单地返回。像二级索引这样的选项,但几乎总是你想在使用它们之前打一个分区。将每个分区视为数据库。你会做一个会打到很多数据库的查询吗?这对表现有好处吗?这些限制可以确保高性能方案的持续延迟。是的,查询功能有限,但它们允许在相当多的视图用例中使用一些数据建模。 cassandra中的数据建模是查询驱动的...如果您的数据模型是为您的查询构建的,那么您将获得非常好的性能。查询驱动建模是一种思维转移,与SQL方法非常不同。
您要创建另一个将用户名映射到id的表。非规范化很常见。请记住,您必须在查询中查找一个,最多两个分区。它是一个查找表。如果您需要更高级的搜索,请使用正确的搜索服务器,如lucene,solr等。然后使用密钥查询cassandra。
除了RF之外,您还拥有读写一致性级别的概念。您可以控制每个查询。您可以指定读取和写入cl,以便Read + Write> RF。如果你这样做,你将具有很强的一致性。如果您的读取CL为1且RF> 1,你可能会得到陈旧的数据。这就是可调整一致性的概念所在。
分区程序选择第一个分区。复制策略由复制策略选择。http://www.datastax.com/documentation/cassandra/2.0/cassandra/architecture/architectureDataDistributeAbout_c.html http://www.datastax.com/docs/1.0/cluster_architecture/replication
这取决于。如果你知道查询的类型(即什么类型的查询,不一定是所有查询),并且需要非常快速的摄取,读取,高可用性,内置的跨数据中心复制,水平可伸缩性,可调整性,那么cassandra是一个非常好的数据存储。对于更多分析工作负载,您可以将其与Apache Spark配对,这样可以更灵活地获取数据,但不会像实时查询一样快。如果你打算在生产中使用它,你需要花一些时间来学习一些细节,但我想这与任何技术有关。查看datastax学院的免费视频,了解最佳介绍。
希望有所帮助。
答案 1 :(得分:0)
ANS1。在first_name列上创建索引,如: - 在User(first_name)上创建索引名字; 您可以通过first_name选择数据,也请提供“允许过滤”。在选择查询的末尾。
ANS2。 ans1首先解决第二个问题。
ANS3。如果你设置的consitency级别超过一个cassandra将匹配来自等于一致性级别的节点的数据,那么它将提供更新的数据。
ANS4。由cassandra根据网络距离决定复制。
ans5。在cassandra上做一些练习后会很容易。你可以用它作为数据源。