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

20 | Megastore(二):把Bigtable玩出花来

你好,我是徐文浩。这节课,我们继续来解读 Megastore 的论文。
在上一讲里,我们了解了 Megastore 的设计目标和整体架构。Megastore 虽然定了一个雄心勃勃的设计目标,但是当我们深入它的整体架构的时候,发现它还是根据实际的应用场景做了种种的妥协。
Megastore 把数据按照分区划分成了很多“小数据库”,来解决 Paxos 算法的单节点性能瓶颈问题。而针对数据库事务,Megastore 支持的是单个实体组内的一阶段事务。一旦要跨实体组,要么就要选择两阶段事务,要么就要采用并非事务性的异步消息机制。所以,Megastore 虽然支持了 SQL 形式的接口,但是实际在应用中,仍然需要我们针对自己的数据模型进行精心的设计。
那么,这一讲,我们就看看 Megastore 的数据模型是怎么样的,它在底层又是如何使用 Bigtable 来存储数据的,它实现的实体组层面的事务又是怎么一回事儿。
在学完这一讲之后,希望你能够发现,其实 Megastore 并不神秘。通过有效利用 Bigtable 本身的各个特性,Megastore 就已经能够实现很多,原先我们觉得在分布式环境下相对复杂的特性了。当然,这些特性也作出了种种妥协,使得 Megastore 并不能成为分布式数据库的终极方案。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

Megastore是基于Bigtable的分布式数据库系统,旨在解决Paxos算法的单节点性能瓶颈问题。其数据模型采用实体组概念,通过分区划分数据以提高性能,并利用Bigtable的连续存储特性实现对Key的预Join,从而提高读写性能。此外,Megastore支持本地索引和全局索引,以及在索引优化方面的三点改造,使其能够支持更复杂的索引功能。在事务和隔离性方面,Megastore支持了“可串行化”的ACID语义,通过MVCC机制实现隔离性,并利用Paxos算法和Chubby系统来保证数据的一致性和可靠性。然而,尽管Megastore支持了许多有用的特性,其特性也使得其更像一个专有系统,限制了其推广和应用。因此,Megastore可视为分布式数据库发展史上的一个“过渡品”,而不是最终的解决方案。

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

全部留言(10)

  • 最新
  • 精选
  • bcd
    为什么要读成 可串hang化呢……

    作者回复: 的确应该是可串xing化

    2023-05-12归属地:北京
    1
  • 在路上
    徐老师好,Megastore的实体组数据通过行键顺序存储,一个实体组会被分成多个分区,这些分区分布在不同的服务器上,所以操作实体组时,需要使用chubby提供分布式事务。我认为事务日志应该存储在GFS上,日志数据应该尽可能满足本地写入,也就是一个Block由一个服务器负责写入。在事务提交的5个步骤的第1步提到“我们先要获取到时间戳,以及最后一次提交的事务的日志的位置”,这样可以让已经加载了Block的服务器来写入事务日志。
    2021-11-12
    3
  • Bachue Zhou
    Megastore 的 prejoin 机制,如何解决实体组数据会增加的问题呢?比如一开始只写入了一个 User,以后慢慢的为其增加关联的 Photo,这种情况下,如何预先为 Photo 分配空间来实现 prejoin 呢?
    2022-12-07归属地:上海
    2
  • 沉淀的梦想
    MegaStore 是事务机制是用的 Percolator 吗
    2022-12-17归属地:浙江
    1
  • Bachue Zhou
    Photo 表本身能为 id 创建单独的全局索引吗?如果不能的话,那我觉得这其实就是个文档数据库,Photo 其实就是 User 下面的一个 Nested Object 而已,并不是真正意义上的独立表。所谓的实体,其实就是一个 Document 而已,这样认知更容易理解吧。
    2022-12-08归属地:上海
    1
  • Bachue Zhou
    另外,全局索引是弱一致的,也就是说可能发生数据写入成功,事务也提交成功,但是就是查询不到的情况,是吗?
    2022-12-07归属地:上海
    1
  • 核桃
    索引优化这里的第一点,在索引中添加数据,这个做法目前在文件系统中也有,如果文件数据很小,例如只有1kb,那么完全可以在文件头部的header结构体中直接保存数据,也就是extend list block和gang block的概念出现,但是这里的限制就是对数据量有限制,不知道数据库的这个索引优化会不会也是这样。 当然,这样做了以后,在代码层面和功能实现方面也有了一些麻烦点,例如以前遍历数据的时候,是找到文件的header头部信息之后一层层访问的,但是现在不用了,需要做很多工程上的条件判断。算是一种特殊情况。而且数据库这样的做法,感觉会更加繁琐。
    2022-02-26
    1
  • 核桃
    事务提交带上时间戳的这个特性,会隐藏依赖时间同步,如果节点的时间没有同步的,那么可能会出现问题。当然比较可靠的方法是依赖version版本的,每次事务先给你当前的版本,然后提交的时候就直接递增,但是如果发现服务端的版本更大,那么就需要拒绝该事务重新刷新数据了。
    2022-02-24
    1
  • piboye
    Hbase 也支持这些功能了吧?
    2022-01-16
    1
    1
  • 许灵
    徐老师建,Megastore的数据通过实体组分区后,所有的事务日志都与实体组关联的。日志数据应该与分区实体靠近,数据应该写到GFS上,并且与实体的分区规则一致。
    2021-11-16
    1
收起评论
显示
设置
留言
10
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部