【ArchSummit架构师峰会】探讨数据与人工智能相互驱动的关系>>> 了解详情
写点什么

Google 发布 Spanner 论文,宣告重回分布式事务语义

  • 2012-10-17
  • 本文字数:1299 字

    阅读完需:约 4 分钟

上个月,在 Operating System Design and Implementation(OSDI '12)大会上, Google 放出了 Spanner 的详细信息——Spanner 是一个高可伸缩、全球复制的半关系型数据库。上周,Google 又给出了论文合著者 Wilson Hsieh 的一个与 OSDI 2012 上演讲相关的视频,该视频专注于论文里的一些关键概念,InfoQ 的 Alex Popescu 发表了一篇文章,内容是 Berlin Buzzwords 上 Alex Lloyd 提供的更多详细信息。研究证明 ACID 语义不需要牺牲高可伸缩性,推翻了 NoSQL 是高可伸缩性持久化的万灵药的想法。论文中的这句话很好地表明了这一观点:

我们认为,最好是让应用程序开发者在出现瓶颈时处理由事务使用过度引起的性能问题,而非总是在缺少事务的情况下进行编码。

Spanner 项目源于 Google Adwords 系统在持久化方面的需要,该解决方案既要满足关系型与事务性,同时又要在全球范围内可伸缩部署。 MegaStore 仅部分满足这些关注点,因为在跨洲际事务时没有可预计的延时是无法实现其一致性保障的。在 Spanner 中,分布式事务的延时问题是通过 Google 的 TrueTime API 来处理的,这基本上是一个针对时钟不确定性(clock uncertainty)问题的解决方案。

通过大范围网络中的多个参考时间确定时钟时间时,时钟漂移和网络延时会引入时钟不确定性(在论文中用ε符号表示)。参考时间混合了 GPS 时间和原子时钟,通过冗余降低了它们的错误率。通过确定影响时钟不确定性的因素,将其上限控制在一个承诺的等待间隔里(两倍的ε),就能实现外部一致性保证以及其他一些好处,比如无锁读事务、非阻塞读以及原子 Schema 变更。因此,承诺的等待间隔直接和时钟不确定性绑在了一起,不确定性越高,等待间隔就越长,也会拖慢 Spanner。然而,为了降低较长等待间隔(通常是 10ms,但呈现长尾分布)带来的影响,Spanner 在等待时间里执行了 Paxos(一致协议)或两阶段提交的准备阶段。

Spanner 的数据模型与 Megastore 类似,都是半关系型层次化结构模型。Timothy O’Brien 在 O’Reilly 上的博客里对 Spanner 做了一个总结:

一套 Spanner 部署是由一些管理服务器组成的,它们是用来管理跨数据中心的多个“区域”(Zone)的。一台“区域主服务器”(Zone master)和一系列“位置代理”(location proxy)管理了成百上千的“Spanserver”,它们是在 Spanner 数据库中执行批量工作的。Spanserver 中存储的数据单元称为“目录”(directory),每个单元中都实现了一个位于 Tablet 之上的 Paxos 状态机。Spanserver 以 B 树的形式存储数据,使用了一个复合键,再结合上一个时间戳和一个值。

Cloudant Labs 在他们的博客里指出了 Spanner 缺少的两块东西:

显然 Spanner 目前还不支持二级索引的自动处理。而且,它不支持以后能达到一致状态的“离线”访问(像 CouchDB 那样的离线访问)。

NuoDB 为他们的解决方案申请了专利,从他们的专利描述来看,也实现了和Spanner 相同的功能,但Google 宣称Spanner 是第一个全球复制、可伸缩的ACID 数据库。围绕NoSQL vs. NewSQL 之争,Spanner 对您的产品和项目实现会产生何种影响呢?

查看英文原文 Google Publishes Paper On Spanner Ushering a Return to Distributed Transactional Semantics

公众号推荐:

跳进 AI 的奇妙世界,一起探索未来工作的新风貌!想要深入了解 AI 如何成为产业创新的新引擎?好奇哪些城市正成为 AI 人才的新磁场?《中国生成式 AI 开发者洞察 2024》由 InfoQ 研究中心精心打造,为你深度解锁生成式 AI 领域的最新开发者动态。无论你是资深研发者,还是对生成式 AI 充满好奇的新手,这份报告都是你不可错过的知识宝典。欢迎大家扫码关注「AI前线」公众号,回复「开发者洞察」领取。

2012-10-17 09:184680
用户头像

发布了 135 篇内容, 共 58.7 次阅读, 收获喜欢 43 次。

关注

评论

发布
暂无评论
发现更多内容

八大排序(下)

lovevivi

c 数据结构 10月月更

浅析HTML页面的生命周期

CoderBin

html 前端 10月月更

如何实现图像人脸融合?

夏夜许游

人工智能 AI 融合 图像人脸

【网络安全篇】JavaSript基础内容大全

贤鱼很忙

10月月更

uniapp H5端精准定位

源字节1号

软件开发 小程序开发

Vue_cli2和Vue_cli3

Studying_swz

前端 10月月更

vue-router学习-1

Studying_swz

前端 10月月更

规律跑步,让生活更有掌控感

BY林子

跑步 掌控

数据湖(九):Iceberg特点详述和数据类型

Lansonli

数据湖 10月月更

八大排序 (上)

lovevivi

c 数据结构 10月月更

升级全新网络方案,给你低成本、高性能的裸金属体验

华为云开发者联盟

云计算 后端 华为云 云服务器 企业号十月 PK 榜

面试官:数据库加了唯一索引,就不会有重复数据了吗???

小小怪下士

Java MySQL 程序员

堆排序详解(含对时间复杂度的分析)

lovevivi

c 数据结构 10月月更

在线问题反馈模块实战(十七):实现excel模板在线下载功能

bug菌

springboot 项目实战 10月月更

Hybrid app本地开发如何调用JSBridge

甜点cc

JavaScript 前端 Hybrid 10月月更

算法 | 详解斐波那契数列问题

甜点cc

JavaScript 算法 10月月更 斐波那契数列

你应该知道的数仓安全:都是同名Schema惹的祸

华为云开发者联盟

数据库 后端 华为云 企业号十月 PK 榜

Vue_Webpack详解

Studying_swz

前端 10月月更

基于Ernie-3.0 CAIL2019法研杯要素识别多标签分类任务

汀丶人工智能

nlp

技术分享 | 测试开发工程师必读经典好书清单,抽奖赠书送福利!

霍格沃兹测试开发学社

校招面试真题 | 显式等待与隐式等待的区别?与强制等待的方式分别是什么,有什么区别?

霍格沃兹测试开发学社

在线问题反馈模块实战(十八):实现excel台账文件记录批量导入功能

bug菌

springboot 项目实战 10月月更

记一个“奇葩”需求的实现

甜点cc

JavaScript 前端 Element UI 10月月更

一种基于柔性事务的分布式事务解决方案设计探究

京东科技开发者

编程 分布式事务 事务 事务回滚 柔性事务

热门探讨:为何数字化转型的企业,大都“死”在了黎明前夕?

优秀

数字化转型

如何实现一个SQL解析器

vivo互联网技术

sql 解析 SQL解析

详解Native Memory Tracking 追踪区域分析

华为云开发者联盟

开发 华为云 企业号十月 PK 榜

HashMap源码分析(六)

知识浅谈

hashmap 10月月更

“程”风破浪的开发者|我的js学习小技巧

国服第二切图仔

JavaScript 学习方法 “程”风破浪的开发者

在线问题反馈模块实战(十六)​:实现查详情功能

bug菌

springboot 项目实战 10月月更

【高并发】深度解析ScheduledThreadPoolExecutor类的源代码

冰河

并发编程 多线程 高并发 协程 异步编程

Google发布Spanner论文,宣告重回分布式事务语义_DevOps & 平台工程_Jeevak Kasarkod_InfoQ精选文章