大数据经典论文解读
徐文浩
bothub 创始人
13844 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 59 讲
大数据经典论文解读
15
15
1.0x
00:00/00:00
登录|注册

19 | Megastore(一):全国各地都能写入的数据库

你好,我是徐文浩。
大数据技术一开始,更像一个专有系统。但是随着时间的推移,工程师们越来越多地让这些大数据系统支持上了 SQL 的特性。于是我们看到了 Hive 让大家可以用 SQL 来执行 MapReduce 任务,Dremel 这样的系统更是一开始就支持了 SQL。对于 OLAP 的分析类系统来说,支持 Schema 定义、支持字段类型、支持直接用类 SQL 的语言进行数据分析,很快就成为了新一代大数据分析系统的标准。
所以,Google 想要在 Bigtable 这样的 OLTP 数据库上支持 SQL,也不会让我们意外了。那么接下来,我们就一起来看一看《Megastore: Providing scalable, highly available storage for interactive services》这篇论文,为我们带来了一个什么样的分布式系统。
Megastore 是一个雄心勃勃的系统,支持 SQL 这样的接口只是它想要做到的所有事情中的一小项。如果列出 Megastore 支持的所有特性,相信也是一个让人两眼放光的系统,好像是分布式数据库的终极答案:
跨数据中心的多副本同步数据复制;
支持为数据表的字段建立 Schema,并且可以通过 SQL 接口来访问;
支持数据库的二级索引;
支持数据库的事务。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

Megastore是一个支持SQL接口的分布式数据库系统,旨在解决多数据中心的数据复制和可用性问题。文章介绍了Megastore的设计理念和解决方案。首先,它支持跨数据中心的多副本同步数据复制,通过Paxos算法实现同步复制数据库日志。其次,Megastore支持为数据表的字段建立Schema,并且可以通过SQL接口来访问,同时支持数据库的二级索引和事务。文章还提到Megastore选择直接使用Paxos算法进行多个数据中心内的数据库同步,但也面临性能瓶颈的问题。为了解决Paxos的性能瓶颈,Megastore进行了优化,但仍然受限于单台服务器的性能。总的来说,Megastore的设计旨在解决分布式数据库在多数据中心环境下的数据复制和可用性问题,同时支持SQL接口和事务,但在性能方面仍有挑战。 Megastore引入了实体组的概念,将数据分区按实体组进行同步复制,实现了跨数据中心的数据同步。每个实体组内支持一阶段的数据库事务,而跨实体组的操作可以通过两阶段事务或异步消息机制实现。这种设计使得Megastore不是一个“可线性化”的分布式数据库,而是很多个分布式数据库的一个合集。虽然Megastore提出了雄心勃勃的目标,但在实际最终的实现上,作出了种种的妥协和限制。它并不是一个“透明”的分布式数据库,而是需要在充分了解其特性后,对数据库表进行适配性设计才能发挥其特性。 总的来说,Megastore的设计理念和解决方案为读者提供了对分布式数据库系统的深入了解,尤其是在多数据中心环境下的数据复制和可用性问题。文章内容涵盖了Megastore的设计目标、实体组概念、事务处理和并发控制等方面,为读者提供了全面的技术视角。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《大数据经典论文解读》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(10)

  • 最新
  • 精选
  • 密码123456
    用paxos,来同步数据。虽然一致性,可以保障。但是更新数据那么频繁,每次同步数据都要2轮通信。而且还是跨数据中心,天然就是慢。那基于什么样的考虑,使用的呢?

    作者回复: 就是为了保障一致性啊,一致性本身是非常重要的啊

    2023-05-13归属地:江苏
    1
  • 在路上
    徐老师好,Megastore通过对实体组分区,让数据库日志能并行复制,很像在编程的时候,用线程池来处理用户请求,通过对用户id取模的方法,将请求分发给不同的线程,使得用户请求可以被并行处理。用户请求一般只操作自身数据,如果需要操作其他用户的数据,要么加锁,要么丢给对应的线程处理。 在APRG游戏开发中,玩家的数据一般以文档的形式存储,类似于实体组的概念,这份数据包括玩家等级、属性、技能、装备、背包等各种信息。玩家的很多行为都不涉及其他玩家,比如在游戏中签到并领取奖励,只会改变自己的数据。不过如果他需要和其他玩家交易物品,就涉及到“同时”改变自己和对方的数据,要么加锁,要么丢到其他线程或进程处理。如果玩过“奇迹”这款游戏的同学都知道,两个人需要去到同一场景才能完成交易,去同一场景这个行为其实就是让两个人处于同一个线程或进程内,因为一个场景的所有请求会被顺序处理,工程师们通过这个方法简化了交易逻辑的实现难度。
    2021-11-08
    16
  • Helios
    Megastore号称多数据中心的同步,但是是有前提的,是针对同一个分区即实体组。和很多kv数据库舍弃了数据库事务一样,megastore也只能保证实体组内的事务,做做个人的文章集合还可以。就想发微博这种貌似在一个实体组,但是最终涉及到多个,业务越发展并不能保证实体没有关联
    2021-12-28
    2
  • 槑·先生
    先前了解过 TiDB 这种 NewSQL,再看 MegaStore 似乎非常好理解。
    2022-06-07
    1
    1
  • 核桃
    再次理解了一下实体组的概念,这个概念的出现,和传统的数据库中的表级锁,行级锁甚至全局锁是否有关系呢?对于传统的数据库来说,行级锁已经是很细粒度的锁了。但是往往一个用户的操作,是涉及到多个不同的表的数据,而Megastore的实体组概念,其实就是把本该属于一个用户对象下所有涉及的表的数据及对象结构包装成一个整体的概念,然后这样的数据进行操作,就和以前的行级锁思想有点类似了,但是更加适合大数据及分布式环境下。 同时对于跨越实体组的事务,使用异步复制这个方案,这里其实也有一个缺陷的。当队列中如果数据满了,或者前面有一个事务很久都没搞定出现问题,那么队列就可能会出现各种问题了,所以这里可以出现二级队列。 做法就是一级队列是接受到跨越实体组的事务请求,但是如果事务执行失败或者有问题了,那么尝试一定次数之后,直接扔到二级队列去处理,不要影响到后续的处理,同时也可以引入优先队列等尝试,这样就更加完善了。
    2022-02-26
    1
  • 吴小智
    实体组的多少需要提前定义嘛?实体组的扩缩容怎么办?
    2021-11-16
    1
  • 陈迪
    你下单,我下单,但都要扣共同的、全局的商品
    2021-11-16
    1
  • 核桃
    这里有个难题,对于同一个实体组里面写入的时候,怎么知道先后顺序呢?例如还是三副本机制下,往A节点的实体组1 写入的数据,然后中断了,再考虑往B中写入的话,怎么知道两次写入的先后呢? 这里的隐藏条件就是实体组之间是否需要分主次副本机制,如果分了,那么还是先找主来写入的话,当用户距离切换了,导致写入主的时候延迟比较大该怎么办? 如果不分的话,我想到的一种解决策略就是写入之前,先注销掉当前写入的批次的id,这里需要使用到全局唯一的id的方式来解决,再配合上各种修复逻辑才能完善实体组的概念吧。噢,把其他的内容串联起来了。
    2022-02-24
    1
  • CRT
    不同数据中心之间的数据分区,这里的分区应该理解为数据副本更加合适?
    2021-11-19
  • 扭高达💨🌪
    Megastore有点像hdfs同步元数据,通过journal node或者bookkeeper写入元数据 其他的namenode异步消费同步元数据
    2021-11-11
收起评论
显示
设置
留言
10
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部