精读预告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…...

业务系统对接大模型的基础方案:架构设计与关键步骤
业务系统对接大模型:架构设计与关键步骤 在当今数字化转型的浪潮中,大语言模型(LLM)已成为企业提升业务效率和创新能力的关键技术之一。将大模型集成到业务系统中,不仅可以优化用户体验,还能为业务决策提供…...

linux之kylin系统nginx的安装
一、nginx的作用 1.可做高性能的web服务器 直接处理静态资源(HTML/CSS/图片等),响应速度远超传统服务器类似apache支持高并发连接 2.反向代理服务器 隐藏后端服务器IP地址,提高安全性 3.负载均衡服务器 支持多种策略分发流量…...

家政维修平台实战20:权限设计
目录 1 获取工人信息2 搭建工人入口3 权限判断总结 目前我们已经搭建好了基础的用户体系,主要是分成几个表,用户表我们是记录用户的基础信息,包括手机、昵称、头像。而工人和员工各有各的表。那么就有一个问题,不同的角色…...

江苏艾立泰跨国资源接力:废料变黄金的绿色供应链革命
在华东塑料包装行业面临限塑令深度调整的背景下,江苏艾立泰以一场跨国资源接力的创新实践,重新定义了绿色供应链的边界。 跨国回收网络:废料变黄金的全球棋局 艾立泰在欧洲、东南亚建立再生塑料回收点,将海外废弃包装箱通过标准…...

基于Docker Compose部署Java微服务项目
一. 创建根项目 根项目(父项目)主要用于依赖管理 一些需要注意的点: 打包方式需要为 pom<modules>里需要注册子模块不要引入maven的打包插件,否则打包时会出问题 <?xml version"1.0" encoding"UTF-8…...
vue3 定时器-定义全局方法 vue+ts
1.创建ts文件 路径:src/utils/timer.ts 完整代码: import { onUnmounted } from vuetype TimerCallback (...args: any[]) > voidexport function useGlobalTimer() {const timers: Map<number, NodeJS.Timeout> new Map()// 创建定时器con…...
Python ROS2【机器人中间件框架】 简介
销量过万TEEIS德国护膝夏天用薄款 优惠券冠生园 百花蜂蜜428g 挤压瓶纯蜂蜜巨奇严选 鞋子除臭剂360ml 多芬身体磨砂膏280g健70%-75%酒精消毒棉片湿巾1418cm 80片/袋3袋大包清洁食品用消毒 优惠券AIMORNY52朵红玫瑰永生香皂花同城配送非鲜花七夕情人节生日礼物送女友 热卖妙洁棉…...

【VLNs篇】07:NavRL—在动态环境中学习安全飞行
项目内容论文标题NavRL: 在动态环境中学习安全飞行 (NavRL: Learning Safe Flight in Dynamic Environments)核心问题解决无人机在包含静态和动态障碍物的复杂环境中进行安全、高效自主导航的挑战,克服传统方法和现有强化学习方法的局限性。核心算法基于近端策略优化…...
QT3D学习笔记——圆台、圆锥
类名作用Qt3DWindow3D渲染窗口容器QEntity场景中的实体(对象或容器)QCamera控制观察视角QPointLight点光源QConeMesh圆锥几何网格QTransform控制实体的位置/旋转/缩放QPhongMaterialPhong光照材质(定义颜色、反光等)QFirstPersonC…...

【网络安全】开源系统getshell漏洞挖掘
审计过程: 在入口文件admin/index.php中: 用户可以通过m,c,a等参数控制加载的文件和方法,在app/system/entrance.php中存在重点代码: 当M_TYPE system并且M_MODULE include时,会设置常量PATH_OWN_FILE为PATH_APP.M_T…...