qcon 2011:beansdb 的设计与实现
DESCRIPTION
QCon 上的演讲: Beansdb 的设计与实现TRANSCRIPT
![Page 1: Qcon 2011:Beansdb 的设计与实现](https://reader030.vdocuments.site/reader030/viewer/2022020709/555c3bddd8b42a2c068b4a1f/html5/thumbnails/1.jpg)
BeansDB 设计与实现
2011/4/8
11年4月8日星期五
![Page 2: Qcon 2011:Beansdb 的设计与实现](https://reader030.vdocuments.site/reader030/viewer/2022020709/555c3bddd8b42a2c068b4a1f/html5/thumbnails/2.jpg)
•需求•设计•实现•回顾
11年4月8日星期五
![Page 3: Qcon 2011:Beansdb 的设计与实现](https://reader030.vdocuments.site/reader030/viewer/2022020709/555c3bddd8b42a2c068b4a1f/html5/thumbnails/3.jpg)
产品需求
11年4月8日星期五
![Page 4: Qcon 2011:Beansdb 的设计与实现](https://reader030.vdocuments.site/reader030/viewer/2022020709/555c3bddd8b42a2c068b4a1f/html5/thumbnails/4.jpg)
产品需求•图片• 头像,个人相册, 图片墙
• 电台单曲
11年4月8日星期五
![Page 5: Qcon 2011:Beansdb 的设计与实现](https://reader030.vdocuments.site/reader030/viewer/2022020709/555c3bddd8b42a2c068b4a1f/html5/thumbnails/5.jpg)
产品需求•图片• 头像,个人相册, 图片墙
• 电台单曲•长文本• 评论,日记,作品,博客, 小组话题
• 用户属性, 条目属性
11年4月8日星期五
![Page 6: Qcon 2011:Beansdb 的设计与实现](https://reader030.vdocuments.site/reader030/viewer/2022020709/555c3bddd8b42a2c068b4a1f/html5/thumbnails/6.jpg)
技术需求
11年4月8日星期五
![Page 7: Qcon 2011:Beansdb 的设计与实现](https://reader030.vdocuments.site/reader030/viewer/2022020709/555c3bddd8b42a2c068b4a1f/html5/thumbnails/7.jpg)
技术需求•存储大量小文件(字段)
11年4月8日星期五
![Page 8: Qcon 2011:Beansdb 的设计与实现](https://reader030.vdocuments.site/reader030/viewer/2022020709/555c3bddd8b42a2c068b4a1f/html5/thumbnails/8.jpg)
技术需求•存储大量小文件(字段)
•可扩展性
11年4月8日星期五
![Page 9: Qcon 2011:Beansdb 的设计与实现](https://reader030.vdocuments.site/reader030/viewer/2022020709/555c3bddd8b42a2c068b4a1f/html5/thumbnails/9.jpg)
技术需求•存储大量小文件(字段)
•可扩展性•可靠性
11年4月8日星期五
![Page 10: Qcon 2011:Beansdb 的设计与实现](https://reader030.vdocuments.site/reader030/viewer/2022020709/555c3bddd8b42a2c068b4a1f/html5/thumbnails/10.jpg)
技术需求•存储大量小文件(字段)
•可扩展性•可靠性•可用性
11年4月8日星期五
![Page 11: Qcon 2011:Beansdb 的设计与实现](https://reader030.vdocuments.site/reader030/viewer/2022020709/555c3bddd8b42a2c068b4a1f/html5/thumbnails/11.jpg)
技术需求•存储大量小文件(字段)
•可扩展性•可靠性•可用性•一致性
11年4月8日星期五
![Page 12: Qcon 2011:Beansdb 的设计与实现](https://reader030.vdocuments.site/reader030/viewer/2022020709/555c3bddd8b42a2c068b4a1f/html5/thumbnails/12.jpg)
技术需求•存储大量小文件(字段)
•可扩展性•可靠性•可用性•一致性•低成本
11年4月8日星期五
![Page 13: Qcon 2011:Beansdb 的设计与实现](https://reader030.vdocuments.site/reader030/viewer/2022020709/555c3bddd8b42a2c068b4a1f/html5/thumbnails/13.jpg)
两个原则
11年4月8日星期五
![Page 14: Qcon 2011:Beansdb 的设计与实现](https://reader030.vdocuments.site/reader030/viewer/2022020709/555c3bddd8b42a2c068b4a1f/html5/thumbnails/14.jpg)
两个原则
•KISS
11年4月8日星期五
![Page 15: Qcon 2011:Beansdb 的设计与实现](https://reader030.vdocuments.site/reader030/viewer/2022020709/555c3bddd8b42a2c068b4a1f/html5/thumbnails/15.jpg)
两个原则
•KISS
•尽量复用开源方案
11年4月8日星期五
![Page 16: Qcon 2011:Beansdb 的设计与实现](https://reader030.vdocuments.site/reader030/viewer/2022020709/555c3bddd8b42a2c068b4a1f/html5/thumbnails/16.jpg)
初步方案
11年4月8日星期五
![Page 17: Qcon 2011:Beansdb 的设计与实现](https://reader030.vdocuments.site/reader030/viewer/2022020709/555c3bddd8b42a2c068b4a1f/html5/thumbnails/17.jpg)
初步方案•存储大量小文件• key/value, get/set/delete
• hash, bucket
11年4月8日星期五
![Page 18: Qcon 2011:Beansdb 的设计与实现](https://reader030.vdocuments.site/reader030/viewer/2022020709/555c3bddd8b42a2c068b4a1f/html5/thumbnails/18.jpg)
初步方案•存储大量小文件• key/value, get/set/delete
• hash, bucket
•可扩展性• 独立存储节点,独立数据目录
• bucket 扩展
11年4月8日星期五
![Page 19: Qcon 2011:Beansdb 的设计与实现](https://reader030.vdocuments.site/reader030/viewer/2022020709/555c3bddd8b42a2c068b4a1f/html5/thumbnails/19.jpg)
Node1 Node2 Node3 Node4
get b
Clients
set a
初步方案
11年4月8日星期五
![Page 20: Qcon 2011:Beansdb 的设计与实现](https://reader030.vdocuments.site/reader030/viewer/2022020709/555c3bddd8b42a2c068b4a1f/html5/thumbnails/20.jpg)
深入设计
11年4月8日星期五
![Page 21: Qcon 2011:Beansdb 的设计与实现](https://reader030.vdocuments.site/reader030/viewer/2022020709/555c3bddd8b42a2c068b4a1f/html5/thumbnails/21.jpg)
深入设计•可靠性• 多机冗余(N=3)
• 同步写, 依次读
11年4月8日星期五
![Page 22: Qcon 2011:Beansdb 的设计与实现](https://reader030.vdocuments.site/reader030/viewer/2022020709/555c3bddd8b42a2c068b4a1f/html5/thumbnails/22.jpg)
深入设计•可靠性• 多机冗余(N=3)
• 同步写, 依次读
•一致性• 最终一致性• Hash Tree 同步 (外部脚本)
• 冲突: 独立版本号+更新时间
11年4月8日星期五
![Page 23: Qcon 2011:Beansdb 的设计与实现](https://reader030.vdocuments.site/reader030/viewer/2022020709/555c3bddd8b42a2c068b4a1f/html5/thumbnails/23.jpg)
Proxy 1
Node1 Node2 Node3 Node4
Clients
11年4月8日星期五
![Page 24: Qcon 2011:Beansdb 的设计与实现](https://reader030.vdocuments.site/reader030/viewer/2022020709/555c3bddd8b42a2c068b4a1f/html5/thumbnails/24.jpg)
Proxy 1
Node1 Node2 Node3 Node4
set a
Clients
11年4月8日星期五
![Page 25: Qcon 2011:Beansdb 的设计与实现](https://reader030.vdocuments.site/reader030/viewer/2022020709/555c3bddd8b42a2c068b4a1f/html5/thumbnails/25.jpg)
Proxy 1
Node1 Node2 Node3 Node4
set a
Clients
get b
11年4月8日星期五
![Page 26: Qcon 2011:Beansdb 的设计与实现](https://reader030.vdocuments.site/reader030/viewer/2022020709/555c3bddd8b42a2c068b4a1f/html5/thumbnails/26.jpg)
Sync with HT
Proxy 1
Node1 Node2 Node3 Node4
set a
Clients
get b
11年4月8日星期五
![Page 27: Qcon 2011:Beansdb 的设计与实现](https://reader030.vdocuments.site/reader030/viewer/2022020709/555c3bddd8b42a2c068b4a1f/html5/thumbnails/27.jpg)
Sync with HT
Proxy 1
Node1 Node2 Node3 Node4
set a
Clients
get bNode5
11年4月8日星期五
![Page 28: Qcon 2011:Beansdb 的设计与实现](https://reader030.vdocuments.site/reader030/viewer/2022020709/555c3bddd8b42a2c068b4a1f/html5/thumbnails/28.jpg)
Sync with HT
Proxy 1
Node1 Node2 Node3 Node4
set a
Clients
get bNode5
11年4月8日星期五
![Page 29: Qcon 2011:Beansdb 的设计与实现](https://reader030.vdocuments.site/reader030/viewer/2022020709/555c3bddd8b42a2c068b4a1f/html5/thumbnails/29.jpg)
Sync with HT
Proxy 1
Node1 Node2 Node3 Node4
set a
Clients
get bNode5
Sync
11年4月8日星期五
![Page 30: Qcon 2011:Beansdb 的设计与实现](https://reader030.vdocuments.site/reader030/viewer/2022020709/555c3bddd8b42a2c068b4a1f/html5/thumbnails/30.jpg)
Sync with HT
Proxy 1
Node1 Node2 Node3 Node4
set a
Clients
get bNode5
Sync
11年4月8日星期五
![Page 31: Qcon 2011:Beansdb 的设计与实现](https://reader030.vdocuments.site/reader030/viewer/2022020709/555c3bddd8b42a2c068b4a1f/html5/thumbnails/31.jpg)
Sync with HT
Proxy 1
Node1 Node2 Node3 Node4
set a
Clients
get bNode5
Sync
11年4月8日星期五
![Page 32: Qcon 2011:Beansdb 的设计与实现](https://reader030.vdocuments.site/reader030/viewer/2022020709/555c3bddd8b42a2c068b4a1f/html5/thumbnails/32.jpg)
存储节点实现
11年4月8日星期五
![Page 33: Qcon 2011:Beansdb 的设计与实现](https://reader030.vdocuments.site/reader030/viewer/2022020709/555c3bddd8b42a2c068b4a1f/html5/thumbnails/33.jpg)
存储节点实现•Key/Value存储引擎
• ACID(宽松)
11年4月8日星期五
![Page 34: Qcon 2011:Beansdb 的设计与实现](https://reader030.vdocuments.site/reader030/viewer/2022020709/555c3bddd8b42a2c068b4a1f/html5/thumbnails/34.jpg)
存储节点实现•Key/Value存储引擎
• ACID(宽松)
•网络协议• memcache 协议
11年4月8日星期五
![Page 35: Qcon 2011:Beansdb 的设计与实现](https://reader030.vdocuments.site/reader030/viewer/2022020709/555c3bddd8b42a2c068b4a1f/html5/thumbnails/35.jpg)
存储节点实现•Key/Value存储引擎
• ACID(宽松)
•网络协议• memcache 协议
•同步接口• Hash Tree(哈希树)
11年4月8日星期五
![Page 36: Qcon 2011:Beansdb 的设计与实现](https://reader030.vdocuments.site/reader030/viewer/2022020709/555c3bddd8b42a2c068b4a1f/html5/thumbnails/36.jpg)
存储节点实现•Key/Value存储引擎
• ACID(宽松)
•网络协议• memcache 协议
•同步接口• Hash Tree(哈希树)
•多线程模型11年4月8日星期五
![Page 37: Qcon 2011:Beansdb 的设计与实现](https://reader030.vdocuments.site/reader030/viewer/2022020709/555c3bddd8b42a2c068b4a1f/html5/thumbnails/37.jpg)
存储引擎
11年4月8日星期五
![Page 38: Qcon 2011:Beansdb 的设计与实现](https://reader030.vdocuments.site/reader030/viewer/2022020709/555c3bddd8b42a2c068b4a1f/html5/thumbnails/38.jpg)
存储引擎•Tokyo Cabinet
• 简单, 轻量, 小数据时性能不错
• crash, 大数据量时性能不好
11年4月8日星期五
![Page 39: Qcon 2011:Beansdb 的设计与实现](https://reader030.vdocuments.site/reader030/viewer/2022020709/555c3bddd8b42a2c068b4a1f/html5/thumbnails/39.jpg)
存储引擎•Tokyo Cabinet
• 简单, 轻量, 小数据时性能不错
• crash, 大数据量时性能不好
•Berkeley DB
• 过重, 存储稍大的文件性能不好
11年4月8日星期五
![Page 40: Qcon 2011:Beansdb 的设计与实现](https://reader030.vdocuments.site/reader030/viewer/2022020709/555c3bddd8b42a2c068b4a1f/html5/thumbnails/40.jpg)
存储引擎•Tokyo Cabinet
• 简单, 轻量, 小数据时性能不错
• crash, 大数据量时性能不好
•Berkeley DB
• 过重, 存储稍大的文件性能不好
•Bitcask
• 内存索引 + 日志结构数据文件
11年4月8日星期五
![Page 41: Qcon 2011:Beansdb 的设计与实现](https://reader030.vdocuments.site/reader030/viewer/2022020709/555c3bddd8b42a2c068b4a1f/html5/thumbnails/41.jpg)
Bitcask
内存索引
数据格式
追加写入
11年4月8日星期五
![Page 42: Qcon 2011:Beansdb 的设计与实现](https://reader030.vdocuments.site/reader030/viewer/2022020709/555c3bddd8b42a2c068b4a1f/html5/thumbnails/42.jpg)
Bitcask
内存索引
数据格式
追加写入
hint
11年4月8日星期五
![Page 43: Qcon 2011:Beansdb 的设计与实现](https://reader030.vdocuments.site/reader030/viewer/2022020709/555c3bddd8b42a2c068b4a1f/html5/thumbnails/43.jpg)
优化Bitcask
11年4月8日星期五
![Page 44: Qcon 2011:Beansdb 的设计与实现](https://reader030.vdocuments.site/reader030/viewer/2022020709/555c3bddd8b42a2c068b4a1f/html5/thumbnails/44.jpg)
优化Bitcask•每bucket一个Bitcask
11年4月8日星期五
![Page 45: Qcon 2011:Beansdb 的设计与实现](https://reader030.vdocuments.site/reader030/viewer/2022020709/555c3bddd8b42a2c068b4a1f/html5/thumbnails/45.jpg)
优化Bitcask•每bucket一个Bitcask
•数据空间• 256 对齐, 最多256个, 自动压缩
• 在线GC, 外部控制
11年4月8日星期五
![Page 46: Qcon 2011:Beansdb 的设计与实现](https://reader030.vdocuments.site/reader030/viewer/2022020709/555c3bddd8b42a2c068b4a1f/html5/thumbnails/46.jpg)
优化Bitcask•每bucket一个Bitcask
•数据空间• 256 对齐, 最多256个, 自动压缩
• 在线GC, 外部控制
•启动时间• hint 文件, QuickLZ L3压缩
• 多线程11年4月8日星期五
![Page 47: Qcon 2011:Beansdb 的设计与实现](https://reader030.vdocuments.site/reader030/viewer/2022020709/555c3bddd8b42a2c068b4a1f/html5/thumbnails/47.jpg)
Hash Tree
0
key1key2key3key4
1
2
3
e
f
0
Bucket 0
KeyVersionHash
PositionHash(Key) = 0x02f93fea
Node
HashCount
0
1
Root
11年4月8日星期五
![Page 48: Qcon 2011:Beansdb 的设计与实现](https://reader030.vdocuments.site/reader030/viewer/2022020709/555c3bddd8b42a2c068b4a1f/html5/thumbnails/48.jpg)
Hash Tree优化
11年4月8日星期五
![Page 49: Qcon 2011:Beansdb 的设计与实现](https://reader030.vdocuments.site/reader030/viewer/2022020709/555c3bddd8b42a2c068b4a1f/html5/thumbnails/49.jpg)
Hash Tree优化•Hash Table
11年4月8日星期五
![Page 50: Qcon 2011:Beansdb 的设计与实现](https://reader030.vdocuments.site/reader030/viewer/2022020709/555c3bddd8b42a2c068b4a1f/html5/thumbnails/50.jpg)
Hash Tree优化•Hash Table
•Node, Item 连续存放
• {1}{16}{256}
• {Size, Count, [{Ver, Hash, Pos, Key}, ....]
• 128 个自动分裂
11年4月8日星期五
![Page 51: Qcon 2011:Beansdb 的设计与实现](https://reader030.vdocuments.site/reader030/viewer/2022020709/555c3bddd8b42a2c068b4a1f/html5/thumbnails/51.jpg)
Hash Tree优化•Hash Table
•Node, Item 连续存放
• {1}{16}{256}
• {Size, Count, [{Ver, Hash, Pos, Key}, ....]
• 128 个自动分裂
•重新编码key
• /topic/1234567/body=>{/topic/%d/body, 123}
11年4月8日星期五
![Page 52: Qcon 2011:Beansdb 的设计与实现](https://reader030.vdocuments.site/reader030/viewer/2022020709/555c3bddd8b42a2c068b4a1f/html5/thumbnails/52.jpg)
同步过程节点 A
节点 B
客户端时间
11年4月8日星期五
![Page 53: Qcon 2011:Beansdb 的设计与实现](https://reader030.vdocuments.site/reader030/viewer/2022020709/555c3bddd8b42a2c068b4a1f/html5/thumbnails/53.jpg)
同步过程
V1
V1
Set
节点 A
节点 B
客户端时间
11年4月8日星期五
![Page 54: Qcon 2011:Beansdb 的设计与实现](https://reader030.vdocuments.site/reader030/viewer/2022020709/555c3bddd8b42a2c068b4a1f/html5/thumbnails/54.jpg)
同步过程
V1
V1
Set
节点 A
节点 B
客户端时间
V1
11年4月8日星期五
![Page 55: Qcon 2011:Beansdb 的设计与实现](https://reader030.vdocuments.site/reader030/viewer/2022020709/555c3bddd8b42a2c068b4a1f/html5/thumbnails/55.jpg)
同步过程
V2
Set
V1
V1
Set
节点 A
节点 B
客户端时间
V1
11年4月8日星期五
![Page 56: Qcon 2011:Beansdb 的设计与实现](https://reader030.vdocuments.site/reader030/viewer/2022020709/555c3bddd8b42a2c068b4a1f/html5/thumbnails/56.jpg)
同步过程
Sync
V2
V2
Set
V1
V1
Set
节点 A
节点 B
客户端时间
V1
11年4月8日星期五
![Page 57: Qcon 2011:Beansdb 的设计与实现](https://reader030.vdocuments.site/reader030/viewer/2022020709/555c3bddd8b42a2c068b4a1f/html5/thumbnails/57.jpg)
同步过程
Sync
V2
V2
Set
V1
V1
Set
节点 A
节点 B
客户端时间
V1
V2
11年4月8日星期五
![Page 58: Qcon 2011:Beansdb 的设计与实现](https://reader030.vdocuments.site/reader030/viewer/2022020709/555c3bddd8b42a2c068b4a1f/html5/thumbnails/58.jpg)
同步过程
Sync
V2
V2
Set
V1
V1
Set
节点 A
节点 B
客户端时间
Get
V1
V2
11年4月8日星期五
![Page 59: Qcon 2011:Beansdb 的设计与实现](https://reader030.vdocuments.site/reader030/viewer/2022020709/555c3bddd8b42a2c068b4a1f/html5/thumbnails/59.jpg)
同步过程
Sync
V2
V2
Set
V1
V1
Set
V-3
Delete
节点 A
节点 B
客户端时间
Get
V1
V2
11年4月8日星期五
![Page 60: Qcon 2011:Beansdb 的设计与实现](https://reader030.vdocuments.site/reader030/viewer/2022020709/555c3bddd8b42a2c068b4a1f/html5/thumbnails/60.jpg)
同步过程
Sync
V2
V2
Set
V1
V1
Set
V-3
Delete
V-3
Sync
节点 A
节点 B
客户端时间
Get
V1
V2
11年4月8日星期五
![Page 61: Qcon 2011:Beansdb 的设计与实现](https://reader030.vdocuments.site/reader030/viewer/2022020709/555c3bddd8b42a2c068b4a1f/html5/thumbnails/61.jpg)
同步过程
Sync
V2
V2
Set
V1
V1
Set
V-3
Delete
V-3
Sync
GC
节点 A
节点 B
客户端时间
Get
V1
V2
11年4月8日星期五
![Page 62: Qcon 2011:Beansdb 的设计与实现](https://reader030.vdocuments.site/reader030/viewer/2022020709/555c3bddd8b42a2c068b4a1f/html5/thumbnails/62.jpg)
网络协议
11年4月8日星期五
![Page 63: Qcon 2011:Beansdb 的设计与实现](https://reader030.vdocuments.site/reader030/viewer/2022020709/555c3bddd8b42a2c068b4a1f/html5/thumbnails/63.jpg)
网络协议•memcache 文本协议
• 复用memcached的网络协议层代码
• 有大量客户端可用
11年4月8日星期五
![Page 64: Qcon 2011:Beansdb 的设计与实现](https://reader030.vdocuments.site/reader030/viewer/2022020709/555c3bddd8b42a2c068b4a1f/html5/thumbnails/64.jpg)
网络协议•memcache 文本协议
• 复用memcached的网络协议层代码
• 有大量客户端可用•适当扩展• @fff, ?xxxx, flush_all
• get_multi, set_multi, delete_multi
11年4月8日星期五
![Page 65: Qcon 2011:Beansdb 的设计与实现](https://reader030.vdocuments.site/reader030/viewer/2022020709/555c3bddd8b42a2c068b4a1f/html5/thumbnails/65.jpg)
IO与多线程模型
11年4月8日星期五
![Page 66: Qcon 2011:Beansdb 的设计与实现](https://reader030.vdocuments.site/reader030/viewer/2022020709/555c3bddd8b42a2c068b4a1f/html5/thumbnails/66.jpg)
IO与多线程模型•并发与IO
• 并发连接多, 并发请求少
• 异步网络IO, 同步磁盘IO
11年4月8日星期五
![Page 67: Qcon 2011:Beansdb 的设计与实现](https://reader030.vdocuments.site/reader030/viewer/2022020709/555c3bddd8b42a2c068b4a1f/html5/thumbnails/67.jpg)
IO与多线程模型•并发与IO
• 并发连接多, 并发请求少
• 异步网络IO, 同步磁盘IO
•多线程模型• 多个连接与线程绑定• 半同步, 半异步
• leader follower
11年4月8日星期五
![Page 68: Qcon 2011:Beansdb 的设计与实现](https://reader030.vdocuments.site/reader030/viewer/2022020709/555c3bddd8b42a2c068b4a1f/html5/thumbnails/68.jpg)
Leader-Follower模型
Mutex
try to lock
unlock
wait for event
remove event fd
do the work (blocking)
Leader
Follower
11年4月8日星期五
![Page 69: Qcon 2011:Beansdb 的设计与实现](https://reader030.vdocuments.site/reader030/viewer/2022020709/555c3bddd8b42a2c068b4a1f/html5/thumbnails/69.jpg)
Proxy 实现
11年4月8日星期五
![Page 70: Qcon 2011:Beansdb 的设计与实现](https://reader030.vdocuments.site/reader030/viewer/2022020709/555c3bddd8b42a2c068b4a1f/html5/thumbnails/70.jpg)
Proxy 实现•Go 实现
• 易于实现高并发应用, 性能可接受
11年4月8日星期五
![Page 71: Qcon 2011:Beansdb 的设计与实现](https://reader030.vdocuments.site/reader030/viewer/2022020709/555c3bddd8b42a2c068b4a1f/html5/thumbnails/71.jpg)
Proxy 实现•Go 实现
• 易于实现高并发应用, 性能可接受
•自动路由• 根据 Merkle Tree得到数据分布
• 更高可用性
11年4月8日星期五
![Page 72: Qcon 2011:Beansdb 的设计与实现](https://reader030.vdocuments.site/reader030/viewer/2022020709/555c3bddd8b42a2c068b4a1f/html5/thumbnails/72.jpg)
Proxy 实现•Go 实现
• 易于实现高并发应用, 性能可接受
•自动路由• 根据 Merkle Tree得到数据分布
• 更高可用性•负载均衡• 减少IO慢的节点的请求量
11年4月8日星期五
![Page 73: Qcon 2011:Beansdb 的设计与实现](https://reader030.vdocuments.site/reader030/viewer/2022020709/555c3bddd8b42a2c068b4a1f/html5/thumbnails/73.jpg)
版本历史
11年4月8日星期五
![Page 74: Qcon 2011:Beansdb 的设计与实现](https://reader030.vdocuments.site/reader030/viewer/2022020709/555c3bddd8b42a2c068b4a1f/html5/thumbnails/74.jpg)
版本历史•0.1, like MogileFS 2008.8
• WebDAV, inotify, sync, client
11年4月8日星期五
![Page 75: Qcon 2011:Beansdb 的设计与实现](https://reader030.vdocuments.site/reader030/viewer/2022020709/555c3bddd8b42a2c068b4a1f/html5/thumbnails/75.jpg)
版本历史•0.1, like MogileFS 2008.8
• WebDAV, inotify, sync, client
•0.2, like TokyoTrant 2008.12
• TC, HTree, sync, mc client
11年4月8日星期五
![Page 76: Qcon 2011:Beansdb 的设计与实现](https://reader030.vdocuments.site/reader030/viewer/2022020709/555c3bddd8b42a2c068b4a1f/html5/thumbnails/76.jpg)
版本历史•0.1, like MogileFS 2008.8
• WebDAV, inotify, sync, client
•0.2, like TokyoTrant 2008.12
• TC, HTree, sync, mc client
•0.3, like memcachedb 2009.6
• HTree in TC, on Disk
11年4月8日星期五
![Page 77: Qcon 2011:Beansdb 的设计与实现](https://reader030.vdocuments.site/reader030/viewer/2022020709/555c3bddd8b42a2c068b4a1f/html5/thumbnails/77.jpg)
版本历史(2)
11年4月8日星期五
![Page 78: Qcon 2011:Beansdb 的设计与实现](https://reader030.vdocuments.site/reader030/viewer/2022020709/555c3bddd8b42a2c068b4a1f/html5/thumbnails/78.jpg)
版本历史(2)
•0.4 2010.2
• proxy
11年4月8日星期五
![Page 79: Qcon 2011:Beansdb 的设计与实现](https://reader030.vdocuments.site/reader030/viewer/2022020709/555c3bddd8b42a2c068b4a1f/html5/thumbnails/79.jpg)
版本历史(2)
•0.4 2010.2
• proxy
•0.5 reload 2010.10
• Bitcask, Leader/Follower
11年4月8日星期五
![Page 80: Qcon 2011:Beansdb 的设计与实现](https://reader030.vdocuments.site/reader030/viewer/2022020709/555c3bddd8b42a2c068b4a1f/html5/thumbnails/80.jpg)
实际部署案例(1)
11年4月8日星期五
![Page 81: Qcon 2011:Beansdb 的设计与实现](https://reader030.vdocuments.site/reader030/viewer/2022020709/555c3bddd8b42a2c068b4a1f/html5/thumbnails/81.jpg)
实际部署案例(1)•数据量• 图片, 音频: 1k到20M
• 310M x 3 = 930 M
• 590G x 16 x 3 = 28T
• 17 个节点, 约 50 块SATA硬盘
11年4月8日星期五
![Page 82: Qcon 2011:Beansdb 的设计与实现](https://reader030.vdocuments.site/reader030/viewer/2022020709/555c3bddd8b42a2c068b4a1f/html5/thumbnails/82.jpg)
实际部署案例(1)•数据量• 图片, 音频: 1k到20M
• 310M x 3 = 930 M
• 590G x 16 x 3 = 28T
• 17 个节点, 约 50 块SATA硬盘
•性能:• 250 qps左右, 有CDN
• Med/Avg/90%/99%: 16/29/69/232 ms
11年4月8日星期五
![Page 83: Qcon 2011:Beansdb 的设计与实现](https://reader030.vdocuments.site/reader030/viewer/2022020709/555c3bddd8b42a2c068b4a1f/html5/thumbnails/83.jpg)
各节点数据分布
11年4月8日星期五
![Page 84: Qcon 2011:Beansdb 的设计与实现](https://reader030.vdocuments.site/reader030/viewer/2022020709/555c3bddd8b42a2c068b4a1f/html5/thumbnails/84.jpg)
线上运行状态截图 (图片, mp3, 3亿)
11年4月8日星期五
![Page 85: Qcon 2011:Beansdb 的设计与实现](https://reader030.vdocuments.site/reader030/viewer/2022020709/555c3bddd8b42a2c068b4a1f/html5/thumbnails/85.jpg)
11年4月8日星期五
![Page 86: Qcon 2011:Beansdb 的设计与实现](https://reader030.vdocuments.site/reader030/viewer/2022020709/555c3bddd8b42a2c068b4a1f/html5/thumbnails/86.jpg)
实际部署案例(2)
11年4月8日星期五
![Page 87: Qcon 2011:Beansdb 的设计与实现](https://reader030.vdocuments.site/reader030/viewer/2022020709/555c3bddd8b42a2c068b4a1f/html5/thumbnails/87.jpg)
实际部署案例(2)•数据量• 文本字段: 100到100k
• 550M x 3 = 1.65 B
• 50G x 16 x 3 = 2.4T
• 13 个节点, 约 13 块SATA硬盘
11年4月8日星期五
![Page 88: Qcon 2011:Beansdb 的设计与实现](https://reader030.vdocuments.site/reader030/viewer/2022020709/555c3bddd8b42a2c068b4a1f/html5/thumbnails/88.jpg)
实际部署案例(2)•数据量• 文本字段: 100到100k
• 550M x 3 = 1.65 B
• 50G x 16 x 3 = 2.4T
• 13 个节点, 约 13 块SATA硬盘
•性能:• 200 qps左右, 有memcached作缓存
• Med/Avg/90%/99%: 1/14/15/104 ms
11年4月8日星期五
![Page 89: Qcon 2011:Beansdb 的设计与实现](https://reader030.vdocuments.site/reader030/viewer/2022020709/555c3bddd8b42a2c068b4a1f/html5/thumbnails/89.jpg)
Thanks!Q/A ?
11年4月8日星期五
![Page 90: Qcon 2011:Beansdb 的设计与实现](https://reader030.vdocuments.site/reader030/viewer/2022020709/555c3bddd8b42a2c068b4a1f/html5/thumbnails/90.jpg)
原型开发
11年4月8日星期五
![Page 91: Qcon 2011:Beansdb 的设计与实现](https://reader030.vdocuments.site/reader030/viewer/2022020709/555c3bddd8b42a2c068b4a1f/html5/thumbnails/91.jpg)
原型开发•原型开发• 快速验证想法
11年4月8日星期五
![Page 92: Qcon 2011:Beansdb 的设计与实现](https://reader030.vdocuments.site/reader030/viewer/2022020709/555c3bddd8b42a2c068b4a1f/html5/thumbnails/92.jpg)
原型开发•原型开发• 快速验证想法
•Python
• Cython 扩展
11年4月8日星期五
![Page 93: Qcon 2011:Beansdb 的设计与实现](https://reader030.vdocuments.site/reader030/viewer/2022020709/555c3bddd8b42a2c068b4a1f/html5/thumbnails/93.jpg)
原型开发•原型开发• 快速验证想法
•Python
• Cython 扩展
•Go
• cgo 扩展, 容易开发高并发应用
11年4月8日星期五