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
《大数据经典论文解读》,新⼈⾸单¥59
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(10)
- 最新
- 精选
- bcd为什么要读成 可串hang化呢……
作者回复: 的确应该是可串xing化
2023-05-12归属地:北京1 - 在路上徐老师好,Megastore的实体组数据通过行键顺序存储,一个实体组会被分成多个分区,这些分区分布在不同的服务器上,所以操作实体组时,需要使用chubby提供分布式事务。我认为事务日志应该存储在GFS上,日志数据应该尽可能满足本地写入,也就是一个Block由一个服务器负责写入。在事务提交的5个步骤的第1步提到“我们先要获取到时间戳,以及最后一次提交的事务的日志的位置”,这样可以让已经加载了Block的服务器来写入事务日志。2021-11-123
- Bachue ZhouMegastore 的 prejoin 机制,如何解决实体组数据会增加的问题呢?比如一开始只写入了一个 User,以后慢慢的为其增加关联的 Photo,这种情况下,如何预先为 Photo 分配空间来实现 prejoin 呢?2022-12-07归属地:上海2
- 沉淀的梦想MegaStore 是事务机制是用的 Percolator 吗2022-12-17归属地:浙江1
- Bachue ZhouPhoto 表本身能为 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-261
- 核桃事务提交带上时间戳的这个特性,会隐藏依赖时间同步,如果节点的时间没有同步的,那么可能会出现问题。当然比较可靠的方法是依赖version版本的,每次事务先给你当前的版本,然后提交的时候就直接递增,但是如果发现服务端的版本更大,那么就需要拒绝该事务重新刷新数据了。2022-02-241
- piboyeHbase 也支持这些功能了吧?2022-01-1611
- 许灵徐老师建,Megastore的数据通过实体组分区后,所有的事务日志都与实体组关联的。日志数据应该与分区实体靠近,数据应该写到GFS上,并且与实体的分区规则一致。2021-11-161
收起评论