database - NOSQL 反规范化数据模型

标签 database denormalization denormalized nosql

我多次读到 NOSQL 数据库中的数据是非规范化存储的。例如考虑国际象棋比赛记录。它可能不仅包含参与国际象棋游戏的玩家 ID,还包含该玩家的名字和姓氏。我想这样做是因为在 NOSQL 中不可能进行连接,所以如果您只是复制数据,您仍然可以在一次调用中检索您想要的所有数据,而无需对数据进行手动应用程序级处理。

我不明白的是,现在当你想更新一个棋手的名字时,你将不得不编写一个查询来更新该棋手参加的棋局记录以及下棋的棋手记录那个球员。这似乎是一个巨大的性能开销,因为数据库必须搜索该玩家参与的所有游戏,然后更新每条记录。

数据是否经常像我的示例中那样以非规范化方式存储?

最佳答案

你是对的,数据通常以非规范化的方式存储在 NoSQL 数据库中。

更新的问题部分在于术语“最终一致性”的来源。

在您的示例中,当您更新玩家的姓名时(不是常见事件,但它可能会发生),您将发出后台作业以更新所有其他记录中的姓名。是的,在进行更新时,您可能会检索到旧值,但最终数据将保持一致。由于我们在这里不编写 ATM 软件,因此性能/一致性权衡是可以接受的。

您可以在此处找到更多信息:http://www.allbuttonspressed.com/blog/django/2010/09/JOINs-via-denormalization-for-NoSQL-coders-Part-2-Materialized-views

关于database - NOSQL 反规范化数据模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27213658/

相关文章:

sql - 如何使用 DB Browser SQLite 在列中添加批量值

python - Pyodbc executemany 只返回插入的最后一个元素

php - 隐私设置的数据库模式设计

sql - 地址簿数据库设计 : denormalize?

mysql - 根据 id 的数组查询 id

mysql - 选择具有多个限制的值

sql-server - 对 SQL Server 表进行非规范化

mysql - SQL - 同步非规范化表

php - 使用逗号值连接表