我正在用python创建cassandra模型,下面是我的代码
from uuid import uuid4
from uuid import uuid1
from cassandra.cqlengine import columns, connection
from cassandra.cqlengine.models import Model
from cassandra.cqlengine.management import sync_table
class BaseModel(Model):
__abstract__ = True
deleted = columns.Boolean(required=True, default=False)
created_timestamp = columns.TimeUUID(primary_key=True,
clustering_order='DESC',
default=uuid1)
class OtherModel(BaseModel):
__table_name__ = 'other_table'
id = columns.UUID(primary_key=True, default=uuid4)
if __name__ == '__main__':
connection.setup(hosts=['localhost'],
default_keyspace='test')
sync_table(OtherModel)
这就产生了错误
^{pr2}$如果我在clusturing_order
上添加注释,那么它可以正常工作。在
class BaseModel(Model):
__abstract__ = True
deleted = columns.Boolean(required=True, default=False)
created_timestamp = columns.TimeUUID(primary_key=True,
# clustering_order='DESC',
default=uuid1)
有没有办法在abstract
类中定义clusting_order
?在
我必须在每个模型中创建created_timestamp
,因此我不能将其移动到每个模型。在
在Cassandra中,主键有两个组件:分区键和集群键。分区键决定了该行将存储在群集中的哪个节点上。集群键决定该分区键中行的磁盘排序顺序。在
同样需要注意的是,分区键不能排序。多分区密钥结果总是按哈希标记值的顺序返回。在
看起来您的基本模型只有一列(
created_timestamp
)被定义为键,因此这是您的分区键。我没有看到另一个键被定义,所以您没有集群键,因此您不能应用clustering_order
。在卡桑德拉打算根据你需要的表格来定义你的查询。如果没有看到您的查询,很难告诉您如何修复此问题。但实际上,您需要使用不同的分区键并将
created_timestamp
指定为集群键,以获得所需的结果。在更多信息,请阅读Carlo的回答:
Difference between partition key, composite key and clustering key in Cassandra?
相关问题 更多 >
编程相关推荐