Cassandra抽象模型不能用聚类ord定义主键

2024-04-25 01:25:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在用python创建模型,下面是我的代码

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,因此我不能将其移动到每个模型。在


Tags: columnsfrom模型importabstracttruedefaultmodel
1条回答
网友
1楼 · 发布于 2024-04-25 01:25:40

在Cassandra中,主键有两个组件:分区键和集群键。分区键决定了该行将存储在群集中的哪个节点上。集群键决定该分区键中行的磁盘排序顺序。在

同样需要注意的是,分区键不能排序。多分区密钥结果总是按哈希标记值的顺序返回。在

看起来您的基本模型只有一列(created_timestamp)被定义为键,因此这是您的分区键。我没有看到另一个键被定义,所以您没有集群键,因此您不能应用clustering_order。在

卡桑德拉打算根据你需要的表格来定义你的查询。如果没有看到您的查询,很难告诉您如何修复此问题。但实际上,您需要使用不同的分区键并将created_timestamp指定为集群键,以获得所需的结果。在

更多信息,请阅读Carlo的回答:

Difference between partition key, composite key and clustering key in Cassandra?

相关问题 更多 >