在NOSQL中,您如何处理对常见依赖数据的大规模更新



我真的很想理解NOSQL方法,但是某些方面使我感到困惑。而且最容易杰出的文档似乎并没有解决这些问题(到目前为止,我发现的(。

例如,我正在查看couchdb网站...

独立数据

一张发票包含有关卖方,买方,日期以及出售商品或服务列表的所有相关信息。[...]独立文档,这张纸上没有抽象的引用,它指向其他带有卖方名称和地址的纸。会计师会喜欢将所有东西都放在一边的简单性地方。并有了选择,程序员也很感激。

"一个抽象参考"我认为他们的意思是FK,对吗?在类似的SQL dB中,"其他一些纸"将是sellers表中的一行?

好吧,但是当事实证明某人搞砸了,卖方的地址实际上在枫树大道上,而不是枫木车道,您有96,487张发票,例如枫树巷。

正统的NOSQL处理这种必然性是什么?

您是否扫描您的480万发票"文档"对于带有"车道"的96k

等等,在此描述的基于CouchDB的应用程序中,谁加入了?因为,在这里猜测,但我想您的前端可能没有卖方表格的视图。因为您的卖家都嵌入在发票中,对吗?因此,在NOSQL中,这种数据校正进行了&维护成为DBA的工作?

(另外,您实际上是否在涉及该卖方的每张发票上重复所有卖方的信息?这不昂贵吗?(

在一个巨大而繁忙的系统中,您如何确保所有重复的卖方数据都是正确且一致的?

我正在考虑要寻找一系列即将到来的项目的存储技术。NOSQL显然非常受欢迎,并且被广泛采用。在某些域中,这是"黄金路径"/默认选择。如果我想将postgresql与node.js一起使用,我将不得不索要有关较不受欢迎的库和支持的信息。

因此,对MongoDB,CouchDB等有很大的现实压力

然而,在我正在设计的系统中,我上面提到的问题真的很重要。是否有一种经过验证,建立和实用的方法来解决这些问题?

正统的NOSQL处理这种必然性是什么?

两种可能的方法:

  1. 本质上与pre-sql(即纸情况柜(相同:

    1. 更新客户的主文件。
    2. 使用所有新发票上的新地址。

    历史发票将继续拥有错误的数据。但这没关系,甚至比RDBMS的方式更好,因为它准确地反映了历史

  2. 转到更新所有受影响文档的额外工作。有了正确构建的索引或视图,这并不难(您不必扫描所有480万发票 - 您的视图将引导您到实际受到更改影响的18个发票(

    我想您的前端可能没有卖方表格的视图。

    为什么不呢?如果您进行基于卖方的查询,我当然希望您有一个基于卖方的视图(或几种(。

    因为您的卖家都嵌入了发票中,对吧?

    这是无关紧要的。视图可以索引数据的任何部分。

您实际上是否重复了卖方涉及该卖方的每张发票的所有信息?

当然。每次在纸上打印发票时,您都会重复它,对吗?您的数据库文档是"文档",与打印发票相同。

那不是很昂贵吗?

,如果您将整个数据库存储在手机上,也许。否则,硬盘驱动器如今便宜。

然而,在我正在设计的系统中,我上面提到的问题真的很重要。

nosql不适合每项工作。如果交易完整性很重要(并且可能是像您似乎正在讨论的财务应用程序一样(,那么它可能不是正确的工具。

将couchdb视为与数据库的同步协议。

如果您的核心功能是同步的能力,则CouchDB可能很合适。如果这不是您应用程序的功能核心,那么它可能是工作的错误工具。

最新更新