我在卡桑德拉的桌子上有一亿行。该架构为:
id int, key varchar, row_hash varchar, version int
,PK为:((version),id)。创建此架构的查询是:
c_sql = "CREATE TABLE IF NOT EXISTS {} (id varchar, version int, row_hash varchar, PRIMARY KEY((version), id))".format( self.table_name )
此语句是否将version
用作分区键?
此外,随着#rows不断增加,我的选择查询显然需要很长时间:
row_check_query = "SELECT {} FROM {} WHERE {}={} AND {}='{}' ".format( "row_hash", self.table_name, "version", self.version, "id", key )
答案 0 :(得分:2)
是的,version
是分区键。 id
是您的案例中的一个群集列。
您可以使用CQL跟踪来分析性能问题-https://docs.datastax.com/en/cql/3.3/cql/cql_reference/cqlshTracing.html
根据您的数据分布,您可能会遇到“宽行”情况,在单个version
分区中有很多记录,不得不读取非常大的分区可能会花费一些时间。