如果NoSQL无理由,它对大规模更新有什么好处呢?

时间:2011-09-29 00:46:32

标签: nosql

我正在考虑一个问题,其中“人”有一个国家,在RDBMS中,我可以制作两个表,一个用于人,另一个用于国家,并制作一个键来连接两个...如果我想要更改一个国家的名称,然后我只是在“国家”表中更改它,并且人们获得了这个新值...但我想如果我在像MongoDB这样的密钥/文档中创建它,我只需要一个文档“人们“里面的人将拥有国家的价值,如:

{name:"Tiago",
Country: "Brazil"}

现在,如果我想将所有“巴西”改为“BraSil”,我将不得不搜索国家/地区等于“巴西”的所有人,然后更新?所以,它不会比RDBMS更慢......

1 个答案:

答案 0 :(得分:2)

没有人回答;技术取决于发动机;正如你所说,“NoSQL”数据库并非都是平等的。

在CouchDB中;您(通常)通过视图访问所有数据,您可以在视图中轻松更改此类内容;最重要的是,由于视图是普通的JavaScript,因此您可以非常轻松地表达任何类型的转换。缺点是CouchDB中的所有视图与SQL数据库中的物化视图基本相同;并且当您第一次尝试访问此类值时,响应将花费所需的时间来重建整个视图;如果需要重写大量数据,则需要一段时间。

在AppScale或GoogleAppEngine中,您必须直接更改实体;系统地触摸可能大的数据集的唯一真正有效的方法是使用任务队列,并且系统地查询匹配“巴西”的实体,直到它没有返回任何行。有一段时间,真正的查询会返回两个值的混合。

在所有情况下;分布式文档数据库的强度有一种假设,即某些类型的操作是计算密集型的;但即使在进行这些操作时,发动机本身仍然可以使用。这很大程度上是数据库为满足上限定理而做出的折衷的结果。