Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database 从Cassandra读取一个完整分区的成本高吗?_Database_Cassandra_Cassandra 2.0_Cassandra 3.0 - Fatal编程技术网

Database 从Cassandra读取一个完整分区的成本高吗?

Database 从Cassandra读取一个完整分区的成本高吗?,database,cassandra,cassandra-2.0,cassandra-3.0,Database,Cassandra,Cassandra 2.0,Cassandra 3.0,假设我有一张桌子 按AccountAid记录(AccountId、a、b、c、x、y、z) 分区键:AccountId 聚类键:a,b 我需要在代码中获取一个帐户的数据,因此执行 从RecordingsByAccountaId中选择*其中accountId='accountId' 这是一个昂贵的手术吗 目标是更新此表的2-3行,但我没有accountId以外的任何信息 查询一行或整个分区几乎是一样的吗?因为我看到在200行和一行之间获取数据的时间相差20-30毫秒?这主要取决于分区的大小—它包括

假设我有一张桌子

按AccountAid记录(AccountId、a、b、c、x、y、z)

分区键:AccountId 聚类键:a,b

我需要在代码中获取一个帐户的数据,因此执行

从RecordingsByAccountaId中选择*其中accountId='accountId'

这是一个昂贵的手术吗

目标是更新此表的2-3行,但我没有accountId以外的任何信息


查询一行或整个分区几乎是一样的吗?因为我看到在200行和一行之间获取数据的时间相差20-30毫秒?

这主要取决于分区的大小—它包括多少行。另一个因素是分区的碎片程度——它是位于单个SSTable中(已压缩)还是位于多个SSTable中,因此您将从多个文件中读取数据

但通常,读取单个文件中的分区是顺序操作,因为属于同一分区的所有行都是顺序写入的,如果分区大小不是很大,那么性能应该不会受到显著影响(但这也可能取决于您的硬件)


另外,您如何决定要更新哪些行?

此查询:
从RecordingsByAccountaId中选择*,其中AccountId=123,a=1,b=2将整个分区拉入内存,然后返回请求的单行,或者只将单行读取到内存并返回该行?如果它是完整的主键,就像您的情况一样,那么它将只读取单行。。。但是,如果行的某些部分被更新,它可能需要从多个文件中读取数据来重建最新版本。我们如何计算数据来自单个SSTable或多个SSTable?到什么程度/配置我们才能说它工作正常?分区大小仅处于良好状态,小于100MB。这取决于您是否只是插入数据或更新数据等。最终,通过压缩,数据将合并到更少的文件中。如果查看
nodetool table直方图
,它将显示该节点上该表每次读取的sstables百分比。这不会显示特定的行,但可以让您了解表中的数据通常是如何分段的。如果p50 sstables per read较高,则性能将降低。此外,要查看为特定查询读取的sstables,可以查看cqlsh中的跟踪。在
上运行
跟踪,然后执行要分析的查询。它将显示每个复制副本参考了多少sstables。