精读预告Bigtable

文章目录
- 1. 引言:
- 2. 背景
1. 引言:
在本期的精读会中,我们将深入解读另一篇具有里程碑意义的论文——《Bigtable: A Distributed Storage System for Structured Data》。这篇论文详细介绍了 Bigtable 作为谷歌用于管理结构化数据的分布式存储系统,其独特的设计使得 Bigtable 能够在数千台服务器上高效地处理 PB 级数据量。作为谷歌多个核心产品的基础架构,Bigtable 在大规模数据处理、分布式存储系统设计中具有重要的参考意义。
通过本文,我们将带领读者:
- 探讨 Bigtable 在 Google诞生的背景,其出现究竟是为了解决什么样的问题;
- 深入剖析 Bigtable 的数据模型 和其设计如何实现灵活的存储和访问控制;
- 解析 Bigtable 在分布式环境中的 实现过程底层数据结构;
- 展望 Bigtable 对 大数据存储系统 的影响及其未来可能的发展方向。
欢迎在评论区分享您的观点与见解,期待与您交流讨论!
2. 背景
在 GFS 和 MapReduce出现后,仍然很长一段时间内没有在大型的分布式系统上可以高并发、保障一致性,并且支持随机读写数据的系统。
当然在本篇论文出现之前,大多数的分布式数据都是通过MySQL来实现对大规模数据的管理的。如果只是维护一个几十乃至几百台服务器的 MySQL 集群其实也并不为过,但是,如果要像 GFS 维护成千上万的服务器,还有能做到吗?我们可以简单的看一下。
例如,我们建立一个MySQL集群来管理全国的人口信息,可以采用垂直拆分和水平拆分两种策略来进行分布式数据管理。

首先,我们可以按照数据库中的表按照业务逻辑进行拆分,每个拆分出来的数据库(或实例)包含一部分表。这种拆分方式适用于业务模块之间耦合度较低的情况。对于全国人口信息管理,可以按照不同的业务模块(如户籍管理)进行垂直拆分。例如:中国目前有34个省级行政区,那么就可以按照每个省级行政性拆一张表进行数据存储,这样可以减少单个数据库的并发压力,提高查询效率。
但是我们又会发现不同省级行政区的人口数量还不一致,中西部人口普遍少一些一张表可能够用,而沿海多一些可能就不够用,所以我们要进行水平拆分,所以我们可以进行水平拆分,将单张表的数据按照一定的规则分布到多个数据库或表中,每个表仅包含数据的一部分。对于全国人口信息管理,可以按照地域、时间或其他业务规则(如Hash、Range等)将人口信息数据分布到不同的数据库或表中。例如我们可以按照身份证信息对4取模,然后每个省级行政区可以均匀的分配到不同的四张表里面。
后期维护怎么样呢,如果遇到如上世纪六七十年代的生育潮,我们继续对数据进行扩容。如果我们只增加 2 台服务器,把各个服务器的分片,从模上 4 变成模上 6,我们就需要在增加服务器之后,搬运大量的数据,而数据迁移时,可能会遇到带宽和存储压力、服务中断、读写复杂性增加、资源浪费和成本问题。同时缩容的情况也是,其集群的“伸缩性”太差,以及后面的维护性工作也不少。
所以,Bigtable的设计目标就有了:
-
灵活的资源管理:能够根据实时需求,随时增加或减少服务器数量,以适应业务高峰期和低谷期的变化,实现高效资源利用。
-
智能的数据分片:系统能够自动根据数据负载进行分片,当某个分片负载过高时,自动拆分以平衡负载;同时,在添加新服务器后,能够迅速重新分配数据,确保所有节点均衡承担压力。
-
高可用性:即使部分节点发生故障,集群仍能继续运行,确保整个系统的稳定性和可靠性。
现在就引入本文主角:Bigtable 是一个分布式存储系统,用于管理结构化数据,设计可以扩展到极大的规模,涵盖PB级数据并分布在数千台通用服务器上。
众多 Google 产品,包括网页索引、Google Earth 和 Google Finance,都使用 Bigtable 进行数据存储。尽管这些应用对 Bigtable 的需求差异很大——无论是从数据大小(从 URL 到网页,再到卫星图像)还是延迟要求(从后台批量处理到实时数据服务)来看,Bigtable 依然为这些产品提供了一个灵活且高性能的解决方案。
实际上,Bigtable 并不是传统意义上的“表(table)”。在其底层,数据的物理存储形式是一个排序的 Map。该 Map 的 key 由行关键字、列关键字和时间戳组成的复合结构,而 value 则是一个简单的字符串:(row:string, column:string, time:int64) → string。
Bigtable 提供了一个简单的数据模型,允许客户端动态控制数据的布局和格式,从而满足各种应用场景的需求。
相关文章:
精读预告Bigtable
文章目录 1. 引言:2. 背景 1. 引言: 在本期的精读会中,我们将深入解读另一篇具有里程碑意义的论文——《Bigtable: A Distributed Storage System for Structured Data》。这篇论文详细介绍了 Bigtable 作为谷歌用于管理结构化数据的分布式存…...
软件架构演变:从单体架构到LLM链式调用
0 前言 软件架构——我们数字世界的蓝图——自20世纪中叶计算机时代诞生以来,已经发生了巨大演变。 20世纪60年代和70年代早期,以大型主机和单体软件为主导。而今天,数字领域已完全不同,运行在由云计算、API连接、AI算法、微服务…...
Redis-“自动分片、一定程度的高可用性”(sharding水平拆分、failover故障转移)特性(Sentinel、Cluster)
文章目录 零、写在前面一、水平拆分(sharding/分片)、故障转移(failover)机制介绍水平拆分(Sharding)故障转移机制 二、Redis的水平拆分的机制有关的配置1. 环境准备2. 配置文件配置3. 启动所有Redis实例4. 创建集群5. 测试集群读/写6. 集群管理 三、Red…...
操作系统(9) (并发-----原子性/互斥临界区/生产者消费者问题/临界区问题三条件/互斥性/进展性/公平性)
目录 1. 并发(Concurrency)的定义 2. 原子性(Atomicity) 3. 互斥(Mutual Exclusion) 4. 生产者-消费者问题(Producer-Consumer Problem) 5. 临界区Critical Section 6. 临界区问题…...
Django响应
HTTPResponse: 是由Django创造的, 他的返回格式为 HTTPResponse(content响应体,content_type响应体数据类型,status状态码), 可以修改返回的数据类型,适用于返回图片,视频,音频等二进…...
算法:图的相关算法
图的相关算法 1. 图的遍历算法1.1 深度优先搜索1.2 广度优先搜索 2. 最小生成树求解算法普里姆(Prim)算法克鲁斯卡尔(Kruskal)算法 3. 拓扑排序4. 最短路径算法 1. 图的遍历算法 图的遍历是指从某个顶点出发,沿着某条搜索路径对图中的所有顶点进行访问且只访问次的…...
django的models使用介绍。
from django.db import modelsfrom utils.models import CommonModel# Create your models here. class User(CommonModel):#用户数据模型username models.CharField(用户名,max_length32, uniqueTrue)password models.CharField(密码,max_length256)nickname models.CharFi…...
【分布式技术】分布式事务深入理解
文章目录 概述产生原因关键点 分布式事务解决方案3PC3PC的三个阶段:3PC相比于2PC的改进:3PC的缺点: TCCTCC事务的三个阶段:TCC事务的设计原则:TCC事务的适用场景:TCC事务的优缺点:如何解决TCC模…...
力扣hot100-->hash表/map
hash表/map 1. 1. 两数之和 简单 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。 你可以假设每种输入只会对应一个答案,并且你不能使用两次相同的元素。 …...
基于redis实现延迟队列
Redis实现延时队列 延时队列里装的主要是延时任务,用延时队列来维护延时任务的执行时间。 1、延时队列有哪些使用情景? 1、如果请求加锁没加成功 可以将这个请求扔到延时队列里,延后处理。 2、业务中有延时任务的需要 比如说࿰…...
PHP微信小程序共享充电桩系统设计与实现计算机毕业设计源代码作品和开题报告
博主介绍:黄菊华老师《Vue.js入门与商城开发实战》《微信小程序商城开发》图书作者,CSDN博客专家,在线教育专家,CSDN钻石讲师;专注大学生毕业设计教育、辅导。 所有项目都配有从入门到精通的基础知识视频课程ÿ…...
【网络面试篇】TCP与UDP类
目录 一、综述 1. TCP与UDP的概念 2. 特点 3. 区别 4. 对应的使用场景 二、补充 1. 基础概念 (1)面向连接 (2)可靠的 (3)字节流 2. 相关问题 (1)TCP 和 UDP 可以同时绑定…...
Windows转Mac过渡指南
最近由于工作原因开始使用mac电脑,说实话刚拿到手的时候,window党表示真的用不惯。坚持用一下午之后,发现真的yyds,这篇文章说说mac电脑的基本入门指南。 1. 不会使用mac的触摸板,接上鼠标发现滚轮和windows是反的。 …...
LeetCode100之盛最多水的容器(11)--Java
1.问题描述 给定一个长度为 n 的整数数组 height 。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。返回容器可以储存的最大水量 注意 你不能倾斜容器 示例1 输入&…...
【VMware】使用笔记
一、安装 win11支持16.2以上版本,其他版本不兼容 安装参考: 二、设置 1、蓝屏设置 参考:win11打开VMware虚拟机蓝屏解决_win11vmware蓝屏-CSDN博客 2、VMwareTool配置 第一步:移除“open-vm-tools” sudo apt-get autoremo…...
<项目代码>YOLOv8 猫狗识别<目标检测>
YOLOv8是一种单阶段(one-stage)检测算法,它将目标检测问题转化为一个回归问题,能够在一次前向传播过程中同时完成目标的分类和定位任务。相较于两阶段检测算法(如Faster R-CNN),YOLOv8具有更高的…...
存储数据库的传输效率提升-ETLCloud结合HBASE
一、大数据存储数据库–HBASE HBase,作为一个开源的分布式列存储数据库,基于Google的Bigtable设计而成,专为处理大规模结构化数据而优化。使用HBase打造大数据解决方案的好处主要包括:高可扩展性,能够处理PB级的数据&…...
HO-XGBoost河马算法优化极限梯度提升树多变量回归预测(Matlab)
HO-XGBoost河马算法优化极限梯度提升树多变量回归预测(Matlab) 目录 HO-XGBoost河马算法优化极限梯度提升树多变量回归预测(Matlab)预测效果基本介绍程序设计参考资料 预测效果 基本介绍 Matlab实现HO-XGBoost多变量回归预测&…...
【Hive sql面试题】找出连续活跃3天及以上的用户
表数据如下: 要求:求出连续活跃三天及以上的用户 建表语句和插入数据如下: create table t_useractive(uid string,dt string );insert into t_useractive values(A,2023-10-01 10:10:20),(A,2023-10-02 10:10:20),(A,2023-10-03 10:16…...
Linux curl命令下载显示时间/速度/大小
命令: curl -# -O --compressed -w "大小: %{size_download} bytes\n时间: %{time_total} seconds\n速度: %{speed_download} B/s\n" 下载URL链接。 例子: curl -# -O --compressed -w "大小: %{size_download} bytes\n时间: %{time_to…...
Lombok 的 @Data 注解失效,未生成 getter/setter 方法引发的HTTP 406 错误
HTTP 状态码 406 (Not Acceptable) 和 500 (Internal Server Error) 是两类完全不同的错误,它们的含义、原因和解决方法都有显著区别。以下是详细对比: 1. HTTP 406 (Not Acceptable) 含义: 客户端请求的内容类型与服务器支持的内容类型不匹…...
3.3.1_1 检错编码(奇偶校验码)
从这节课开始,我们会探讨数据链路层的差错控制功能,差错控制功能的主要目标是要发现并且解决一个帧内部的位错误,我们需要使用特殊的编码技术去发现帧内部的位错误,当我们发现位错误之后,通常来说有两种解决方案。第一…...
C++中string流知识详解和示例
一、概览与类体系 C 提供三种基于内存字符串的流,定义在 <sstream> 中: std::istringstream:输入流,从已有字符串中读取并解析。std::ostringstream:输出流,向内部缓冲区写入内容,最终取…...
OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别
OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别 直接训练提示词嵌入向量的核心区别 您提到的代码: prompt_embedding = initial_embedding.clone().requires_grad_(True) optimizer = torch.optim.Adam([prompt_embedding...
uniapp中使用aixos 报错
问题: 在uniapp中使用aixos,运行后报如下错误: AxiosError: There is no suitable adapter to dispatch the request since : - adapter xhr is not supported by the environment - adapter http is not available in the build 解决方案&…...
HarmonyOS运动开发:如何用mpchart绘制运动配速图表
##鸿蒙核心技术##运动开发##Sensor Service Kit(传感器服务)# 前言 在运动类应用中,运动数据的可视化是提升用户体验的重要环节。通过直观的图表展示运动过程中的关键数据,如配速、距离、卡路里消耗等,用户可以更清晰…...
IP如何挑?2025年海外专线IP如何购买?
你花了时间和预算买了IP,结果IP质量不佳,项目效率低下不说,还可能带来莫名的网络问题,是不是太闹心了?尤其是在面对海外专线IP时,到底怎么才能买到适合自己的呢?所以,挑IP绝对是个技…...
【Elasticsearch】Elasticsearch 在大数据生态圈的地位 实践经验
Elasticsearch 在大数据生态圈的地位 & 实践经验 1.Elasticsearch 的优势1.1 Elasticsearch 解决的核心问题1.1.1 传统方案的短板1.1.2 Elasticsearch 的解决方案 1.2 与大数据组件的对比优势1.3 关键优势技术支撑1.4 Elasticsearch 的竞品1.4.1 全文搜索领域1.4.2 日志分析…...
华为OD最新机试真题-数组组成的最小数字-OD统一考试(B卷)
题目描述 给定一个整型数组,请从该数组中选择3个元素 组成最小数字并输出 (如果数组长度小于3,则选择数组中所有元素来组成最小数字)。 输入描述 行用半角逗号分割的字符串记录的整型数组,0<数组长度<= 100,0<整数的取值范围<= 10000。 输出描述 由3个元素组成…...
C++实现分布式网络通信框架RPC(2)——rpc发布端
有了上篇文章的项目的基本知识的了解,现在我们就开始构建项目。 目录 一、构建工程目录 二、本地服务发布成RPC服务 2.1理解RPC发布 2.2实现 三、Mprpc框架的基础类设计 3.1框架的初始化类 MprpcApplication 代码实现 3.2读取配置文件类 MprpcConfig 代码实现…...
