谷歌使用啥数据库?
Posted
技术标签:
【中文标题】谷歌使用啥数据库?【英文标题】:What database does Google use?谷歌使用什么数据库? 【发布时间】:2010-09-26 15:38:03 【问题描述】:是 Oracle 还是 mysql 还是他们自己构建的?
【问题讨论】:
当他想了解数据库堆栈溢出使用什么时,他会使用 Google 嘿,别打他,我是从谷歌搜索到这里的,哈哈。 在谷歌上搜索“谷歌的数据库”的结果现在是这个页面,第一条评论是使用谷歌,这是否更具有讽刺意味? @Patrick Szalapski 听起来像是堆栈溢出的情况。 在搜索之前,我想知道谷歌是否会给我正确的答案,但我们开始吧:P 【参考方案1】:大表
A Distributed Storage System for Structured Data
Bigtable 是一个分布式存储 用于管理结构化数据的系统(由 Google 构建) 旨在扩展到非常 大容量:PB 级数据 数以千计的商品服务器。
Google 的许多项目将数据存储在 Bigtable,包括网络索引, 谷歌地球和谷歌财经。 这些应用程序非常 对 Bigtable 的不同要求,都在 数据大小方面(从 URL 到 Web 页到卫星图像)和 延迟要求(来自后端 批量处理实时数据 服务)。
尽管这些不同 需求,Bigtable 已成功 提供了一个灵活的、高性能的 所有这些谷歌的解决方案 产品。
一些功能
快速且超大规模的 DBMS 一个稀疏的、分布式的多维排序图,共享面向行和面向列的数据库的特征。 旨在扩展到 PB 范围 它适用于成百上千台机器 向系统添加更多机器并自动开始利用这些资源很容易,无需重新配置 每个表都有多个维度(其中一个是时间字段,允许版本控制) 表已针对 GFS(Google 文件系统)进行了优化,可拆分为多个平板电脑 - 表的分段沿选定的行拆分,使平板电脑的大小约为 200 兆字节。架构
BigTable 不是关系数据库。它不支持连接,也不支持丰富的类似 SQL 的查询。每个表都是一个多维稀疏映射。表格由行和列组成,每个单元格都有一个时间戳。可以有具有不同时间戳的多个版本的单元。时间戳允许诸如“选择此网页的‘n’个版本”或“删除早于特定日期/时间的单元格”之类的操作。
为了管理巨大的表,Bigtable 在行边界处拆分表并保存为平板电脑。一个平板大约 200 MB,每台机器节省大约 100 个平板。这种设置允许来自单个表的平板电脑分布在许多服务器上。它还允许细粒度的负载平衡。如果一个表正在接收许多查询,它可以摆脱其他平板电脑或将繁忙的表移动到另一台不那么繁忙的机器上。此外,如果一台机器出现故障,平板电脑可能会分布在许多其他服务器上,因此对任何给定机器的性能影响最小。
表存储为不可变的 SSTable 和日志尾部(每台机器一个日志)。当机器用完系统内存时,它会使用 Google 专有的压缩技术(BMDiff 和 Zippy)压缩一些平板电脑。 Minor compaction 只涉及几个 tablet,而 Major compaction 涉及整个 table 系统并回收硬盘空间。
Bigtable tablet 的位置存储在单元格中。任何特定平板电脑的查找都由三层系统处理。客户端得到一个指向 META0 表的点,其中只有一个。 META0 表跟踪许多 META1 tablet,其中包含正在查找的 tablet 的位置。 META0 和 META1 都大量使用预取和缓存来最大程度地减少系统中的瓶颈。
实施
BigTable 建立在 Google 文件系统 (GFS) 之上,该系统用作日志和数据文件的后备存储。 GFS 为 SSTables 提供可靠的存储,这是一种用于持久化表数据的 Google 专有文件格式。
BigTable 大量使用的另一项服务是 Chubby,这是一种高可用、可靠的分布式锁服务。 Chubby 允许客户端获取锁,可能将其与一些元数据相关联,它可以通过将保持活动消息发送回 Chubby 来更新这些元数据。锁存储在类似文件系统的分层命名结构中。
Bigtable 系统主要关注三种服务器类型:
-
主服务器:将平板电脑分配给平板电脑服务器,跟踪平板电脑的位置并根据需要重新分配任务。
平板服务器:处理平板电脑的读/写请求,并在平板电脑超过大小限制(通常为 100MB - 200MB)时拆分平板电脑。如果一个 tablet server 发生故障,那么 100 个 tablet server 每个会拾取 1 个新 tablet,系统会恢复。
锁服务器:Chubby 分布式锁服务的实例。 BigTable 中的许多操作都需要获取锁,包括打开 tablet 进行写入、确保一次不超过一个活动 Master 以及访问控制检查。
来自 Google 研究论文的示例:
示例表的一部分 存储网页。行名称是 反向网址。内容栏 family 包含页面内容,并且 锚列族包含 任何锚点的文本 页。 CNN主页被引用 体育画报和 MY-look 主页,所以行 包含名为的列
anchor:cnnsi.com
和anchor:my.look.ca
。每个锚细胞 有一个版本;内容栏 有三个版本,在时间戳t3
、t5
和t6
。
API
BigTable 的典型操作是创建和删除表和列族,写入数据和从行中删除列。 BigTable 以 API 的形式向应用程序开发人员提供此功能。在行级别支持事务,但不支持跨多个行键。
这里是link to the PDF of the research paper。
在这里您可以找到video showing Google's Jeff Dean in a lecture at the University of Washington,讨论 Google 后端使用的 Bigtable 内容存储系统。
【讨论】:
有谁知道它是从头开始构建的还是基于某些产品构建的?我在某个地方听说过,我不记得在哪里,谷歌曾经使用过 Oracle,但他们放弃了它,因为他们需要一些 Oracle 不会做也不允许他们做的修改。我会尝试获取链接。 它是从零开始的,就像他们的大多数其他核心能力(Web 服务器、GFS、...)一样。 我正在寻找有关压缩算法(BMDiff 和 Zippy)的信息,发现现在 Zippy 被称为 Snappy,它已在 Google 代码中发布:code.google.com/p/snappy 现在他们使用的是 BigTable 的继任者 Spanner 所以,它看起来类似于 Nosql 数据库,例如 Mongodb 或 Marklogic。【参考方案2】:这是他们自己构建的东西 - 它被称为 Bigtable。
http://en.wikipedia.org/wiki/BigTable
Google 有一篇关于数据库的论文:
http://research.google.com/archive/bigtable.html
【讨论】:
【参考方案3】:Spanner 是 Google 的全球分布式关系数据库管理系统 (RDBMS),是BigTable 的继承者。 Google 声称它不是一个纯粹的关系系统,因为每个表都必须有一个主键。
Here是论文的链接。
Spanner 是 Google 的可扩展、多版本、全球分布的 同步复制的数据库。这是第一个系统 在全球范围内分发数据并支持外部一致 分布式事务。本文介绍了 Spanner 是如何 结构化,其功能集,各种设计的基本原理 决策,以及暴露时钟不确定性的新颖时间 API。这 API 及其实现对于支持外部 一致性和各种强大的特性:非阻塞读入 过去,无锁只读事务和原子模式更改, 在整个 Spanner 中。
Google 发明的另一个数据库是Megastore。这是摘要:
Megastore 是为满足以下需求而开发的存储系统 当今的交互式在线服务。 Megastore 融合了可扩展性 具有传统 RDBMS 便利性的 NoSQL 数据存储 新颖的方式,并提供强一致性保证和高 可用性。我们在内部提供完全可序列化的 ACID 语义 细粒度的数据分区。这种划分使我们能够 通过广域网同步复制每个写入 合理的延迟并支持数据中心之间的无缝故障转移。 本文描述了 Megastore 的语义和复制算法。 它还描述了我们支持各种 Google 的经验 使用 Megastore 构建的生产服务。
【讨论】:
遗憾的是 Spanner 是一个闭源项目。根据描述,我也很想在我的项目中使用它。 @MikkoRantalainen 您可能想查看 Apache Hadoop 生态系统或 CockroachDB(虽然 Cockroach 是 alpha) 谢谢,CockroachDB 看起来很有趣。我必须对其进行测试,看看它有什么样的性能。功能看起来像我想要的东西。 自 2017 年以来,所有人都可以在 Google Cloud 上使用 Spanner:cloud.google.com/spanner【参考方案4】:正如其他人所提到的,Google 使用了一种名为 BigTable 的本土解决方案,并且他们已经发布了几篇将其描述到现实世界中的论文。
Apache 人员对这些论文中提出的想法进行了实施,称为HBase。 HBase 是更大的 Hadoop 项目的一部分,根据他们的网站 “是一个软件平台,可以让人们轻松编写和运行处理大量数据的应用程序。” 一些基准测试令人印象深刻。他们的网站是http://hadoop.apache.org。
【讨论】:
链接是 404 未找到【参考方案5】:虽然 Google 将 BigTable 用于所有主要应用程序,但他们 also use MySQL 用于其他(可能是次要的)应用程序。
【讨论】:
@smoothdeveloper 的链接已失效;在此处阅读存档副本:web.archive.org/web/20071102233627/http://xooglers.blogspot.com/…【参考方案6】:知道 BigTable 不是一个关系数据库(如 MySQL),而是一个巨大的(分布式)hash table,它具有非常不同的特性,这可能也很方便。您可以在Google AppEngine 平台上自己使用(有限版本)BigTable。
除了上面提到的 Hadoop,还有许多其他实现试图解决与 BigTable 相同的问题(可扩展性、可用性)。我昨天看到一篇不错的博文,列出了其中大部分 here。
【讨论】:
【参考方案7】:Google 主要使用 Bigtable。
Bigtable 是一种分布式存储系统,用于管理结构化数据,旨在扩展到非常大的规模。
欲了解更多信息,请从here下载文档。
Google 还在他们的一些应用程序中使用 Oracle 和 MySQL 数据库。
非常感谢您可以添加的任何更多信息。
【讨论】:
Google also use Oracle
- 需要参考。
@user cloud.google.com/sql/docs ?如果开发人员可以使用 MySQL,Google 至少必须创建一个带有 MySQL 和 Bigtable 的“数据库翻译器”。【参考方案8】:
Google 服务具有多语言持久性架构。 BigTable 被其大部分服务所利用,如 YouTube、谷歌搜索、谷歌分析等。搜索服务最初使用 MapReduce 作为其索引基础设施,但后来在 Caffeine 发布期间过渡到 BigTable。
Google Cloud 数据存储区有 100 多个在 Google 生产中的应用程序,面向内部和外部用户。 Gmail、Picasa、Google 日历、android Market 和 AppEngine 等应用程序使用 Cloud Datastore 和 Megastore。
Google 趋势使用 MillWheel 进行流处理。 Google Ads 最初使用 MySQL,后来迁移到 F1 DB - 一种自定义编写的分布式关系数据库。 Youtube 使用 MySQL 和 Vitess。谷歌借助谷歌文件系统在商品服务器上存储 EB 级数据。
来源:Google Databases: How Do Google Services Store Petabyte-Exabyte Scale Data?
YouTube Database – How Does It Store So Many Videos Without Running Out Of Storage Space?
【讨论】:
以上是关于谷歌使用啥数据库?的主要内容,如果未能解决你的问题,请参考以下文章