数据模型设计对cqlengine的怀疑(Cassandra CQL 3 Object Mapper for Python)

时间:2014-08-11 15:16:02

标签: python cassandra cqlengine

我正在使用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()) .....

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

1 个答案:

答案 0 :(得分:1)

不是真的。卡桑德拉没有外键关系的概念,所以cqlengine也没有。当您使用cassandra建模这样的关系时,您可以使用一些方法,具体取决于相关的行为。

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

第二种方法是为每个联系人位置设置一个唯一ID,并将相关ID保存在用户模型中,通常是一组。当2个相关实体彼此独立地更改时,这通常会更好,并且每次更改某些内容时出去和更新重复数据的开销对于您的应用来说太高了。

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

在任何情况下,使用cassandra / cqlengine时最重要的一点是,您希望对数据建模以回答查询。复制数据是可以的。不要像在RDBMS中那样尝试建模数据。