NoSQL 数据库中的数据建模 (Cassandra DB)
Data modeling in NoSQL Databases ( Cassandra DB )
我目前正在从事涉及 NoSQL 数据库(具体是 Apache Cassandra)的项目的规范阶段。
我想你们中的许多人都经历过,我必须在规范化和数据复制之间做出权衡。
就我而言,我愿意快速进行大量分析和数据获取,这样我的数据将完全去规范化,并且我们在 table 之间复制数据(我们在写入时丢失的,我们在写入时获得的阅读 )
考虑这个用户 table:
CREATE TABLE users (
user_id UUID,
first_name TEXT,
last_name TEXT,
profile_pic TEXT,
PRIMARY KEY (user_id)
);
字段:first_name, last_name
。可以在不同的 table 上多次使用和复制,有时具有不同的字段名称,例如:creator_first_name, poster_first_name, taker_first_name, contributor_first_name
,...仅举几例。
这是有趣的部分。
- 我如何在数十个 table 中的许多重复数据中保持数据一致性(系列、集合……随心所欲地称呼它们)?
- 我是否应该考虑在我的后端中添加额外的功能以确保在数据库中写入和更新我的应用程序的重复部分?
- 是通过添加更多代码还是在数据库级别(例如 cassandra 具有 Batch 语句)来保持后端级别的一致性更好?
- 社区是否使用并同意任何时间证明模式?
为了保持一致性,您将最终在许多这些表的应用程序级别编写多次。
一种类似的方法是在 'names changed' 的后端有一个队列,并有一个后台服务去更新所有适当的表。这将意味着一点延迟,但总体上可能会更安全。
此外,您可以在这些表中使用 user_id 代替名称,并在 cassandra 前面使用诸如 redis 之类的东西来缓存用户名。在钻探用户配置文件时,直接进入源头。也就是说,最初我只是从 cassandra 读取,这将是一个性能改进。 Reddit 有一篇关于“我们如何构建 /r/place”的博客 post:https://redditblog.com/2017/04/13/how-we-built-rplace/
不要 使用批量插入。这些不是原子插入。如果一个失败,则作业失败,但您的部分或全部插入可能已写入某些节点。
我目前正在从事涉及 NoSQL 数据库(具体是 Apache Cassandra)的项目的规范阶段。
我想你们中的许多人都经历过,我必须在规范化和数据复制之间做出权衡。
就我而言,我愿意快速进行大量分析和数据获取,这样我的数据将完全去规范化,并且我们在 table 之间复制数据(我们在写入时丢失的,我们在写入时获得的阅读 )
考虑这个用户 table:
CREATE TABLE users (
user_id UUID,
first_name TEXT,
last_name TEXT,
profile_pic TEXT,
PRIMARY KEY (user_id)
);
字段:first_name, last_name
。可以在不同的 table 上多次使用和复制,有时具有不同的字段名称,例如:creator_first_name, poster_first_name, taker_first_name, contributor_first_name
,...仅举几例。
这是有趣的部分。
- 我如何在数十个 table 中的许多重复数据中保持数据一致性(系列、集合……随心所欲地称呼它们)?
- 我是否应该考虑在我的后端中添加额外的功能以确保在数据库中写入和更新我的应用程序的重复部分?
- 是通过添加更多代码还是在数据库级别(例如 cassandra 具有 Batch 语句)来保持后端级别的一致性更好?
- 社区是否使用并同意任何时间证明模式?
为了保持一致性,您将最终在许多这些表的应用程序级别编写多次。
一种类似的方法是在 'names changed' 的后端有一个队列,并有一个后台服务去更新所有适当的表。这将意味着一点延迟,但总体上可能会更安全。
此外,您可以在这些表中使用 user_id 代替名称,并在 cassandra 前面使用诸如 redis 之类的东西来缓存用户名。在钻探用户配置文件时,直接进入源头。也就是说,最初我只是从 cassandra 读取,这将是一个性能改进。 Reddit 有一篇关于“我们如何构建 /r/place”的博客 post:https://redditblog.com/2017/04/13/how-we-built-rplace/
不要 使用批量插入。这些不是原子插入。如果一个失败,则作业失败,但您的部分或全部插入可能已写入某些节点。