我多次读到 NOSQL 数据库中的数据是非规范化存储的。例如考虑国际象棋比赛记录。它可能不仅包含参与国际象棋游戏的玩家 ID,还包含该玩家的名字和姓氏。我想这样做是因为在 NOSQL 中不可能进行连接,所以如果您只是复制数据,您仍然可以在一次调用中检索您想要的所有数据,而无需对数据进行手动应用程序级处理。
我不明白的是,现在当你想更新一个棋手的名字时,你将不得不编写一个查询来更新该棋手参加的棋局记录以及下棋的棋手记录那个球员。这似乎是一个巨大的性能开销,因为数据库必须搜索该玩家参与的所有游戏,然后更新每条记录。
数据是否经常像我的示例中那样以非规范化方式存储?
最佳答案
你是对的,数据通常以非规范化的方式存储在 NoSQL 数据库中。
更新的问题部分在于术语“最终一致性”的来源。
在您的示例中,当您更新玩家的姓名时(不是常见事件,但它可能会发生),您将发出后台作业以更新所有其他记录中的姓名。是的,在进行更新时,您可能会检索到旧值,但最终数据将保持一致。由于我们在这里不编写 ATM 软件,因此性能/一致性权衡是可以接受的。
关于database - NOSQL 反规范化数据模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27213658/