分布式数据库之Spanner数据库简述

使用Spanner进行向量搜索:初学者指南 通过这篇文章,我们初步了解了如何使用Google Spanner实现高效的向量搜索。Spanner作为一个强大的数据库工具,其扩展性和可靠性为大规模应用提供了重要支持。Google Spanner 官方文档LangChain GitHub 仓库。 阅读详情

本文是分布式数据库课程的阅读报告,为了凑字数可能有些罗嗦,但也算是对Spanner数据库的一个简述,参考文献包括:

1.《Spanner: Google’s Globally Distributed Database》
2.《Google-Spanner论文的思考》
3.《百万节点数据库扩展之道(3): Google Bigtable》

       BigTable,作为Google分布式三架马车之一,问世以来已经有十多年(相对于选择的论文的时间还不到十年),随着计算机相关技术的发展,也有相应的更新。这次我选择谷歌发表于2012年的论文《Spanner: Google’s Globally Distributed Database》作为阅读的论文,学习Spanner数据库的基本原理,以及其包含的分布式数据库设计思路。

       论文中明确表示,Spanner数据库的数据结构和DML受限于谷歌公司以往存储的数据形式和使用方式,处于兼容性和过去的使用经验,Spanner数据库使用结构化的半关系型表来存储数据,支持查询语言和支持通用事务。这些并不是Spanner数据库与众不同之处,Spanner数据库的特点,在于其使用True Time以及基于True Time的数据管理方式。

       True Time使用GPS和原子钟保证了每一个Spanner的数据管理单元,能在任何时刻,获得全局范围上的准确时间,True Time的实现细节十分复杂,,但其使用却十分简单。True Time所使用的API由Google的集群管理软件实现并提供,主要包含TT.now()、TT.after()和TT.before()三个方法。其中TT.now()返回一个时间区间TTinterval:[earliest,latest]。TTinterval是一个具有有限时间不确定性的时间区间,在这里认为获得的时间戳TTstamp是一个不确定的时间,但是可以保证时间戳TTstamp一定存在于TTinterval这个时间区间内,这个不确定时钟的时间窗口的宽度足够小(通常小于10ms)。而TT.after()和TT.before()方法是基于TT.now()方法的二次封装,提供了用于判断是否已经超过了指定时间和是否还没有到达指定时间的便捷方法。

       基于True Time的时间戳,区别于一般的键值存储,Spanner中数据存储的形式为(key:string, timestamp:int64)→string。由于时间戳的存在,Spanner数据库根据设定的销毁时间的不同,可以存在不同数量的多个版本的数据。通过对事务发起时间和分布式数据库不同站点的局部时间戳的比较,确定操作的执行位置和时间。在了解Spanner的具体实现前,先明确Spanner分布式数据库的总体结构和其基于BigTable的现实,如下图1和图2:

                        

       总体上,一个Spanner分布式数据库由univermaster、placement driver和一系列Zone组成。Zone是Spanner部署管理的基本单元,univermaster将根据任务的实际情况,将其分发给对应的zonemaster,zonemaster再将其发布到不同的spansever,spansever直接为客户端提供数据服务。Location proxy提供给zonemaster定位可能达数千个spanserver的服务。Placement driver则是负责不同zone之间的数据移动,用以满足最新的数据副本约束条件或者实现负载均衡。

                     

       每个SpanServer管理100到1000个Tablet。Spanner中的Tablet与BigTable中的Tablet类似,Tablet的状态存储在一系列以B-Tree组织的文件集合和WAL(Write-Ahead-Log)文件中,而所有的这些文件都存储在名为Colossus的分布式文件系统中。为了支持复制,每个Spanserver在每个Tablet的上层都实现了一个单独的Paxos状态机(这里请看参考文献3)。每个状态机中将状态机的状态和日志信息记录到其对应的Tablet中。Spanner的Paxos实现支持了长寿leader(数据的不同时间的状态机副本replica,根据实现的机制获得执行权),长寿leader是通过基于时间的leader租约(默认租约长度是10秒)实现的。当前Spanner的实现中会对每次Paxos的写入操作记录两次:一次记录在tablet的log中,一次记录在Paxos的log中。

       在任意一个leader副本上,每个Spanserver通过一张lock table来控制并发。这张lock table中包含了二阶段锁的状态:它将某个范围的key映射到相应的锁状态。用于后面所介绍的事务管理。

  

而图2中所涉及的组(group)的概念,是因为在所有的Key-Value映射的上层,Spanner实现了一层被称为directory的bucketing 抽象,如图3所示,一个directory是一批连续的具有相同前缀的key的集合。Directory又被组织成组,通过二级结构实现更加方便的数据管理和访问。Group、Zone和directory的关系如图所示。

有上述的系统组织和基于True Time时间戳的多副本存储,Spanner数据库的事务实现方式十分巧妙而又高效:

       基于时间戳的非事务只读操作:每个数据副本都会记录一个名为安全时间的变量:T_safe。T_safe=min(T_paxos_safe,T_tm_safe),在没有事务有待提交时,T_safe为数据副本最后一次更新的时间T_paxos_safe,当有事务待提交时,根据leader的事务管理器的安全时间计算出安全事件T_tm_safe。若一个读操作的时间戳是T,当满足T<=T_safe的时候,这个数据副本才可以被当前的这个读操作进行读取。在进行只读操作的时候无须对数据进行加锁,因为时间戳已经保证读操作可以得到正确的数据。

       事务性读和写使用两阶段锁,在读写事务获得锁之后,释放锁之前,可以为之指定任意的时间戳,但需要保证顺序一致性原则:若事务T2的开始时间在事务T1的提交时间之后,那么事务T2的提交时间一定比事务T1的提交时间要晚。

       基于这样的数据管理方式,Spanner数据库实现了在全球范围,这样大的区域下的高并发数据读,和一致性的读写事务操作,并且提供多版本的数据库访问。

       其实在我的印象中,使用时间戳的数据管理方式在通信和编程领域早已出现过。如在通信系统中,使用一致的时钟频率对数据进行一致性采样和校准。又或者是在单机程序上使用时间戳的方式通过管道模型,对实现多进程以及多线程之间的通信。前者是通过短距离情况下通信设备的电气特性实现,而后者是借助计算机系统的时间接口实现,均只能在小范围情况下做到时间准确同步。而Spanner数据库则在全范围内实现了时间的同步(尽管10ms的误差在很多场景下并不适用,但还是有重大影响),想来这项技术也将被应用到其他相关领域。或许这种时间戳的数据管理方式不再适用于数据库需要等到人类建立地外基地,并且需要同步各基地的数据吧。

      

GOOGLE分布式数据库技术演进研究--从Bigtable、Dremel到Spanner(一) 癸巳​即将过去,总得点礼物吧,思来想去,觉得写写GOOGLE分布式数据库技术发展情况,以此作为礼物献给自己,聊以自慰,由于时间有限,加之对于GOOGLE的分布式数据库理解也只能盲人摸象,难免有错误之处,敬请谅解。 GOOGLE的分布式数据库系统从BIGTABLE的正式推出后,先后对外发布了Bigtable、Dremel、 Spanner等不同的分布式数据库产品,有的是引入新的设计实现,有的是 阅读详情

相关推荐

GOOGLE分布式数据库技术演进研究--从Bigtable、Dremel到Spanner(三)

4  Spanner 4.1背景 在google的BIGTABLE论文中,提到过Bigtable后续计划支持多Master的方向,由于BIGTABLE的架构中,只有一个Master服务器,因此一个Bigtable分布式数据库的扩展能力,始终是由一定的限制,数据量增加后,势必需要就会出现瓶颈,如何提升数据库的数据管理能力,解决数据规模不断增加后带来的问题。同时Bigtable丢失传统RDMS系统

3474

Spanner: Google’s Globally Distributed Database

1. INTRODUCTION Spanner可以扩展到跨数百个数据中心的数百万台机器与数万亿个数据库行。 Spanner是一个可伸缩、全球化分布的数据库,其由Google设计、构建、并部署。在抽象的最高层,Spanner是一个将数据分片(shard)到分布在全世界的多个数据中心中的跨多个Paxos状态机集合上的数据库。 Spanner的有趣特性: 应用程序可以细粒度地动态控制数据的副本配置。包括:那个数据中心包含哪些数据、数据离它的用户多远(以控制读取延迟)、副本间多远(以控制写入延迟)、维护了多少份

yangguanghaozi的专栏 1093

Spanner数据库解读

最近重读Spanner和F1的论文,涉及的实在太广。这篇文字从一些简单概念上说说这两者究竟是什么,实现上的一些创新,还有一些较常见的误读。以及对比当前的HBase和Phoenix区别       Spanner最重要的设计点就是做全球数据库,要求可扩展性、多数据版本、多replica数据一致性和事务。是第一个款能实现全球数据分布而且还能实现分布式事务的数据库系统,从他的架构图来看底层也是基于Co

bluekeyv的专栏 5138

Spanner: Google的全球分布级数据库----论文摘要

Spanner中一个新奇的time api揭示了时钟的不确定性。该api及其实现对于支持外部一致性(外部观察一致性)以及一系列强力的特性至关重要,这些特性包括:对过去版本数据的无阻塞读(对于历史数据的读不加锁,且不会被其他事务阻塞)、无锁的只读事务(只读事务不加锁,但是有可能被其他事务阻塞)、以及在整个spanner集群中原子性的修改schema。

不动明王1984的博客 1289

Google Spanner–全球分布式数据库

Spanner 是谷歌公司研发的、可扩展的、多版本、全球分布式、同步复制数据库。 它是第一个把数据分布在全球范围内的系统,并且支持外部一致性的分布式事务。 本文描述了 Spanner 的架构、特性、不同设计决策的背后机理和一个新的时间 API,这个 API 可以暴露时钟的不确定性。这个 API 及其实现,对于支持外部一致性和许多强大特性而言,是非常重要的,这些强大特性包括:非阻塞的读、不采用锁机制的只读事务、原子模式变更。

ESP32-S3双屏AI吊坠:微型边缘智能终端设计实践

边缘智能终端是指在设备端完成数据感知、处理与响应的嵌入式系统,其核心在于低延迟、高隐私与弱网适应性。基于ESP32-S3等轻量级主控,通过语音唤醒、本地AI推理与双屏异步渲染等关键技术,可构建资源受限场景下的实用化人机交互节点。这类设计显著降低对云端依赖,提升实时性与数据安全性,广泛应用于智能穿戴、IoT交互面板及便携式语音设备。本文以‘璀璨·AI吊坠’为实例,深入解析双面圆形屏驱动、ES8311音频链路优化、VAD+Porcupine本地语音流水线,以及亚微安级低功耗状态机实现,为微型AI终端的软硬协同开

weixin_42348783的博客 633

Google Spanner原理- 全球级的分布式数据库

原文地址:http://qing.weibo.com/2294942122/88ca09aa3300221n.html   标签:大数据云计算 Google Spanner简介 Spanner 是Google的全球级的分布式数据库 (Globally-Distributed Database) 。Spanner的扩展性达到了令人咋舌的全球级,可以扩展到数百万的机器,数已百计

forever1dreamsxx--NLP 1634

东方财富网API接口逆向分析:手把手教你破解那个带jQuery回调的股票数据接口

本文详细解析了东方财富网股票数据API接口的逆向工程实战技巧,重点介绍了JSONP接口的核心机制、参数解析及数据处理方法。通过Python代码示例演示了如何构造请求、处理分页数据及应对反爬策略,帮助开发者高效获取股票数据。文章还提供了完整的爬虫实现案例和常见问题排查指南。

weixin_30790841的博客 715

Spanner学习记录

Spanner的设计反映了Google多年来在分布式存储系统领域上经验的积累和沉淀,它采用了的数据模型,的数据复制和一致性算法,而在数据的可扩展性上使用了中的技术。新颖之处在于,它使用高精度和可观测误差的本地时钟来判断分布式系统中事件的先后顺序。Spanner代表了分布式数据库领域的新趋势——NewSQL。

qq_42877551的博客 578

Linux系统监控实战:夜莺监控+categraf采集器配置全流程(附常见问题排查)

本文详细介绍了在Linux系统中使用夜莺监控和categraf采集器进行系统监控的全流程配置,包括环境准备、核心配置文件(如config.toml和procstat.toml)详解、服务集成与验证、高级监控配置实战以及常见问题排查。通过实战案例和优化建议,帮助运维人员快速构建高效的监控体系。

xray4的博客 736

利用dxflib读写cad文件

本篇主要在qt做一个例子读取cad文件数据,使用的开源库是dxflib。用到dxflib的DL_CreationAdapter,DL_Dxf。DL_Dxf是用来读取.dxf文件的类,DL_CreatinAdapter是一个容器,当DL_Dxf加载.dxf文件后,就会响应DL_CreationAdapter这个类,读取cad数据。我们来看看...

weixin_33759269的博客 1984

全球分布式数据库:Google Spanner翻译

本文总体转自: http://www.sohu.com/a/126470421_463989 但在原博客基础上有批注。 目录 1 介绍 2 实现 2.1 Spanserver 软件栈 2.2 目录和放置 2.3 数据模型 4 并发控制 4.1 时间戳管理 4.1.1 Paxos 领导者租约 4.1.2 为读写事务分配时间戳 4.1.3 在某个时间戳下的读操作 4.1.4...

Likes的博客 1134

实现单芯片2400bps 音频编解码方案

终于按照朋友的需求,帮他开发了一款单芯片集音频采集编码传送并接收解码播放功能的方案,交给快递公司邮寄给远在郑州的他.整个项目从开始定型到现在一个样机送出,整整花了1个月时间,感觉挺有成就感,挺有意思,工作是辛苦的,结果却是快乐的.现在将这中快乐的的心情与大家分享一下.    真个项目用一颗主控搞定,ARM9的,200KBytes 片内RAM,主频可以跑到300MHz,64pin LQFP封装

nyxsec的专栏 3683

Spanner-CLI 使用教程

Spanner-CLI 使用教程 1. 项目介绍 Spanner-CLI 是一个用于 Google Cloud Spanner 的交互式命令行工具。通过这个工具,用户可以使用惯用的 SQL 命令来控制 Spanner 数据库。Spanner-CLI 提供了丰富的功能,包括交互式模式、批处理模式、定向读取模式等,使得管理和操作 Spanner 数据库变得更加便捷。 2. 项目快速启动 安装 首先,确...

gitblog_01154的博客 1001

CLCD 中国生命周期基础数据库使用攻略

CLCD 是公共建筑碳排放计算的理想选择,其本地化数据可显著提高计算准确性。

hy行者勇哥的博客 2679

协方差矩阵自适应进化策略(CMA-ES)详解:从基础原理到优化算法

CMA-ES是一种先进的无导数优化算法,基于生物进化原理解决连续域非线性优化问题。该算法通过自适应调整多元正态分布的均值、协方差矩阵和步长参数,自动学习搜索空间结构,无需梯度信息即可高效优化。核心创新包括协方差矩阵的秩1和秩μ更新策略,以及基于进化路径的步长控制机制。CMA-ES具有旋转不变性、标度不变性和全局探索能力,特别适合3-300维的黑盒优化问题,在复杂系统仿真、超参数调优等领域表现优异。算法实现中关键参数如种群大小、学习率等均有自适应设置规则,使其成为连续优化领域的基准算法之一。

qq_42212808的博客 524

全球级分布式数据库Google Spanner

摘要:2009年10月25日,Google提出名为Spanner的远景计划。该规划的心中为一旦流量激增、硬件超负荷,数据就会在百万级的数据中心中自动转移。Spanner:“扳手”,又有“桥梁的交叉支撑”。寓意为:“横跨数据中心,自动移动与复制数据。” 一.Spanner功能概要 Spanner具有高扩展性,多版本(multi-version)、世界级分布(globally-distribute...

qq_34924156的博客 608

YOLOv11改进,YOLOv11结合DynamicConv(动态卷积),CVPR2024,二次创新C3k2结构

DynamicConv(动态卷积)是一个用于提高卷积神经网络(CNN)性能的技术,核心思想是动态地生成卷积核(filter),而不是使用固定的卷积核。通过引入更多的计算灵活性和适应性来增强卷积操作的表达能力,进而提升模型的性能。专家选择:DynamicConv 通过引入多个“专家”(experts),每个专家学习特定的卷积模式。输入图像的不同部分会选择不同的专家进行卷积。动态卷积核生成:根据输入的不同特征,专家网络动态地生成卷积核,而不是使用固定的卷积核。

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 2263

Spanner: Google’s Globally-Distributed Database 总结

Spanner总结一、前言二、关于框架三、关于数据模型四、关于时间五、关于并发控制 一、前言 二、关于框架 三、关于数据模型 四、关于时间 五、关于并发控制

xiaopan的博客 1815

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

全球级的分布式数据库 Google Spanner原理

开发四年只会写业务代码,分布式高并发都不会还做程序员?->>> Google Spanner简介 Spanner 是G...

WGH100817的博客 307

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

163MusicLyrics:一站式云音乐歌词批量下载与智能管理解决方案

在数字音乐时代,歌词不仅是文字,更是情感表达的延伸。然而,面对海量音乐文件,传统歌词管理方式暴露了三大痛点:**歌词匹配不准确**导致时间浪费,**批量处理效率低下**消耗大量精力,**格式兼容性差**影响播放体验。163MusicLyrics作为开源音乐歌词管理工具,通过技术创新彻底解决了这些问题,为音乐爱好者和专业人士提供了完整的歌词获取、批量处理与格式转换解决方案。 ## 解决方案概述:智

gitblog_00018的博客 688

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

【技术分享】全球级的分布式数据库 Google Spanner原理

【技术分享】全球级的分布式数据库 Google Spanner原理

gfyufffb的博客 886

谷歌技术探究之Spanner

文章目录引言TrueTime事务读写事务快照读只读事务总结 引言 Spanner是一个全球分布式的数据库,从数据模型来看Spanner很像BigTable,都是类似于key对应着一行数据,但是却并不一样,Spanner中衍生出了“目录”的概念(把两张表合并存储)。这并不是重点,Spanner的重是它是第一个在全球范围内传递数据且保证外部一致的分布式事务的系统,且支持几种特定的事务,这显然是一个很困难的问题,我们会在文章中加以描述,这篇文章主要对Spanner的事务以及实现事务所使用的 TrueTime AP

李兆龙的博客 3155

[论文笔记] Google Spanner Distributed Database

Spanner 是谷歌的可伸缩、多版本、全球分布、支持同步复制的数据库,它是第一个在全球范围内传递数据且保证外部一致的分布式事务的系统。论文叙述了它的架构、特征、许多设计的依据和一个新的可以暴露时钟不确定性的API。 简介 开篇叙述了 Spanner 的一些特性,在全球分布的 Paxos 状态机上进行 data sharding,利用复制保证整体可用性和地域局部性,客户端会自动在副本间进行fa...

旧时光 | YoungChen's 博客 1649

国外分布式数据库比较厉害的 哪些公司的哪些产品

**背景**:Google 的 Spanner 是一个全球分布式的、可扩展的数据库,设计用于在全球范围内提供强一致性和高可用性。- **特点**:Oracle 的分片功能允许将数据分布在多个物理分区上,同时保持逻辑上的统一性,支持 ACID 事务和复杂的查询。- **应用场景**:适用于需要全球分布式数据存储和处理的大型应用,如 Google 自己的广告和云服务等。- **特点**:它支持事务性、有序数据和灵活的数据模型,适用于需要复杂查询和事务处理的应用。

hxsln11的博客 826
上一篇: 分布式数据库之Oracle相关
下一篇: python vcf转换xls的简单实现
乐莫新相知
博客等级 码龄12年 13粉丝 16原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值