新的学校数据存储范例,如Google BigTable和Amazon SimpleDB,是专门为可伸缩性等而设计的。基本上,不允许连接和反规范化是实现这一点的方法。
然而,在this主题中,人们的共识似乎是,大型表上的连接不一定要太昂贵,在某种程度上,反规范化被“高估”了。那么,为什么前面提到的系统不允许连接,并将所有东西都强制放在一个表中以实现可伸缩性呢?是否需要在这些系统中存储大量数据(数to )?
数据库的一般规则是否根本不适用于这些规模?这是因为这些数据库类型是专门为存储许多相似对象而定制的吗?
或者我错过了一些更大的图景?
发布于 2008-10-06 22:36:01
分布式数据库并不像Orion所暗示的那样幼稚;在优化分布式数据集上的完全关系查询方面已经做了大量工作。你可能想看看Teradata,Netezza,Greenplum,Vertica,AsterData等公司都在做些什么。(甲骨文最终也加入了这场游戏,他们最近宣布了这一消息;微软以过去名为DataAllegro的公司的名义收购了他们的solition )。
也就是说,当数据扩展到the级时,这些问题就变得非常重要。如果您不需要从RDBMs获得的严格的事务性和一致性保证,那么反规范化和不进行连接通常要容易得多。特别是如果你不需要太多的交叉引用的话。特别是如果您不进行即席分析,但需要通过任意转换进行编程访问。
反规范化被高估了。当您处理100Tera时就会发生这种情况,但这并不意味着每个开发人员都应该使用这个事实,这些开发人员从来没有费心学习数据库,并且由于糟糕的模式规划和查询优化而在查询一两百万行时遇到了困难。
但如果你在100Tera的范围内,请务必...
哦,这些技术受到热捧的另一个原因是,人们发现有些东西本来就不属于数据库,并意识到它们处理的不是特定字段中的关系,而是基本的键值对。对于本不应该出现在数据库中的内容,Map-Reduce框架或某种持久的、最终一致的存储系统是完全有可能的。
在较小的全球范围内,我强烈推荐BerkeleyDB来解决这类问题。
发布于 2008-10-07 11:53:39
所以我得到的是,整个“去规范化,无连接”的哲学存在,并不是因为连接本身不能在大型系统中扩展,而是因为它们实际上不可能在分布式数据库中实现。
当您存储单一类型的大部分不变数据时(就像Google那样),这似乎是非常合理的。我是不是走对了路?
发布于 2008-10-07 01:30:27
如果您谈论的数据实际上是只读的,则规则会发生变化。在数据更改的情况下,去正规化是最困难的,因为所需的工作量增加了,并且锁定存在更多问题。如果数据几乎没有变化,那么去正规化就不是太大的问题。
https://stackoverflow.com/questions/176131
复制相似问题