Cassandra抽象模型无法使用聚类顺序定义主键
我正在用python创建模型,下面是我的代码Cassandra抽象模型无法使用聚类顺序定义主键,cassandra,python,model,clustering-key,Cassandra,Python,Model,Clustering Key,我正在用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):
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)
这就产生了错误
python /tmp/test.py
Traceback (most recent call last):
File "/tmp/test.py", line 9, in <module>
class BaseModel(Model):
File "/usr/lib/python2.7/site-packages/cassandra/cqlengine/models.py", line 905, in __new__
raise ModelException("clustering_order may be specified only for clustering primary keys")
cassandra.cqlengine.models.ModelException: clustering_order may be specified only for clustering primary keys
有没有办法在abstract
类中定义clusting\u order
我必须在每个模型中创建
created\u timestamp
,因此我无法将其移动到每个模型。Cassandra中的主键有两个组件:分区键和集群键。分区键确定该行将存储在集群中的哪个节点上。集群键确定该分区键中的行在磁盘上的排序顺序
同样需要注意的是,分区键不能排序。多分区键结果总是按照其哈希标记值的顺序返回
基本模型似乎只有一列(created\u timestamp
)被定义为键,因此这就是分区键。我没有看到定义了另一个键,因此您没有群集键,因此无法应用群集\u顺序
在Cassandra中,需要根据要提供的查询定义表。如果看不到您的查询,就很难告诉您如何解决此问题。但本质上,您需要使用不同的分区键,并将created\u timestamp
指定为集群键,以获得所需的结果
有关更多信息,请阅读Carlo的回答:
在Cassandra中,主键有两个组件:分区键和集群键。分区键确定该行将存储在集群中的哪个节点上。集群键确定该分区键中的行在磁盘上的排序顺序 同样需要注意的是,分区键不能排序。多分区键结果总是按照其哈希标记值的顺序返回 基本模型似乎只有一列(
created\u timestamp
)被定义为键,因此这就是分区键。我没有看到定义了另一个键,因此您没有群集键,因此无法应用群集\u顺序
在Cassandra中,需要根据要提供的查询定义表。如果看不到您的查询,就很难告诉您如何解决此问题。但本质上,您需要使用不同的分区键,并将created\u timestamp
指定为集群键,以获得所需的结果
有关更多信息,请阅读Carlo的回答:
class BaseModel(Model):
__abstract__ = True
deleted = columns.Boolean(required=True, default=False)
created_timestamp = columns.TimeUUID(primary_key=True,
# clustering_order='DESC',
default=uuid1)