当前位置:  开发笔记 > 编程语言 > 正文

Pro的数据库,如BigTable,SimpleDB

如何解决《Pro的数据库,如BigTable,SimpleDB》经验,为你挑选了2个好方法。

像Google BigTable和Amazon SimpleDB这样的新学校数据存储范例是专门为可扩展性而设计的.基本上,禁止连接和非规范化是实现这一目标的方法.

然而,在这个主题中,共识似乎是大型表上的连接不一定必须太昂贵,并且非规范化在某种程度上被"高估"为什么然后,这些上述系统不允许连接并强制所有连接在一起单表实现可扩展性?是否需要存储在这些系统中的大量数据(许多兆兆字节)?
数据库的一般规则是否根本不适用于这些尺度?是因为这些数据库类型专门用于存储许多类似的对象吗?
或者我错过了一些更大的图片?



1> SquareCog..:

分布式数据库并不像Orion暗示的那样天真; 在分布式数据集上优化完全关系查询方面已经做了大量工作.您可能想看看像Teradata,Netezza,Greenplum,Vertica,AsterData等公司正在做什么.(最后甲骨文最近公布了这个游戏;微软以这家曾经被称为DataAllegro的公司的名义购买了他们的解决方案).

话虽如此,当数据扩展到太字节时,这些问题变得非常重要.如果您不需要严格的事务性和一致性保证可以从RDBM获取,则通常更容易进行非规范化而不进行连接.特别是如果你不需要交叉引用太多.特别是如果您不进行临时分析,但需要使用任意转换进行编程访问.

非规范化被高估了.仅仅因为当你处理100 Tera时会发生这种情况,并不意味着每个开发人员都应该使用这个事实,他们从不费心去了解数据库,并且由于糟糕的模式规划和查询优化而无法查询一百或两行.

但如果你处于100 Tera范围内,那么......

哦,这些技术引起轰动的另一个原因 - 人们首先发现有些东西从未属于数据库,并且意识到他们并没有处理特定领域的关系,而是基本的关键 - 价值对.对于不应该存在于数据库中的东西,完全有可能Map-Reduce框架或一些持久的,最终一致的存储系统就是这样.

在全球范围内,我强烈推荐BerkeleyDB解决这些问题.



2> Orion Edward..:

我对它们并不太熟悉(我只阅读与其他人一样的博客/新闻/示例),但我对它的看法是,他们选择以可扩展性的名义牺牲了许多正常的关系数据库功能 - 我会试着解释一下.

想象一下,数据表中有200行.

在谷歌的数据中心,这些行中的50行存储在服务器A上,50位在B上,100位在服务器C上.此外,服务器D包含来自服务器A和B的冗余数据副本,服务器E包含服务器C上的冗余数据副本.

(在现实生活中,我不知道将使用多少台服务器,但它的设置是为了处理数百万行,所以我想象不少).

要"选择*where name ='orion'",基础结构可以将该查询发送到所有服务器,并聚合返回的结果.这允许他们在他们喜欢的服务器上进行几乎线性扩展(仅供参考,这几乎是mapreduce)

然而,这意味着您需要一些权衡.

如果您需要对某些数据进行关系连接,而这些数据分布在5个服务器上,则每个服务器都需要为每一行提取数据.当您在10台服务器上分布有200万行时,请尝试这样做.

这导致了权衡#1 - 没有连接.

此外,根据网络延迟,服务器负载等,您的一些数据可能会立即保存,但有些可能需要一秒钟或2.再次,当您有几十台服务器时,这会越来越长,而且正常的方法是'每个人都等到最慢的人完成'不再可以接受.

这导致权衡#2 - 您的数据在写完后可能并不总是立即可见.

我不确定那里有什么其他的权衡,但在我的头脑中那些是主要的2.

推荐阅读
放ch养奶牛
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有