我是卡桑德拉的新手。我研究并对Cassandra数据库进行了一些测试,我得到了一些问题:
-
考虑到Cassandra鼓励数据的非规范化和重复,当多个列族中的数据仅从其中一个列族更新时,如何保证数据的一致性?
-
表中的列数会影响查询性能吗?
-
确实,查询返回的记录数越多,其性能就越差?
-
在Cassandra中使用mapreduce在什么情况下有用?
鉴于Cassandra鼓励
的非规范化和重复数据,当存在于多个列族中的数据为
时仅从其中一个列族更新数据一致性保证?
这正是BATCH在卡桑德拉引入的原因。即使使用BATCH,您仍然处于分布式系统中,在对数据建模时也需要这样思考。既然你没有具体的问题,我们将继续从理论上讨论。
表中的列数会影响查询性能吗?
与其说是列的数量,不如说是每个分区的大小。分区越大,Cassandra的一些内部机制(如压缩)就越难工作。如果您不熟悉数据是如何存储在磁盘上的,我建议您看一下本教程。
的确,查询返回的记录数越多,它的性能更差?
这是物理学。更多的数据=GC收集ETC的更多IO、带宽和对象。考虑到Cassandra是作为事务数据存储构建的,它不是为超大的数据返回/全表扫描而构建的(很少有真正的分布式系统)。上面链接的教程做了很好的解释。
在Cassandra中使用mapreduce在什么情况下有用?
如果你有兴趣在Cassandra上运行分析,我建议你使用Spark,因为在商业和开源层面上,已经做了很多工作来优化Spark和Cassandra的关系。当你对Cassandra的工作方式感到满意时,如果你有兴趣对Cassandla进行任何分析,我建议你看看本教程。它谈到了商业产品,但概念/教程也将适用于开源。
- 如果你的意思是如何在Cassandra中支持非规范化数据的一致性,答案是——只使用自定义逻辑。但一旦Cassandra不支持事务(即关系数据库中的事务,而不是原子操作),这将是一项相当困难的任务。实际上,如果您需要相关数据处于强一致状态,那么应该使用关系数据库
- 它在某种程度上确实存在,但没有那么多考虑
- 这可能取决于查询本身,但在一般情况下,由于需要通过网络传输更多数据,性能会下降
- 例如,当您想进行全表扫描时,将MapReduce与Cassandra一起使用可能会很有用。它与关系数据库在查询未索引字段时所做的工作非常相似。他们进行全扫描比较字段值。不过,MapReduce逻辑可能更复杂。例如,出于分析目的