2011-09-29 23 views
3

我在一个模式中思考一个问题,“人”有一个国家,在RDBMS中,我可以制作两张表,一个给人,另一个给国家,并且做一个关键连接两个...如果我想改变一个国家的名称,然后我只是在“国家”表中更改它,并且人们获得了这个新的价值......但是我想如果我在一个像MongoDB这样的关键/文档中做这个,我只需要一个文档, “这里面将有国家的价值,如:如果NoSQL是无计划的,那么它对于大规模更新怎么样?

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

现在,如果我想改变这一切‘巴西’到‘巴西’,我将不得不寻找ALL人,其中国家等于”巴西“然后更新?所以,它不会比RDBMS更慢?

+1

与您需要访问数据的所有用例相比,使用哪个百分比会改变键值对的值。您可能会更改键和值之间的关联,但更改值本身?可能很少见。 – MeBigFatGuy

+0

有一个基准/文章暗示它(MongoDB,并非所有NoSQL都是平等的)*对这种更新有好处?考虑在解规范化的SQL数据库中也应该这样做。 – 2011-09-29 00:56:44

+0

你可能有国家代码和另一个国家代码和名称的文件。 – bryanmac

回答

2

没有人回答;该技术将取决于发动机;正如你所说的,“NoSQL”数据库并不都是一样的。

在CouchDB;您(通常)通过视图访问所有数据,并且您可以在视图中轻松更改此类内容;最重要的是,由于视图是简单的JavaScript,因此您可以很容易地表达任何类型的转换。不利的一面是,CouchDB中的所有视图与SQL数据库中的物化视图基本相同;并且当您第一次尝试访问这样的值时,只要需要重建整个视图,响应时间就会很长;如果这是很多要重写的数据,那需要一段时间。

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

在所有情况下;分布式文档数据库的优势在于一种假设,即某些类型的操作是计算密集型的;但是引擎本身的设计仍然可用,即使这些类型的操作正在进行中。这主要是数据库为满足上限定理而进行的权衡的结果。

相关问题