SlideShare une entreprise Scribd logo
1  sur  27
Télécharger pour lire hors ligne
LevelDB 学习交流-Part One


       2011.09.23
        淘宝解伦
OUTLINE
•   背景简介
•   代码组织
•   主体架构
•   读写特性
•   问题讨论
What Is LevelDB
• LevelDB is a fast key-value storage library written at Google
  that provides an ordered mapping from string keys to string
  values.
   – A Fast And Lightweight KV Storage Library , Not A DataBase


• Reference
   – http://code.google.com/p/leveldb/
   – http://leveldb.googlecode.com/svn/trunk/doc/index.html
   – http://leveldb.googlecode.com/svn/trunk/doc/impl.html
Three Tags
• NoSQL Movement
  – KV Store
• Open Source
  – New BSD License
• Made In Google
  – Authors
     • also develop GFSMapReduceBigtableProtocol Buffers
     • More Info
        – http://research.google.com/people/jeff
        – http://research.google.com/people/sanjay/
Birth for HTML5
• IndexedDB
  – HTML 5 客户端存储 Object storage
  – History: Cookies -> Web storage -> SQL Database
  – 已有执行标准之间妥协的产物
  – More Info
     • http://www.html5rocks.com/en/tutorials/indexeddb/to
       do/
     • http://nparashuram.com/ttd/IndexedDB/index.html
     • http://soft.chinabyte.com/database/270/11200270.sht
       ml
Leveldb Vs BigTable
• 关系和区别
   Compare           LevelDB            BigTable
Implement                    LSM Storage
Operation Mode   Embedded DB    DB Manage Server
Topology         One Machine    Distributed Server
Data Model       KV Store       Column Store
Schema           No Schema      Semi-Schema Free
Storage Category
• Embedded Store
  – DB: SQLite、BerkeleyDB、innondb
  – KV: tokyo/kyoto cabinet、riak bitcask
• Storage Server
  – RDBMS
  – NoSQL
     •   tc&tt、kc&kt 、flare
     •   bigtable、 habase、hypertable
     •   mongodb、couchdb、orientdb
     •   dynamo 、voldmort、 cassandra
     •   neo4j、flockdb
Source Code
Code Dir.
•   util---------common cache、crc、hash
•   port--------multiple os support
•   include----c/ c++ api
•   table------- block sstable reader/writer
                  block、sstable
•   db ----------memtable、commit log、snapshot、
    compaction
LevelDB Architecture
• Log Structured Merge Tree (LSM)
  1. 更新记Commit Log,写到in-memory table;
  2. Memory数据延迟落地到磁盘,不断打patch;
  3. 定期将磁盘数据sstable 在后台进行Compact.

  – 充分考虑磁盘的特性,将随机IO写变为顺序IO,牺
    牲随机读来优化写

  – Reference
    http://academic.research.microsoft.com/Paper/29987
    6.aspx
MEMTABLE
• Dynamic Data Struct
  – Order by (Key + Sequence)
  – frozen + active
  – Skiplist implemention
     • 写操作是insert到list,没有删除list node操作
     • 这种场景指针操作顺序保证单写多读线程安全
LOG
• Commit Log File Format
 FULL&FIRST      MIDDLE     LAST&Padding         FULL&FIRST     LAST&FULL




   – Fix length block Array                crc        size    type   data

        • Pros
              – 可以过滤出错记录,跳跃到正确的BLOCK
              – Find next FULL or FIRST type record
        • Cons
              – 不支持压缩存储,空间有少量浪费(trailer)
   – 每个定长block包含一条或者多条日志记录
SSTABLE
• Static Table File Format
                      Data Block
                                                    Table format
       key/value & shared_key+noshared key/value
                                                      Data block
                          …                               …
                 key/value & key/value                Data Block
                    Offset meta ??                   Meta Block
                                                   Meta index Block
   –   类HFile等sstable 格式
                                                   Data index Block
   –   Data Block内Key前缀压缩
                                                       Footer
   –   Block支持snappy 压缩存储
   –   只有一个meta block
COMPACTION
• Multiple Level Compaction
  – 此level 非彼level (skiplist)
  – Input + Output
     • Level 0: 无序多路归并
     • Level n: 有序两路归并
  – New数据从Level 0逐渐向Level N搬迁
  – 每层的新数据总量达到10^i时触发
  – 同一key的多次更新、部分删除被合并
Compaction Analogy
    BigTable                                 LevelDB
Minor Compaction   Memtable -> Level 0                 Level 0 Compaction
Merge Compaction   Level i + level i+1 -> Level i+1    Level 1 ~ N Compaction
Major Compaction   No


• Compaction BG Task
   • 属于IO密集型任务对于正常的随机顺序读有较大影响
   • 触发条件选择、带宽占比、速度控制都至关重要
Multi-Level Data
• Multi-level SSTable Data Layout
  – Level 内部
     • Level 0 sst 内部有序, sst之间无序,key有重叠
     • Level N sst内部有序, sst之间有序,key无重叠
  – Level 之间
     • 新旧数据,Patch关系
Write / Read
Write
• 顺序/随机写
 – 顺序记commit Log + 更新到active Memtable
 – 顺序写场景的compaction进行IO优化


• 纠结中权衡
 – LevelDB将随机写转为顺序写,牺牲了随机读性
   能的同时又利用策略控制写速率,甚至阻塞写
   以防止随机读latency太差。
Random Read
• 随机读
 – 从新到旧反向Read数据
  • 结合KV特点,短路式查询
  • Query Path: active_mem -> frozen_mem -> (last->first)
    Level 0 sst -> Level i sst -> Level i+1 sst
  • 最坏情况下需要Level + 1 次随机IO
  • 查询在range范围内并不存在的key很杯具
Sequential Read
• 顺序扫描
 – 2 Memtables + 多Level归并
   •   Level 0所有sstable,其他Level部分sstable归并
   •   大部分操作是对下层sstable数据的顺序扫描
   •   最坏情况下需要合并Memtable 和所有level的数据
   •   Level 0 sstable越多,level层次越多,性能越差 ?
ACID 特性
• 没有提供事务相关接口,需要上层封装
 – 原子性(Atomic)
   • Write Ahead Log
   • commit log要么成功,要么失败成为bad record
 – 一致性(Consistency)
       Consistency
   • Not Relational
 – 隔离性( Isolation )
 – 持久性(Durability)
   • 可配置的 sync方式 Not flush every write
ACID 特性
• 隔离性(Isolation)
 – 第三级隔离性可重复读
   • 先写log后更新Memtable未提交事务不会读到
   • 由sequence可以保证两次读Memtable一致性
   • 如何保证读写线程安全
     – 写写线程:由log writer condition锁控制
     – 读写静态数据无需同步
     – 读写动态数据主要包括
        » cache :多线程安全
        » memtable :单线程写多线程读
Cache & Arena
• Cache Sharding
  – 按key做分片,分片数固定
  – 每个分片是功能独立的cache (hashtable + LRU)
  – 在分片内部加锁降低锁冲突

• Memtable Arena
  – 内存池,只负责分配一次性回收
  – 定长 block + 变长的block 链表
     • 如需新block而待分配内存超过block_size/4时,直接分配
       相应大小的block
Performance
• Pros.                     • Cons.
  – 高性能的随机顺序写                   – 随机读性能没有优势
  – SSD性能优异,容易                  – 读写比率和频率需适用
    Scale Up                    – 大Value性能较差

  • More Info
     – http://leveldb.googlecode.com/svn/trunk/doc/benchm
       ark.html
     – https://github.com/m1ch1/mapkeeper/wiki/MySQL-
       vs.-LevelDB
     – http://blog.basho.com/2011/07/01/Leveling-the-Field/
LeveDB Discuss
• LevelDB 定位
  – IndexedDB是客户端存储
    • 胖客户端是趋势
    • 不关心内存管理
      – 只有Memtable 使用了Arena内存池
      – 怀疑会有类似Redis内存碎片问题
  – 互联网服务器应用是否适用
    • 用户对写性能并不敏感,对读操作延时相反
    • 而LSM牺牲了随机读的性能,但写盘方式适合SSD
    • SSD恰可弥补随机读性能问题
Optimize Discuss
• 关于优化的讨论
 – increase Memtable Size
    • 增加随机读命中memtable的概率
    • 减少level 0的文件数
       – 提高Scan顺序扫描以及compaction的多路归并性能
    • 降低compaction频率,降低对读稳定性影响
 – Log sync Strategy (Bad Record Skip)
 – Multiple Disk Support When Compaction
 – Add Bloom Filter as sstable size increase
 – Less Level for speed up Read
Acknowledgement



    Thanks!
欢迎指正讨论 @淘宝解伦

Contenu connexe

Tendances

My sql 5.6新特性深入剖析——innodb引擎
My sql 5.6新特性深入剖析——innodb引擎My sql 5.6新特性深入剖析——innodb引擎
My sql 5.6新特性深入剖析——innodb引擎frogd
 
InnoDB Transaction Lock and MVCC
InnoDB Transaction Lock and MVCCInnoDB Transaction Lock and MVCC
InnoDB Transaction Lock and MVCCfrogd
 
硬件体系架构浅析
硬件体系架构浅析硬件体系架构浅析
硬件体系架构浅析frogd
 
MySQL InnoDB 源码实现分析(一)
MySQL InnoDB 源码实现分析(一)MySQL InnoDB 源码实现分析(一)
MySQL InnoDB 源码实现分析(一)frogd
 
Oracle rac资源管理算法与cache fusion实现浅析
Oracle rac资源管理算法与cache fusion实现浅析Oracle rac资源管理算法与cache fusion实现浅析
Oracle rac资源管理算法与cache fusion实现浅析frogd
 
Building the Production Ready EB level Storage Product from Ceph - Dongmao Zhang
Building the Production Ready EB level Storage Product from Ceph - Dongmao ZhangBuilding the Production Ready EB level Storage Product from Ceph - Dongmao Zhang
Building the Production Ready EB level Storage Product from Ceph - Dongmao ZhangCeph Community
 
Cephfs架构解读和测试分析
Cephfs架构解读和测试分析Cephfs架构解读和测试分析
Cephfs架构解读和测试分析Yang Guanjun
 
Ftn存储设计
Ftn存储设计Ftn存储设计
Ftn存储设计gzterrytan
 
Database.Cache&Buffer&Lock
Database.Cache&Buffer&LockDatabase.Cache&Buffer&Lock
Database.Cache&Buffer&LockLixun Peng
 
NoSQL-MongoDB介紹
NoSQL-MongoDB介紹NoSQL-MongoDB介紹
NoSQL-MongoDB介紹國昭 張
 
redis 适用场景与实现
redis 适用场景与实现redis 适用场景与实现
redis 适用场景与实现iammutex
 
Hacking Nginx at Taobao
Hacking Nginx at TaobaoHacking Nginx at Taobao
Hacking Nginx at TaobaoJoshua Zhu
 
对MySQL的一些改进想法和实现
对MySQL的一些改进想法和实现对MySQL的一些改进想法和实现
对MySQL的一些改进想法和实现Lixun Peng
 
Bypat博客出品-服务器运维集群方法总结
Bypat博客出品-服务器运维集群方法总结Bypat博客出品-服务器运维集群方法总结
Bypat博客出品-服务器运维集群方法总结redhat9
 
應用Ceph技術打造軟體定義儲存新局
應用Ceph技術打造軟體定義儲存新局應用Ceph技術打造軟體定義儲存新局
應用Ceph技術打造軟體定義儲存新局Alex Lau
 
Concurrency model for mysql data processing@rubyconf.tw 2012
Concurrency model for mysql data processing@rubyconf.tw 2012Concurrency model for mysql data processing@rubyconf.tw 2012
Concurrency model for mysql data processing@rubyconf.tw 2012Mu-Fan Teng
 
百度系统部分布式系统介绍 马如悦 Sacc2010
百度系统部分布式系统介绍 马如悦 Sacc2010百度系统部分布式系统介绍 马如悦 Sacc2010
百度系统部分布式系统介绍 马如悦 Sacc2010Chuanying Du
 

Tendances (20)

My sql 5.6新特性深入剖析——innodb引擎
My sql 5.6新特性深入剖析——innodb引擎My sql 5.6新特性深入剖析——innodb引擎
My sql 5.6新特性深入剖析——innodb引擎
 
InnoDB Transaction Lock and MVCC
InnoDB Transaction Lock and MVCCInnoDB Transaction Lock and MVCC
InnoDB Transaction Lock and MVCC
 
硬件体系架构浅析
硬件体系架构浅析硬件体系架构浅析
硬件体系架构浅析
 
MySQL InnoDB 源码实现分析(一)
MySQL InnoDB 源码实现分析(一)MySQL InnoDB 源码实现分析(一)
MySQL InnoDB 源码实现分析(一)
 
Oracle rac资源管理算法与cache fusion实现浅析
Oracle rac资源管理算法与cache fusion实现浅析Oracle rac资源管理算法与cache fusion实现浅析
Oracle rac资源管理算法与cache fusion实现浅析
 
Building the Production Ready EB level Storage Product from Ceph - Dongmao Zhang
Building the Production Ready EB level Storage Product from Ceph - Dongmao ZhangBuilding the Production Ready EB level Storage Product from Ceph - Dongmao Zhang
Building the Production Ready EB level Storage Product from Ceph - Dongmao Zhang
 
Cephfs架构解读和测试分析
Cephfs架构解读和测试分析Cephfs架构解读和测试分析
Cephfs架构解读和测试分析
 
Ftn存储设计
Ftn存储设计Ftn存储设计
Ftn存储设计
 
Database.Cache&Buffer&Lock
Database.Cache&Buffer&LockDatabase.Cache&Buffer&Lock
Database.Cache&Buffer&Lock
 
Mesos intro
Mesos introMesos intro
Mesos intro
 
NoSQL-MongoDB介紹
NoSQL-MongoDB介紹NoSQL-MongoDB介紹
NoSQL-MongoDB介紹
 
redis 适用场景与实现
redis 适用场景与实现redis 适用场景与实现
redis 适用场景与实现
 
Hacking Nginx at Taobao
Hacking Nginx at TaobaoHacking Nginx at Taobao
Hacking Nginx at Taobao
 
对MySQL的一些改进想法和实现
对MySQL的一些改进想法和实现对MySQL的一些改进想法和实现
对MySQL的一些改进想法和实现
 
SMACK Dev Experience
SMACK Dev ExperienceSMACK Dev Experience
SMACK Dev Experience
 
Bypat博客出品-服务器运维集群方法总结
Bypat博客出品-服务器运维集群方法总结Bypat博客出品-服务器运维集群方法总结
Bypat博客出品-服务器运维集群方法总结
 
應用Ceph技術打造軟體定義儲存新局
應用Ceph技術打造軟體定義儲存新局應用Ceph技術打造軟體定義儲存新局
應用Ceph技術打造軟體定義儲存新局
 
Concurrency model for mysql data processing@rubyconf.tw 2012
Concurrency model for mysql data processing@rubyconf.tw 2012Concurrency model for mysql data processing@rubyconf.tw 2012
Concurrency model for mysql data processing@rubyconf.tw 2012
 
Ceph perf-tunning
Ceph perf-tunningCeph perf-tunning
Ceph perf-tunning
 
百度系统部分布式系统介绍 马如悦 Sacc2010
百度系统部分布式系统介绍 马如悦 Sacc2010百度系统部分布式系统介绍 马如悦 Sacc2010
百度系统部分布式系统介绍 马如悦 Sacc2010
 

En vedette

En vedette (18)

Level DB - Quick Cheat Sheet
Level DB - Quick Cheat SheetLevel DB - Quick Cheat Sheet
Level DB - Quick Cheat Sheet
 
Lsm
LsmLsm
Lsm
 
Five minuterule
Five minuteruleFive minuterule
Five minuterule
 
iOS + Rails
iOS + RailsiOS + Rails
iOS + Rails
 
Ocean base 破解数据库高可用难题
Ocean base 破解数据库高可用难题Ocean base 破解数据库高可用难题
Ocean base 破解数据库高可用难题
 
高可用性系统设计与实现
高可用性系统设计与实现高可用性系统设计与实现
高可用性系统设计与实现
 
OceanBase-破解数据库高可用难题
OceanBase-破解数据库高可用难题OceanBase-破解数据库高可用难题
OceanBase-破解数据库高可用难题
 
高可用性系统设计与实现
高可用性系统设计与实现高可用性系统设计与实现
高可用性系统设计与实现
 
BigTable PreReading
BigTable PreReadingBigTable PreReading
BigTable PreReading
 
百度消息队列设计和实现总结
百度消息队列设计和实现总结百度消息队列设计和实现总结
百度消息队列设计和实现总结
 
Leveled compaction
Leveled compactionLeveled compaction
Leveled compaction
 
涨客资,用推策 推策产品介绍
涨客资,用推策 推策产品介绍涨客资,用推策 推策产品介绍
涨客资,用推策 推策产品介绍
 
Bigtable
BigtableBigtable
Bigtable
 
The Anatomy Of The Google Architecture Fina Lv1.1
The Anatomy Of The Google Architecture Fina Lv1.1The Anatomy Of The Google Architecture Fina Lv1.1
The Anatomy Of The Google Architecture Fina Lv1.1
 
Baidu
BaiduBaidu
Baidu
 
The Missing Manual for Leveled Compaction Strategy (Wei Deng & Ryan Svihla, D...
The Missing Manual for Leveled Compaction Strategy (Wei Deng & Ryan Svihla, D...The Missing Manual for Leveled Compaction Strategy (Wei Deng & Ryan Svihla, D...
The Missing Manual for Leveled Compaction Strategy (Wei Deng & Ryan Svihla, D...
 
GOOGLE BIGTABLE
GOOGLE BIGTABLEGOOGLE BIGTABLE
GOOGLE BIGTABLE
 
The Google Bigtable
The Google BigtableThe Google Bigtable
The Google Bigtable
 

Similaire à Google LevelDB Study Discuss

浅谈电商网站数据访问层(DAL)与 ORM 之适用性
浅谈电商网站数据访问层(DAL)与 ORM 之适用性浅谈电商网站数据访问层(DAL)与 ORM 之适用性
浅谈电商网站数据访问层(DAL)与 ORM 之适用性Xuefeng Zhang
 
大规模网站架构
大规模网站架构大规模网站架构
大规模网站架构drewz lin
 
Mysql调优
Mysql调优Mysql调优
Mysql调优ken shin
 
浅谈 My sql 性能调优
浅谈 My sql 性能调优浅谈 My sql 性能调优
浅谈 My sql 性能调优thinkinlamp
 
MySQL应用优化实践
MySQL应用优化实践MySQL应用优化实践
MySQL应用优化实践mysqlops
 
Nosql三步曲
Nosql三步曲Nosql三步曲
Nosql三步曲84zhu
 
基于My sql的分布式数据库实践
基于My sql的分布式数据库实践基于My sql的分布式数据库实践
基于My sql的分布式数据库实践锐 张
 
基于MySQL的分布式数据库实践
基于MySQL的分布式数据库实践基于MySQL的分布式数据库实践
基于MySQL的分布式数据库实践jackbillow
 
诗檀软件 Oracle开发优化基础
诗檀软件 Oracle开发优化基础 诗檀软件 Oracle开发优化基础
诗檀软件 Oracle开发优化基础 maclean liu
 
分布式缓存与队列
分布式缓存与队列分布式缓存与队列
分布式缓存与队列XiaoJun Hong
 
分布式Key-value漫谈
分布式Key-value漫谈分布式Key-value漫谈
分布式Key-value漫谈lovingprince58
 
Exadata那点事
Exadata那点事Exadata那点事
Exadata那点事freezr
 
大型网站架构的发展
大型网站架构的发展大型网站架构的发展
大型网站架构的发展drewz lin
 
大型网站架构的发展
大型网站架构的发展大型网站架构的发展
大型网站架构的发展Hesey
 
对MySQL应用的一些总结
对MySQL应用的一些总结对MySQL应用的一些总结
对MySQL应用的一些总结Lixun Peng
 
百度前端技术交流会--搜搜前端架构演变与优化
百度前端技术交流会--搜搜前端架构演变与优化百度前端技术交流会--搜搜前端架构演变与优化
百度前端技术交流会--搜搜前端架构演变与优化tiantianli
 
[Baidu web frontend_conference_2010]_[soso_frontend_architecture]
[Baidu web frontend_conference_2010]_[soso_frontend_architecture][Baidu web frontend_conference_2010]_[soso_frontend_architecture]
[Baidu web frontend_conference_2010]_[soso_frontend_architecture]思念 青青
 
H base 使用初体验
H base 使用初体验H base 使用初体验
H base 使用初体验兴 施
 
新时代的分析型云数据库 Greenplum
新时代的分析型云数据库 Greenplum新时代的分析型云数据库 Greenplum
新时代的分析型云数据库 Greenplum锐 张
 

Similaire à Google LevelDB Study Discuss (20)

浅谈电商网站数据访问层(DAL)与 ORM 之适用性
浅谈电商网站数据访问层(DAL)与 ORM 之适用性浅谈电商网站数据访问层(DAL)与 ORM 之适用性
浅谈电商网站数据访问层(DAL)与 ORM 之适用性
 
大规模网站架构
大规模网站架构大规模网站架构
大规模网站架构
 
Mysql调优
Mysql调优Mysql调优
Mysql调优
 
浅谈 My sql 性能调优
浅谈 My sql 性能调优浅谈 My sql 性能调优
浅谈 My sql 性能调优
 
MySQL应用优化实践
MySQL应用优化实践MySQL应用优化实践
MySQL应用优化实践
 
Nosql三步曲
Nosql三步曲Nosql三步曲
Nosql三步曲
 
基于My sql的分布式数据库实践
基于My sql的分布式数据库实践基于My sql的分布式数据库实践
基于My sql的分布式数据库实践
 
基于MySQL的分布式数据库实践
基于MySQL的分布式数据库实践基于MySQL的分布式数据库实践
基于MySQL的分布式数据库实践
 
诗檀软件 Oracle开发优化基础
诗檀软件 Oracle开发优化基础 诗檀软件 Oracle开发优化基础
诗檀软件 Oracle开发优化基础
 
分布式缓存与队列
分布式缓存与队列分布式缓存与队列
分布式缓存与队列
 
分布式Key-value漫谈
分布式Key-value漫谈分布式Key-value漫谈
分布式Key-value漫谈
 
Exadata那点事
Exadata那点事Exadata那点事
Exadata那点事
 
Ibm solid db_基础
Ibm solid db_基础Ibm solid db_基础
Ibm solid db_基础
 
大型网站架构的发展
大型网站架构的发展大型网站架构的发展
大型网站架构的发展
 
大型网站架构的发展
大型网站架构的发展大型网站架构的发展
大型网站架构的发展
 
对MySQL应用的一些总结
对MySQL应用的一些总结对MySQL应用的一些总结
对MySQL应用的一些总结
 
百度前端技术交流会--搜搜前端架构演变与优化
百度前端技术交流会--搜搜前端架构演变与优化百度前端技术交流会--搜搜前端架构演变与优化
百度前端技术交流会--搜搜前端架构演变与优化
 
[Baidu web frontend_conference_2010]_[soso_frontend_architecture]
[Baidu web frontend_conference_2010]_[soso_frontend_architecture][Baidu web frontend_conference_2010]_[soso_frontend_architecture]
[Baidu web frontend_conference_2010]_[soso_frontend_architecture]
 
H base 使用初体验
H base 使用初体验H base 使用初体验
H base 使用初体验
 
新时代的分析型云数据库 Greenplum
新时代的分析型云数据库 Greenplum新时代的分析型云数据库 Greenplum
新时代的分析型云数据库 Greenplum
 

Google LevelDB Study Discuss

  • 1. LevelDB 学习交流-Part One 2011.09.23 淘宝解伦
  • 2. OUTLINE • 背景简介 • 代码组织 • 主体架构 • 读写特性 • 问题讨论
  • 3. What Is LevelDB • LevelDB is a fast key-value storage library written at Google that provides an ordered mapping from string keys to string values. – A Fast And Lightweight KV Storage Library , Not A DataBase • Reference – http://code.google.com/p/leveldb/ – http://leveldb.googlecode.com/svn/trunk/doc/index.html – http://leveldb.googlecode.com/svn/trunk/doc/impl.html
  • 4. Three Tags • NoSQL Movement – KV Store • Open Source – New BSD License • Made In Google – Authors • also develop GFSMapReduceBigtableProtocol Buffers • More Info – http://research.google.com/people/jeff – http://research.google.com/people/sanjay/
  • 5. Birth for HTML5 • IndexedDB – HTML 5 客户端存储 Object storage – History: Cookies -> Web storage -> SQL Database – 已有执行标准之间妥协的产物 – More Info • http://www.html5rocks.com/en/tutorials/indexeddb/to do/ • http://nparashuram.com/ttd/IndexedDB/index.html • http://soft.chinabyte.com/database/270/11200270.sht ml
  • 6. Leveldb Vs BigTable • 关系和区别 Compare LevelDB BigTable Implement LSM Storage Operation Mode Embedded DB DB Manage Server Topology One Machine Distributed Server Data Model KV Store Column Store Schema No Schema Semi-Schema Free
  • 7. Storage Category • Embedded Store – DB: SQLite、BerkeleyDB、innondb – KV: tokyo/kyoto cabinet、riak bitcask • Storage Server – RDBMS – NoSQL • tc&tt、kc&kt 、flare • bigtable、 habase、hypertable • mongodb、couchdb、orientdb • dynamo 、voldmort、 cassandra • neo4j、flockdb
  • 9. Code Dir. • util---------common cache、crc、hash • port--------multiple os support • include----c/ c++ api • table------- block sstable reader/writer block、sstable • db ----------memtable、commit log、snapshot、 compaction
  • 10. LevelDB Architecture • Log Structured Merge Tree (LSM) 1. 更新记Commit Log,写到in-memory table; 2. Memory数据延迟落地到磁盘,不断打patch; 3. 定期将磁盘数据sstable 在后台进行Compact. – 充分考虑磁盘的特性,将随机IO写变为顺序IO,牺 牲随机读来优化写 – Reference http://academic.research.microsoft.com/Paper/29987 6.aspx
  • 11. MEMTABLE • Dynamic Data Struct – Order by (Key + Sequence) – frozen + active – Skiplist implemention • 写操作是insert到list,没有删除list node操作 • 这种场景指针操作顺序保证单写多读线程安全
  • 12. LOG • Commit Log File Format FULL&FIRST MIDDLE LAST&Padding FULL&FIRST LAST&FULL – Fix length block Array crc size type data • Pros – 可以过滤出错记录,跳跃到正确的BLOCK – Find next FULL or FIRST type record • Cons – 不支持压缩存储,空间有少量浪费(trailer) – 每个定长block包含一条或者多条日志记录
  • 13. SSTABLE • Static Table File Format Data Block Table format key/value & shared_key+noshared key/value Data block … … key/value & key/value Data Block Offset meta ?? Meta Block Meta index Block – 类HFile等sstable 格式 Data index Block – Data Block内Key前缀压缩 Footer – Block支持snappy 压缩存储 – 只有一个meta block
  • 14. COMPACTION • Multiple Level Compaction – 此level 非彼level (skiplist) – Input + Output • Level 0: 无序多路归并 • Level n: 有序两路归并 – New数据从Level 0逐渐向Level N搬迁 – 每层的新数据总量达到10^i时触发 – 同一key的多次更新、部分删除被合并
  • 15. Compaction Analogy BigTable LevelDB Minor Compaction Memtable -> Level 0 Level 0 Compaction Merge Compaction Level i + level i+1 -> Level i+1 Level 1 ~ N Compaction Major Compaction No • Compaction BG Task • 属于IO密集型任务对于正常的随机顺序读有较大影响 • 触发条件选择、带宽占比、速度控制都至关重要
  • 16. Multi-Level Data • Multi-level SSTable Data Layout – Level 内部 • Level 0 sst 内部有序, sst之间无序,key有重叠 • Level N sst内部有序, sst之间有序,key无重叠 – Level 之间 • 新旧数据,Patch关系
  • 18. Write • 顺序/随机写 – 顺序记commit Log + 更新到active Memtable – 顺序写场景的compaction进行IO优化 • 纠结中权衡 – LevelDB将随机写转为顺序写,牺牲了随机读性 能的同时又利用策略控制写速率,甚至阻塞写 以防止随机读latency太差。
  • 19. Random Read • 随机读 – 从新到旧反向Read数据 • 结合KV特点,短路式查询 • Query Path: active_mem -> frozen_mem -> (last->first) Level 0 sst -> Level i sst -> Level i+1 sst • 最坏情况下需要Level + 1 次随机IO • 查询在range范围内并不存在的key很杯具
  • 20. Sequential Read • 顺序扫描 – 2 Memtables + 多Level归并 • Level 0所有sstable,其他Level部分sstable归并 • 大部分操作是对下层sstable数据的顺序扫描 • 最坏情况下需要合并Memtable 和所有level的数据 • Level 0 sstable越多,level层次越多,性能越差 ?
  • 21. ACID 特性 • 没有提供事务相关接口,需要上层封装 – 原子性(Atomic) • Write Ahead Log • commit log要么成功,要么失败成为bad record – 一致性(Consistency) Consistency • Not Relational – 隔离性( Isolation ) – 持久性(Durability) • 可配置的 sync方式 Not flush every write
  • 22. ACID 特性 • 隔离性(Isolation) – 第三级隔离性可重复读 • 先写log后更新Memtable未提交事务不会读到 • 由sequence可以保证两次读Memtable一致性 • 如何保证读写线程安全 – 写写线程:由log writer condition锁控制 – 读写静态数据无需同步 – 读写动态数据主要包括 » cache :多线程安全 » memtable :单线程写多线程读
  • 23. Cache & Arena • Cache Sharding – 按key做分片,分片数固定 – 每个分片是功能独立的cache (hashtable + LRU) – 在分片内部加锁降低锁冲突 • Memtable Arena – 内存池,只负责分配一次性回收 – 定长 block + 变长的block 链表 • 如需新block而待分配内存超过block_size/4时,直接分配 相应大小的block
  • 24. Performance • Pros. • Cons. – 高性能的随机顺序写 – 随机读性能没有优势 – SSD性能优异,容易 – 读写比率和频率需适用 Scale Up – 大Value性能较差 • More Info – http://leveldb.googlecode.com/svn/trunk/doc/benchm ark.html – https://github.com/m1ch1/mapkeeper/wiki/MySQL- vs.-LevelDB – http://blog.basho.com/2011/07/01/Leveling-the-Field/
  • 25. LeveDB Discuss • LevelDB 定位 – IndexedDB是客户端存储 • 胖客户端是趋势 • 不关心内存管理 – 只有Memtable 使用了Arena内存池 – 怀疑会有类似Redis内存碎片问题 – 互联网服务器应用是否适用 • 用户对写性能并不敏感,对读操作延时相反 • 而LSM牺牲了随机读的性能,但写盘方式适合SSD • SSD恰可弥补随机读性能问题
  • 26. Optimize Discuss • 关于优化的讨论 – increase Memtable Size • 增加随机读命中memtable的概率 • 减少level 0的文件数 – 提高Scan顺序扫描以及compaction的多路归并性能 • 降低compaction频率,降低对读稳定性影响 – Log sync Strategy (Bad Record Skip) – Multiple Disk Support When Compaction – Add Bloom Filter as sstable size increase – Less Level for speed up Read
  • 27. Acknowledgement Thanks! 欢迎指正讨论 @淘宝解伦