簡體   English   中英

Cassandra抽象模型無法使用聚類順序定義primary_key

[英]Cassandra abstract model cant define primary_key with clustering order

我正在用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

如果我在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中的PRIMARY KEY有兩個組件:分區鍵和集群鍵。 分區鍵確定該行將存儲在集群中的哪個節點上。 聚集鍵確定分區鍵的行的磁盤上的排序順序。

注意也很重要,但是不能訂購分區鍵。 多分區鍵結果始終按其哈希令牌值的順序返回。

看來您的基本模型只有一列( created_timestamp )被定義為鍵,因此這就是您的分區鍵。 我沒有看到定義的另一個鍵,因此您沒有集群鍵,因此無法應用clustering_order

在Cassandra中,您需要根據要提供的查詢定義表。 沒有看到您的查詢,很難告訴您如何解決此問題。 但實際上,您需要使用其他分區鍵,並將created_timestamp指定為集群鍵,以獲得所需的結果。

有關更多信息,您應該在這里閱讀Carlo的答案:

Cassandra中的分區鍵,復合鍵和群集鍵之間的區別?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM