“云存储系统”赏析系列分享三:Sql与nosql
-
Upload
knuthocean -
Category
Documents
-
view
29.182 -
download
0
description
Transcript of “云存储系统”赏析系列分享三:Sql与nosql
Agenda
单机存储引擎 从单机到多机 SQL与NOSQL融合 奇技淫巧
2
单机存储引擎
3
B+ Tree 存储引擎关系型数据库 :页级缓存, B+ 树,索引组织表问题
索引数据量 > 内存:随机读取问题锁冲突结论: B+ Tree 存储引擎单机服务的数据量有限
NOSQL 解决方法减少索引量数据静态化,定期合并
4
随机读取存储引擎KV 系统:只支持随机读取优化方法:减少索引量实现思路
数据追加到磁盘文件内存中存放 key => 记录位置索引减少 key 占用的内存
对 key 求 md5对 key hash 后保留若干位,内存中一个 key 对应磁盘中若干
条记录,需要去重定期合并
参考系统: Bitcask
5
Merge-dump 存储引擎支持顺序读取和随机扫描静态数据 + 动态数据,定期合并,减少锁冲突解决随机写问题实现思路
数据先写入 MemtableMemtable 定期 dump 为 SSTable多个小 SSTable 不断合并生成大 SSTable ,减少随机读SSTable 只读,无锁,可使用 bloom filter 减少随机读
参考系统: Leveldb
6
NOSQL 存储引擎应用场景面向特定场景
随机读取一次写入,多次读取:搜索
增强单机服务能力,节省成本友好的分布式支持,如支持迁移部分而不是整个库的数据
7
从单机到多机
8
Hash 划分Hash 取模
Hash 模 N , N 为机器分组数机器增加删除, N 值变化,数据分布改变
Hash 分桶 对 key 取模后分到 Q 个桶中 Q 值与机器数无关,机器上下线数据分布不变 Hash 散列后数据划分天然均匀 实例: Tair 系统
9
连续块连续块
将表格按照 key 有序地划分为连续块 (start_key, end_key] 每个连续块类似 B+ Tree 的叶子节点 每个块的数据不均匀,需要动态分裂与合并 支持 scan 操作,但实现复杂 实例: Google Bigtable
10
同构系统同构系统
将机器分成 group ,每个 group 内的机器存放的数据完全相同 问题:数据迁移量太大,线上几乎无法成功; group 内部增加副本
也几乎不成功; 假设服务数据量 1TB ,内部传输带宽限制 20MB/s ,增加副本
的时间为 1TB / 20MB/s = 50000s ,大约 10 几个小时; 迁移过程中机器再次出现故障怎么办?
11
异构系统两层系统
文件系统层解决数据持久化问题,表格系统层解决服务问题 数据迁移瞬间完成 实例: Google Bigtable
动态数据与静态数据分离 动态数据量小,迁移瞬间完成; 静态数据不变化,迁移或 rebalance 与 GFS 类似; 实例: Taobao Oceanbase
12
SQL 与 NOSQL 融合
13
Why NOSQL?
大型公司解决特定存储难题,如大表 Join ,大数据量下(如 10TB )的全表
事务操作解决可扩展性问题,做到机器加入 / 删除自动化;解决 OLAP 分析型问题;集群规模大可节省成本;
中型公司解决特定问题,如引入 Redis 做读库而不是自己开发一套;精通关系型数据库的定制及优化的人员很少,人员成本较高;
Mysql Flashcache 优化;底层系统极限调优;数据库分库分表,自动切换 & 扩容中间层;
14
Google Megastore
底层为 Google Bigtable ,支持随机读取和顺序扫描;划分 entity group , entity group 内部实现 RDBMS 功
能, entity group之间弱关联获取可扩展性;事务: entity group 内部支持事务;索引: Local index + global index ;行式存储引擎( OLTP ) + 列式存储引擎( OLAP );
15
奇技淫巧
16
架构上的 Work Around
同构系统 内部网络减少数据复制时间 业务上历史数据静态化,如文档,图片上传类应用
分裂问题:手工或定期触发分裂 Facebook News Feed Analytics 广告统计系统单用户过大问题
多机写复杂性: Oceanbase前期采用单机写绕开 Paxos
Zookeeper 使用方式松耦合 机房内 Linux HA 自动切换,机房之间手工切换
17
实现技巧Group Commit主备强同步Skip List or 块链实现 copy-on-write Memtable内存管理:通用定长内存池 + 特定数据结构内存管理降低 Cache 锁粒度考虑宕机的情况下高效生成有序 ID任务区分优先级,对低优先级任务限速考虑宕机的情况下做到数据和索引文件的原子更新多机同步数据校验解决 fsync 不保证 commit log 记录持久化到磁盘的问题etc…
18