【问题标题】:Data modeling in NoSQL Databases ( Cassandra DB )NoSQL 数据库中的数据建模 (Cassandra DB)
【发布时间】:2018-02-28 17:35:05
【问题描述】:

我目前正在处理一个涉及 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 语句)来保持后端级别的一致性更好?
  • 是否有社区使用和认可的时间证明模式?

【问题讨论】:

    标签: database mongodb cassandra nosql data-modeling


    【解决方案1】:

    为了保持一致性,您最终将在应用程序级别跨许多这些表进行多次编写。

    类似的方法是在“名称已更改”的后端有一个队列,并让后台服务去更新所有适当的表。这意味着会有一点延迟,但总体上可能会更安全。

    此外,您可以在这些表中使用 user_id 代替名称,并在 cassandra 前面使用 redis 之类的东西来缓存用户名。在钻探用户资料时,直接进入源头。也就是说,最初我只是从 cassandra 中读取,这将是一个性能改进。 Reddit 有一篇关于“我们如何构建 /r/place”的博文:https://redditblog.com/2017/04/13/how-we-built-rplace/

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

    【讨论】:

      猜你喜欢
      • 2019-10-22
      • 1970-01-01
      • 1970-01-01
      • 2015-03-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-17
      • 1970-01-01
      相关资源
      最近更新 更多