0

我正在使用cqlengine,我几乎没有疑问:

如果我们有一个模型定义为

class Contact(Model):
   street = columns.Text()
   city = columns.Text()

我们可以做这样的事情吗

  1. 参考以下代码中提到的联系模型

    class User(Model):

      contact = Contact()
      first_name =coloumns.Text()
      .....`
    
  2. 并参考用户模型作为列表:

    类公司(型号): users = columns.List(User()) .....

以上是实现所需功能的正确方法,还是任何其他方式?

4

1 回答 1

1

并不真地。Cassandra没有外键关系的概念,cqlengine也没有。当您使用 cassandra 对此类关系进行建模时,您可以使用几种方法,具体取决于相关的行为。

首先是复制您的数据。在将用户绑定到地址的情况下,将完整地址保存到用户表中可能是有意义的。对于不变的事物(A 街 123 号不会神奇地移动到 B 街 456 号),这是有道理的。如果用户移动位置,您可以只更新用户表。

二是为每个联系人位置有一个唯一的id,并将相关的id保存在用户模型上,通常是在一个集合中。当 2 个相关实体彼此独立更改时,这通常会更好,并且每次更改某些内容时外出和更新重复数据的开销对于您的应用程序来说太高了。

第三种是第二种方法的变体,其中相关的 id 存储在另一个表中,该表充当连接表 (user_id -> contact_id)。

在任何情况下,使用 cassandra/cqlengine 时要记住的最重要的事情是您希望对数据进行建模以回答查询。复制数据没问题。不要尝试像在 RDBMS 中那样对数据进行建模。

于 2014-08-11T16:15:23.347 回答