2017-02-09 25 views
1

我想知道如何在CQL列切片WHERE条款会影响读取性能。卡桑德拉是否有一定的优化,这是能够仅提取特定的列与值或具有检索行的所有列,并检查了一个又一个?例如:我有一个主键(key1,key2),key2是集群键。我只想找到匹配某个key2的列,比如value2?卡桑德拉CQL柱片和读取路径混乱

回答

0

卡桑德拉保存数据作为细胞 - 为一个键+列中的每个值是细胞。如果您一次为键保存多个值,它们将放在同一个文件中。此外,由于卡桑德拉写入sstables,你可以有几个值保存在不同的文件相同的键列/单元格,卡桑德拉会阅读所有这些,并返回最后写入一个,直到comperssion或维修时发生,和无关值被删除。

关于删除/读取/墓碑好文章: http://thelastpickle.com/blog/2016/07/27/about-deletes-and-tombstones.html

+0

我读[文章](https://wiki.apache.org/cassandra/ReadPathForUsers),它说是不同的:然后,我们扫描的分区索引,它将在SSTable中提供偏移量,我们可以在其中找到与分区键相关的数据。 然后我们看从内存MemTable中的数据,并与来自SSTables数据合并这一点。数据是逐个单元格合并的,每个单元格的时间戳与最新的时间戳进行比较。墓碑被忽略。 –

+0

关于墓碑 - 他们不会以您认为的方式忽略它。示例:您有一个密钥,并且已经插入/更新了3次,之后将其删除。因此,理论上,您可以拥有4个“值”,即3个值和墓碑。当您对密钥请求的值时,发动机会经过所有4“价值观”,并确定最新的一个,如果这是墓碑,你将得不到行/值,但这并不意味着该行WASN”读卡桑德拉。 – nevsv