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