Google使用哪个数据库?
是甲骨文还是MySQL或者他们自己build造的东西?
Bigtable的
分布式存储系统的结构化数据
Bigtable是一个分布式存储系统(由Google构build),用于pipe理结构化数据,旨在扩展到数以千计的商品服务器上庞大的数据量。
Google的许多项目都将数据存储在Bigtable中,包括networking索引,Google地球和Google财经。 这些应用程序在数据大小(从URL到网页到卫星图像)和延迟要求(从后端批量处理到实时数据服务)方面对Bigtable提出了非常不同的要求。
尽pipe有这些不同的需求,Bigtable已经成功地为所有这些Google产品提供了灵活的高性能解决scheme。
一些function
- 快速和极大规模的DBMS
- 一个稀疏的,分布式的多维sorting图,共享面向行和列的数据库的特征。
- 旨在扩大到PB级范围
- 它可以工作在数百或数千台机器上
- 向系统添加更多的机器并自动开始利用这些资源而不需要任何重新configuration是很容易的
- 每个表都有多个维度(其中一个是时间的字段,允许版本控制)
- 表格针对GFS(谷歌文件系统)进行了优化,被分成多个平板电脑 – 表格的一部分沿所选的行分割,使得平板电脑的大小将达到200兆字节。
build筑
BigTable不是一个关系数据库。 它不支持连接,也不支持丰富的类似于SQL的查询。 每个表都是一个多维稀疏映射。 表由行和列组成,每个单元格都有一个时间戳记。 可以有不同时间戳的单元格的多个版本。 时间戳允许进行诸如“select”该网页的n个版本“或”删除比特定date/时间早的单元格“的操作。
为了pipe理巨大的表格,Bigtable在行边界处拆分表格并将其保存为平板电脑。 平板电脑大约200 MB,每台机器可以节省大约100个平板电脑。 这种设置允许将单个表中的平板电脑分布在多台服务器中。 它也允许细粒度的负载平衡。 如果一个表正在接收许多查询,则可以删除其他平板电脑或将忙表移动到另一台不太忙的机器。 另外,如果一台机器停机,平板电脑可能会散布在许多其他服务器上,以至于对任何给定机器的性能影响都很小。
表被存储为不可变的SSTables和日志的尾部(每台机器一个日志)。 当一台机器用完系统内存时,它会使用Google专有的压缩技术(BMDiff和Zippy)来压缩某些平板电脑。 轻微的压缩只涉及几个平板,而主要压缩涉及整个表系统并恢复硬盘空间。
Bigtable平板电脑的位置存储在单元格中。 任何特定的平板电脑的查找是由三层系统处理。 客户得到一个META0表,其中只有一个。 META0表跟踪包含正在查找的平板电脑位置的许多META1平板电脑。 META0和META1都大量使用预取和caching来最大限度地减less系统中的瓶颈。
履行
BigTable构build于Google文件系统 (GFS)上,该文件用作日志和数据文件的后备存储。 GFS为SSTables提供了可靠的存储空间,SSTables是Google专有的文件格式,用于保存表格数据。
BigTable大量使用的另一项服务是Chubby ,这是一种高度可用,可靠的分布式locking服务。 Chubby允许客户端locking,可能将其与某些元数据相关联,通过将保留的消息发送回Chubby可以将其更新。 这些锁存储在文件系统分层命名结构中。
Bigtable系统中有三种主要的服务器types :
- 主服务器:将平板电脑分配给平板电脑服务器,跟踪平板电脑所在的位置并根据需要重新分配任务。
- 平板电脑服务器:处理超过大小限制(通常为100MB – 200MB)的平板电脑和分割平板电脑的读/写请求。 如果平板电脑服务器发生故障,则100台平板电脑服务器每次启动1台新的平板电脑,并恢复系统。
- locking服务器:Chubby分布式locking服务的实例。 BigTable中的许多操作都需要获取锁,包括打开平板电脑进行写入,确保一次只能有一个主动主设备,并进行访问控制检查。
Google研究论文中的例子:
存储网页的示例表的一部分。 行名称是一个反向的URL 。 内容列族包含页面内容 ,锚列列族包含引用页面的任何锚点的文本 。 CNN的主页被Sports Illustrated和MY-look主页引用,所以该行包含名为
anchor:cnnsi.com
和anchor:my.look.ca
。 每个锚小区有一个版本 ; 内容列有三个版本 ,时间戳t3
,t5
和t6
。
API
对BigTable的典型操作是创build和删除表和列族,写入数据和删除行中的列。 BigTable在API中为应用程序开发人员提供了这个function。 事务在行级支持,但不在几个行键上。
这里是研究论文PDF的链接 。
在这里,您可以在华盛顿大学的演讲中find一个显示Google的Jeff Dean的video ,讨论Google后端使用的Bigtable内容存储系统。
Spanner是Google的全球分布式关系数据库pipe理系统(RDBMS) BigTable的后继者。 Google声称这不是纯粹的关系系统,因为每个表都必须有一个主键。
这是本文的链接。
Spanner是Google的可扩展,多版本,全球分布式和同步复制的数据库。 这是第一个在全球范围内分发数据并支持外部一致分布式事务的系统。 本文描述了Spanner的结构,function集,各种devise决策的基本原理,以及一个揭示时钟不确定性的新颖时间API。 此API及其实现对于支持外部一致性和各种强大function(过去的无阻塞读取,无锁只读事务和primefaces模式更改)至关重要。
由Google发明的另一个数据库是Megastore 。 这里是摘要:
Megastore是一个为满足当今互动在线服务要求而开发的存储系统。 Megastore以一种新颖的方式融合了NoSQL数据存储的可扩展性和传统RDBMS的便利性,同时提供了强大的一致性保证和高可用性。 我们在细粒度的数据分区中提供完全可序列化的ACID语义。 这种分区使我们能够以合理的延迟在广域网上同步复制每次写入,并支持数据中心之间的无缝故障切换。 本文描述了Megastore的语义和复制algorithm。 它还介绍了我们支持使用Megastore构build的各种Google生产服务的体验。
正如其他人所说的,Google使用了一种名为BigTable的自主开发的解决scheme,并且已经发布了一些将其描述到现实世界中的论文。
Apache人员实现了这些论文中提出的思想,称为HBase 。 HBase是更大的Hadoop项目的一部分,根据他们的网站“是一个软件平台,可以轻松编写和运行处理大量数据的应用程序”。 一些基准是相当令人印象深刻的。 他们的网站在http://hadoop.apache.org 。
虽然Google为所有主要应用程序使用BigTable,但是他们也使用MySQL来处理其他(可能是次要的)应用程序。
而且也可能很方便地知道BigTable不是一个关系数据库(如MySQL),而是一个巨大的(分布式) 哈希表 ,它具有非常不同的特性。 您可以在Google AppEngine平台上自行玩(有限版本)的BigTable。
除了上面提到的Hadoop之外,还有很多其他实现可以解决与BigTable(可伸缩性,可用性)相同的问题。 我昨天看到一个很好的博客文章,其中大部分在这里列出。
Google主要使用Bigtable。
Bigtable是一个分布式存储系统,用于pipe理旨在扩展到非常大的结构化数据。
欲了解更多信息,请从这里下载文件。
Google也为他们的一些应用程序使用Oracle和MySQL数据库。
任何更多的信息,你可以添加非常感激。