“云存储系统”赏析系列分享三:Sql与nosql

19
“ 云云云云 ”云云云云云SQL 云 NOSQL 2011.8 云云[email protected] 1

description

 

Transcript of “云存储系统”赏析系列分享三:Sql与nosql

Page 1: “云存储系统”赏析系列分享三:Sql与nosql

“ 云存储系统”赏析系列三:SQL 与 NOSQL

2011.8

日照: [email protected]

1

Page 2: “云存储系统”赏析系列分享三:Sql与nosql

Agenda

单机存储引擎 从单机到多机 SQL与NOSQL融合 奇技淫巧

2

Page 3: “云存储系统”赏析系列分享三:Sql与nosql

单机存储引擎

3

Page 4: “云存储系统”赏析系列分享三:Sql与nosql

B+ Tree 存储引擎关系型数据库 :页级缓存, B+ 树,索引组织表问题

索引数据量 > 内存:随机读取问题锁冲突结论: B+ Tree 存储引擎单机服务的数据量有限

NOSQL 解决方法减少索引量数据静态化,定期合并

4

Page 5: “云存储系统”赏析系列分享三:Sql与nosql

随机读取存储引擎KV 系统:只支持随机读取优化方法:减少索引量实现思路

数据追加到磁盘文件内存中存放 key => 记录位置索引减少 key 占用的内存

对 key 求 md5对 key hash 后保留若干位,内存中一个 key 对应磁盘中若干

条记录,需要去重定期合并

参考系统: Bitcask

5

Page 6: “云存储系统”赏析系列分享三:Sql与nosql

Merge-dump 存储引擎支持顺序读取和随机扫描静态数据 + 动态数据,定期合并,减少锁冲突解决随机写问题实现思路

数据先写入 MemtableMemtable 定期 dump 为 SSTable多个小 SSTable 不断合并生成大 SSTable ,减少随机读SSTable 只读,无锁,可使用 bloom filter 减少随机读

参考系统: Leveldb

6

Page 7: “云存储系统”赏析系列分享三:Sql与nosql

NOSQL 存储引擎应用场景面向特定场景

随机读取一次写入,多次读取:搜索

增强单机服务能力,节省成本友好的分布式支持,如支持迁移部分而不是整个库的数据

7

Page 8: “云存储系统”赏析系列分享三:Sql与nosql

从单机到多机

8

Page 9: “云存储系统”赏析系列分享三:Sql与nosql

Hash 划分Hash 取模

Hash 模 N , N 为机器分组数机器增加删除, N 值变化,数据分布改变

Hash 分桶 对 key 取模后分到 Q 个桶中 Q 值与机器数无关,机器上下线数据分布不变 Hash 散列后数据划分天然均匀 实例: Tair 系统

9

Page 10: “云存储系统”赏析系列分享三:Sql与nosql

连续块连续块

将表格按照 key 有序地划分为连续块 (start_key, end_key] 每个连续块类似 B+ Tree 的叶子节点 每个块的数据不均匀,需要动态分裂与合并 支持 scan 操作,但实现复杂 实例: Google Bigtable

10

Page 11: “云存储系统”赏析系列分享三:Sql与nosql

同构系统同构系统

将机器分成 group ,每个 group 内的机器存放的数据完全相同 问题:数据迁移量太大,线上几乎无法成功; group 内部增加副本

也几乎不成功; 假设服务数据量 1TB ,内部传输带宽限制 20MB/s ,增加副本

的时间为 1TB / 20MB/s = 50000s ,大约 10 几个小时; 迁移过程中机器再次出现故障怎么办?

11

Page 12: “云存储系统”赏析系列分享三:Sql与nosql

异构系统两层系统

文件系统层解决数据持久化问题,表格系统层解决服务问题 数据迁移瞬间完成 实例: Google Bigtable

动态数据与静态数据分离 动态数据量小,迁移瞬间完成; 静态数据不变化,迁移或 rebalance 与 GFS 类似; 实例: Taobao Oceanbase

12

Page 13: “云存储系统”赏析系列分享三:Sql与nosql

SQL 与 NOSQL 融合

13

Page 14: “云存储系统”赏析系列分享三:Sql与nosql

Why NOSQL?

大型公司解决特定存储难题,如大表 Join ,大数据量下(如 10TB )的全表

事务操作解决可扩展性问题,做到机器加入 / 删除自动化;解决 OLAP 分析型问题;集群规模大可节省成本;

中型公司解决特定问题,如引入 Redis 做读库而不是自己开发一套;精通关系型数据库的定制及优化的人员很少,人员成本较高;

Mysql Flashcache 优化;底层系统极限调优;数据库分库分表,自动切换 & 扩容中间层;

14

Page 15: “云存储系统”赏析系列分享三:Sql与nosql

Google Megastore

底层为 Google Bigtable ,支持随机读取和顺序扫描;划分 entity group , entity group 内部实现 RDBMS 功

能, entity group之间弱关联获取可扩展性;事务: entity group 内部支持事务;索引: Local index + global index ;行式存储引擎( OLTP ) + 列式存储引擎( OLAP );

15

Page 16: “云存储系统”赏析系列分享三:Sql与nosql

奇技淫巧

16

Page 17: “云存储系统”赏析系列分享三:Sql与nosql

架构上的 Work Around

同构系统 内部网络减少数据复制时间 业务上历史数据静态化,如文档,图片上传类应用

分裂问题:手工或定期触发分裂 Facebook News Feed Analytics 广告统计系统单用户过大问题

多机写复杂性: Oceanbase前期采用单机写绕开 Paxos

Zookeeper 使用方式松耦合 机房内 Linux HA 自动切换,机房之间手工切换

17

Page 18: “云存储系统”赏析系列分享三:Sql与nosql

实现技巧Group Commit主备强同步Skip List or 块链实现 copy-on-write Memtable内存管理:通用定长内存池 + 特定数据结构内存管理降低 Cache 锁粒度考虑宕机的情况下高效生成有序 ID任务区分优先级,对低优先级任务限速考虑宕机的情况下做到数据和索引文件的原子更新多机同步数据校验解决 fsync 不保证 commit log 记录持久化到磁盘的问题etc…

18

Page 19: “云存储系统”赏析系列分享三:Sql与nosql

• 个人博客: http://nosqlnotes.net

19