NoSQL数据库中的数据建模(Cassandra DB)

时间:2018-02-28 17:35:05

标签: database mongodb cassandra nosql data-modeling

我目前正在处理涉及NoSQL数据库的项目的规范阶段(具体是Apache Cassandra)。

正如我猜想的那样,我必须在规范化和数据复制之间进行权衡。

在我的情况下,我愿意快速进行大量的分析和数据获取,这样我的数据就会完全去标准化,并且我们会在表格中复制数据(我们在写入时会放松,我们会在读取时获得)

考虑这个用户表:

CREATE TABLE users (
   user_id UUID,
   first_name TEXT,
   last_name TEXT,
   profile_pic TEXT,
   PRIMARY KEY (user_id)
); 

字段:first_name, last_name。可以在不同的表上多次使用和复制,有时使用不同的字段名称,例如:creator_first_name, poster_first_name, taker_first_name, contributor_first_name,...等等。

这是有趣的部分。

  • 我如何在数十个表(家庭,集合,...中称呼您想要的数据)中的数据重复数据保持数据一致性?
  • 我应该考虑后端的额外功能,以确保在数据库中编写和更新应用程序的重复部分吗?
  • 通过添加更多代码或在数据库级别维护后端级别的一致性是否更好(例如cassandra有Batch语句)?
  • 是否有社区使用和同意的证明模式?

1 个答案:

答案 0 :(得分:1)

为了保持一致性,您最终会在应用程序级别上多次编写这些表。

一种类似的方法是在后端有一个队列,其名称已经改变了#39;并有一个后台服务去更新所有适当的表。这意味着有点延迟,但整体上可能更安全。

此外,您可以在这些表中使用user_id取代名称,并使用像cassandra前面的redis来缓存用户的名称。在钻探探索用户配置文件时,请直接访问源。也就是说,最初我只是从cassandra读取,这将是一个性能提升。 Reddit有关于我们如何构建/ r / place`的博文:https://redditblog.com/2017/04/13/how-we-built-rplace/

不要使用批量插入。这些不是原子插入。如果一个失败,则作业失败,但部分或全部插入可能已写入某些节点。