当前位置: 首页 > article >正文

【计算】漫谈Google三驾马车之 Bigtable

我们将从背景动机、系统架构、核心设计思想、使用方式四个维度全面深入地解析 Google 的Bigtable—— 这一支撑了 Google 多数核心服务如 Search、Gmail、Google Maps的分布式结构化存储系统。一、为什么要做 Bigtable—— 背景与痛点1. Google 面临的数据挑战2005 年前后到 2005 年Google 已有 GFS存储原始数据和 MapReduce批处理计算但在在线服务场景中仍面临巨大挑战需要低延迟随机读写搜索索引需毫秒级响应Gmail 需快速存取邮件。数据规模巨大单个表可达PB 级包含万亿行如网页索引表。访问模式多样按主键查询如用户 ID 查邮箱范围扫描如按时间范围查日志高吞吐写入如爬虫持续插入新网页强一致性需求某些场景如计费不能容忍最终一致性。GFS MapReduce无法满足这些需求GFS 只适合大文件顺序读写不支持高效随机访问。MapReduce 是批处理模型延迟高。2. 现有方案的不足关系型数据库如 MySQL难以水平扩展到数千节点固定 schema 不适合半结构化数据如网页元数据分库分表复杂运维成本高自研 KV 存储各团队重复造轮子如广告、搜索、地图各自开发存储系统缺乏统一的容错、监控、管理能力 Google 需要一个可扩展、高性能、支持结构化/半结构化数据、自动容错、统一平台的存储系统。二、Bigtable 是什么—— 核心模型Bigtable 不是关系型数据库也不是简单的 Key-Value 存储而是一个稀疏、分布式的、持久化的多维排序映射表Sorted Map。其数据模型定义为(table, row key, column key, timestamp) → value关键概念解析概念说明示例Table逻辑表如webtable存储网页快照Row Key行主键字节数组按字典序排序com.google.wwwColumn Key列 column_family:qualifiercontents:html,anchor:cnnsi.comTimestamp版本号64位整数默认为写入时间纳秒1680000000000Value任意字节数组无类型HTML 内容、链接文本一张表可看作按 row key 排序的、带时间版本的、列族组织的稀疏矩阵。示例Webtable网页存储表Row Key (URL)anchor:cnnsi.comanchor:my.look.cacontents:html t1contents:html t2com.cnn.wwwCNN...old...new同一行可有多个列族anchor,contents同一列可有多个时间版本自动保留最近 N 个表极度稀疏大多数单元格为空三、Bigtable 是怎么设计的—— 架构与核心机制1. 整体架构三大组件组件职责Client Library应用通过它访问 Bigtable缓存元数据直接与 Tablet Server 通信Master Server管理元数据• Tablet 分配• Tablet Server 负载均衡• 垃圾回收• Schema 变更Tablet Server存储实际数据• 管理一组 Tablet数据分片• 处理读写请求• 执行 Compaction、Split关键设计Client不经过 Master 读写数据Master 仅用于元数据协调。2. 数据分片Tablet 机制每张表被水平切分为Tablet类似数据库的分区。每个 Tablet 默认包含连续的 row key 范围如[a–d),[d–g)。初始一张表只有一个 Tablet当 Tablet 阈值如 200MB自动分裂。每个 Tablet 由一个 Tablet Server 负责。类比Tablet ≈ HBase 的 RegionCassandra 的 Partition。3. 存储引擎LSM-Tree SSTable每个 Tablet Server 使用日志结构合并树LSM-Tree实现高效写入写入流程写 WALWrite-Ahead Log到 GFS保证故障恢复写 MemTable内存跳表当 MemTable 满如 128MB冻结为Immutable MemTable后台线程将其刷写为SSTableSorted String Table文件到 GFS新写入进入新的 MemTable读取流程合并查询MemTable Immutable MemTable 多个 SSTable使用Bloom Filter快速判断某 key 是否存在于 SSTable避免无效 IO优势写入吞吐极高顺序写 GFS适合日志、时序等场景。4. 元数据管理三层查找结构为避免 Client 频繁访问 MasterBigtable 设计了两级元数据表METADATA 表存储所有用户表的 Tablet 位置结构(table, end_row_key) → location_of_tabletROOT 表存储 METADATA 表的 Tablet 位置只有一个 Tablet永不分裂Master 地址存储在 Chubby分布式锁服务Client 查找流程从 Chubby 获取 ROOT 表位置读 ROOT 表 → 找到 METADATA Tablet 位置读 METADATA 表 → 找到目标 Tablet 位置缓存结果后续直接访问 Tablet Server通常只需 1 次网络请求因缓存极少访问 Master。5. 容错与高可用数据持久化到 GFSSSTable 和 WAL 都存于 GFS三副本Tablet 自动迁移Tablet Server 宕机 → Master 将其 Tablet 重新分配给其他节点Master HA通过 Chubby 锁实现主备切换只有一个活跃 Master压缩与垃圾回收自动删除过期版本、合并小 SSTable四、为什么要这么设计—— 设计哲学与权衡设计选择原因基于 GFS 构建复用已有可靠存储专注逻辑层LSM-Tree 引擎优化写吞吐适合追加/更新密集型 workloadRow Key 字典序排序支持高效范围扫描如时间序列列族Column Family物理隔离不同访问模式的数据如metavscontent多版本Timestamp天然支持历史回溯、增量处理放弃跨行事务仅支持单行 ACID换取高扩展性无 SQL 接口提供简单 API由上层构建复杂查询核心思想“为 Google 的典型 workload 量身定制不做通用数据库。”五、如何使用 Bigtable—— 实际应用与 API1. 典型应用场景全屏复制产品用途Google Search存储网页索引row key URL, column inverted indexGmail邮件存储row key user_id timestamp, column subject/bodyGoogle Earth存储卫星图像瓦片Google Analytics用户行为日志聚合2. 编程接口简化版// 创建客户端 TabletClient client(webtable); // 写入数据 client.Write(com.google.www, anchor:mit.edu, Google, timestamp); client.Write(com.google.www, contents:html, html.../html, timestamp); // 读取单行 Row row client.ReadRow(com.google.www); // 范围扫描 Scanner scanner client.Scan(com.google.www, com.youtube.www); for (Row r : scanner) { // process row }3. Schema 设计技巧Row Key 设计至关重要避免热点不要用单调递增 ID如 timestamp可加 hash 前缀支持查询模式如user_id#event_time支持按用户查时间范围列族数量少通常 5每个列族对应独立 SSTable太多影响性能利用时间版本自动保留最近 7 天数据旧版本自动清理六、Bigtable 的影响与局限影响技术遗产Apache HBase几乎完全复刻 Bigtable 架构HDFS ZooKeeper LSM-TreeCassandra借鉴列族模型和去中心化设计Google Cloud Bigtable公有云服务兼容 HBase API现代 NoSQL 范式宽表模型Wide-Column Store成为主流之一局限性不支持跨行事务Spanner 后来解决此问题无二级索引需应用层维护或用外部系统复杂查询需 MapReduce 辅助运维复杂依赖 GFS/Chubby结语Bigtable 的伟大在于它精准定义了“大规模结构化数据在线服务”的需求边界并通过简洁而强大的抽象排序 map 列族 多版本在 GFS 之上构建了一个高性能、可扩展、自动容错的存储平台。它不是万能数据库但对 Google 的核心业务而言它是刚刚好够用、且极其可靠的基础设施。正如论文结尾所说“Bigtable has been used successfully in many Google products... providing a flexible, high-performance solution for storing structured data.”而它的思想早已融入今天每一个大数据工程师的日常工具链中。延伸学习建议原始论文Bigtable: A Distributed Storage System for Structured Data (OSDI 2006)动手实践使用Google Cloud Bigtable或Apache HBase对比阅读Bigtable vs Cassandra vs DynamoDB

相关文章:

【计算】漫谈Google三驾马车之 Bigtable

我们将从背景动机、系统架构、核心设计思想、使用方式四个维度,全面深入地解析 Google 的 Bigtable —— 这一支撑了 Google 多数核心服务(如 Search、Gmail、Google Maps)的分布式结构化存储系统。 一、为什么要做 Bigtable?——…...

告别官方软件臃肿:惠普暗影精灵笔记本的纯净性能管家OmenSuperHub

告别官方软件臃肿:惠普暗影精灵笔记本的纯净性能管家OmenSuperHub 【免费下载链接】OmenSuperHub 使用 WMI BIOS控制性能和风扇速度,自动解除DB功耗限制。 项目地址: https://gitcode.com/gh_mirrors/om/OmenSuperHub 你是否曾经因为惠普Omen Gam…...

保姆级教程:在ROS Noetic下用OCS2让Unitree A1/Go1四足机器人站起来并走两步

从零到行走:OCS2与Unitree四足机器人实战指南 1. 环境准备与基础概念 四足机器人控制一直是机器人学中最具挑战性的领域之一。Unitree A1/Go1作为国产开源四足机器人的代表,结合OCS2(Optimal Control for Switched Systems)这一强…...

告别手动整理:用快马为coze打造自动化日报生成器提升效率

告别手动整理:用快马为coze打造自动化日报生成器提升效率 每天下班前最头疼的就是整理日报了。零散的工作记录、会议要点、沟通事项全都混在一起,手动分类不仅耗时,还容易遗漏重要信息。最近我用InsCode(快马)平台开发了一个coze自动化日报生…...

【自动驾驶 VLA 技术解析】视觉-语言-动作模型的架构与实践

文章目录自动驾驶 VLA 技术解析:视觉-语言-动作模型的架构与实践一、引言二、为什么需要 VLA2.1 三代范式演进2.2 VLA 相对 VLM 的核心升级三、VLA 核心架构拆解3.1 三模块统一框架3.2 两大架构范式3.3 动作输出的三种形式四、代表性架构深度解析4.1 OpenDriveVLA&a…...

【 自动驾驶技术解析】端到端架构与感知规控演进全景(2025–2026)

文章目录自动驾驶技术解析:端到端架构与感知规控演进全景(2025–2026)一、引言二、自动驾驶分级与现状2.1 SAE 分级体系2.2 当前格局速览三、核心感知技术演进3.1 从 SLAM 到 BEV Transformer3.2 BEVFormer 架构解析3.3 3D 占用网络&#xff…...

实战应用:基于快马ai快速开发集成多款iic传感器的物联网环境监测站

今天想和大家分享一个物联网环境监测站的实战项目开发经验。这个项目用到了ESP32开发板和几种常见的I2C传感器,通过快马平台快速实现了从硬件连接到数据上传的全流程开发。 项目背景与硬件选型 这个环境监测站的核心是ESP32开发板,它内置WiFi功能&…...

避坑指南:用JDK21运行Jenkins时编译JDK8项目的5个关键配置

混合JDK环境下的Jenkins实战:从JDK21运行到JDK8项目编译的全链路配置 当现代CI/CD系统遇上遗留代码库,技术债的偿还往往从构建环节开始。最近在将团队Jenkins升级到JDK21环境时,我们遭遇了典型的多版本JDK兼容性问题:新部署的Jenk…...

PointPillars的‘伪图像’到底是怎么来的?从点云到BEV特征图的完整转换逻辑拆解

PointPillars的"伪图像"生成机制:从点云到BEV特征图的完整技术解析 当激光雷达扫描周围环境时,会产生数以万计的三维点云数据。这些离散的点如何转化为适合卷积神经网络处理的规整格式?PointPillars提出的"伪图像"概念给…...

3分钟上手的智能工具:如何解放蚂蚁森林能量收取的重复操作?

3分钟上手的智能工具:如何解放蚂蚁森林能量收取的重复操作? 【免费下载链接】alipay_autojs 最最最简单的蚂蚁森林自动收能量脚本 项目地址: https://gitcode.com/gh_mirrors/al/alipay_autojs 你是否也曾经历过这样的场景:忙碌一天后…...

4步解决Windows系统苹果设备驱动适配问题

4步解决Windows系统苹果设备驱动适配问题 【免费下载链接】Apple-Mobile-Drivers-Installer Powershell script to easily install Apple USB and Mobile Device Ethernet (USB Tethering) drivers on Windows! 项目地址: https://gitcode.com/gh_mirrors/ap/Apple-Mobile-Dr…...

Amlogic设备启动失败解决方案:从兼容性诊断到系统部署的全流程方法论

Amlogic设备启动失败解决方案:从兼容性诊断到系统部署的全流程方法论 【免费下载链接】amlogic-s9xxx-armbian Supports running Armbian on Amlogic, Allwinner, and Rockchip devices. Support a311d, s922x, s905x3, s905x2, s912, s905d, s905x, s905w, s905, s…...

【从零到一:在STM32F103上构建FreeRTOS与micro-ROS的实时机器人节点】

1. 为什么选择STM32F103FreeRTOSmicro-ROS组合 在机器人控制领域,实时性和可靠性是核心诉求。STM32F103RCT6作为经典的Cortex-M3内核MCU,具有丰富的外设资源和成熟的生态支持,特别适合作为轻量级机器人控制器的核心。而FreeRTOS作为市场占有率…...

新手入门指南:在快马平台用AI生成你的第一个龙虾部署实践项目

今天想和大家分享一个特别适合新手的实践项目——用Docker部署一个简单的Python Flask应用。这个项目是我在InsCode(快马)平台上完成的,整个过程对初学者非常友好,连我这种刚接触容器化的小白都能轻松上手。 为什么选择FlaskDocker组合 Flask是Python最轻…...

OpenClaw自动化测试:用Phi-3-mini-128k-instruct实现CI/CD流程增强

OpenClaw自动化测试:用Phi-3-mini-128k-instruct实现CI/CD流程增强 1. 为什么选择OpenClawPhi-3做测试增强? 去年参与一个开源项目时,我经历了测试环节的典型困境:每次PR提交后,需要手动检查数百行日志,用…...

OFA图像描述系统实战案例:为旅游照片自动生成精彩描述

OFA图像描述系统实战案例:为旅游照片自动生成精彩描述 1. 项目概述与核心价值 想象一下,你刚从一次难忘的旅行回来,手机里存满了精彩的照片。现在需要为这些照片配上文字描述,分享到社交媒体或制作旅行相册。手动为每张照片写描…...

猫抓cat-catch终极文件命名指南:高效自动化资源管理方案

猫抓cat-catch终极文件命名指南:高效自动化资源管理方案 【免费下载链接】cat-catch 猫抓 浏览器资源嗅探扩展 / cat-catch Browser Resource Sniffing Extension 项目地址: https://gitcode.com/GitHub_Trending/ca/cat-catch 猫抓cat-catch作为一款专业的浏…...

梦幻动漫魔法工坊快速上手:无需复杂配置,直接生成动漫图片

梦幻动漫魔法工坊快速上手:无需复杂配置,直接生成动漫图片 1. 开篇:让想象变成二次元世界 你是否曾经幻想过,只要输入一段文字描述,就能立刻看到自己想象中的动漫角色跃然纸上?梦幻动漫魔法工坊正是这样一…...

从LAS/LAZ点云数据到智能分析:处理、可视化与目标检测实战

1. 初识LAS/LAZ点云数据:从文件结构到实战解析 第一次接触激光雷达点云数据时,我被那些密密麻麻的坐标点震撼到了。想象一下,无人机或激光雷达设备扫描一片区域后,会生成包含数百万甚至上亿个空间点的数据集,每个点都精…...

快速原型实践:利用快马AI一键生成正版软件9.1自动化安装脚本

快速原型实践:利用快马AI一键生成正版软件9.1自动化安装脚本 最近在帮朋友部署一个数据分析环境,需要批量安装正版软件9.1版本。手动安装不仅耗时,还容易出错。于是我开始研究如何用Python写一个自动化安装脚本,没想到在InsCode(…...

TranslucentTB启动错误0x80070490深度解决方案:从问题定位到长效优化

TranslucentTB启动错误0x80070490深度解决方案:从问题定位到长效优化 【免费下载链接】TranslucentTB A lightweight utility that makes the Windows taskbar translucent/transparent. 项目地址: https://gitcode.com/gh_mirrors/tr/TranslucentTB 问题定位…...

准比例谐振控制器:从理想模型到工程实践的带宽调优

1. 准比例谐振控制器的核心原理 准比例谐振控制器(Quasi-Proportional Resonant Controller)是电力电子领域广泛使用的一种控制策略,特别适用于并网逆变器、有源滤波器等需要精确跟踪特定频率信号的场景。它的核心思想是在目标频率点&#xf…...

Labelme标注完别急着训练!手把手教你批量把JSON转成YOLO能吃的TXT格式

Labelme标注数据转YOLO格式实战指南:从原理到批量处理 当你用Labelme完成数百张图片的标注,满心欢喜准备开始YOLO模型训练时,却发现训练脚本报错——原来YOLO无法直接读取Labelme生成的JSON文件。这不是代码问题,而是格式不匹配的…...

终极指南:如何用QtAdb图形化工具轻松管理Android设备

终极指南:如何用QtAdb图形化工具轻松管理Android设备 【免费下载链接】QtAdb 项目地址: https://gitcode.com/gh_mirrors/qt/QtAdb 如果你曾经为复杂的adb命令头疼,或者厌倦了在终端中反复输入同样的调试指令,那么QtAdb就是为你量身定…...

OpCore-Simplify:从8小时到30分钟,智能OpenCore EFI配置的终极指南

OpCore-Simplify:从8小时到30分钟,智能OpenCore EFI配置的终极指南 【免费下载链接】OpCore-Simplify A tool designed to simplify the creation of OpenCore EFI 项目地址: https://gitcode.com/GitHub_Trending/op/OpCore-Simplify 在开源系统…...

AI编程新范式:用Nomic-Embed-Text-V2-MoE生成代码语义描述与检索

AI编程新范式:用Nomic-Embed-Text-V2-MoE生成代码语义描述与检索 1. 引言 你有没有过这样的经历?面对一个庞大的代码库,想找一个“处理用户登录验证”的函数,却记不清它具体叫什么名字,只能靠模糊的记忆在文件间来回…...

Adobe Illustrator效率脚本:10个自动化工具让设计师工作效率提升300%

Adobe Illustrator效率脚本:10个自动化工具让设计师工作效率提升300% 【免费下载链接】illustrator-scripts Adobe Illustrator scripts 项目地址: https://gitcode.com/gh_mirrors/il/illustrator-scripts 为什么设计师总在重复相同的操作?调整画…...

SecGPT-14B模型量化部署:为OpenClaw节省50%显存占用

SecGPT-14B模型量化部署:为OpenClaw节省50%显存占用 1. 为什么需要量化SecGPT-14B 当我第一次尝试在本地部署SecGPT-14B模型来驱动OpenClaw时,显存不足的问题立刻给了我当头一棒。我的RTX 3090显卡24GB显存,在加载完整模型后几乎被占满&…...

OpenFBX:5分钟快速掌握轻量级FBX文件解析方案

OpenFBX:5分钟快速掌握轻量级FBX文件解析方案 【免费下载链接】OpenFBX Lightweight open source FBX importer 项目地址: https://gitcode.com/gh_mirrors/op/OpenFBX OpenFBX是一款轻量级开源FBX导入工具,能够高效解析FBX格式文件,支…...

终极实战:vant-weapp组件库从0.x到最新版深度迁移指南

终极实战:vant-weapp组件库从0.x到最新版深度迁移指南 【免费下载链接】vant-weapp 轻量、可靠的小程序 UI 组件库 项目地址: https://gitcode.com/gh_mirrors/va/vant-weapp Vant Weapp作为轻量、可靠的小程序UI组件库,经历了从0.x到最新版的重大…...