Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.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
Cassandra抽象模型无法使用聚类顺序定义主键_Cassandra_Python_Model_Clustering Key - Fatal编程技术网

Cassandra抽象模型无法使用聚类顺序定义主键

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):

我正在用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)
这就产生了错误

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)