leveldb-编码
来源:互联网 发布:剑灵狂三捏脸数据 编辑:程序博客网 时间:2024/06/05 04:54
参考这个链接[ leveldb源码剖析–编码],把为什么要编码以及如何编码讲的比较清楚。
我再简单记录下我自己的学习心得。主要是回答几个问题,回答清楚就行了。
- 为什么要编码?
假设key = “hello”, value=”world”,对于这个pair,你应该怎么存储呢?显然直接存成一个字符串可以。但是,那么怎么知道谁是key谁是value .所以,建议的存储方式:key_len, key, value_len, value.
那么,问题来了。ken_len, value_len你要怎么存?可以这么存:
5hello5world.
但是,如果key是数字,并且大于两位呢?key=”1010101010”,那么按照上面的方式:101010101010是这么存。
你根本分不清楚到底谁是key_len,谁是key.所以,底层存储数字的时候需要编码!
2 . 怎么编码
leveldb将数字按连续的字节直接存储。有两种方式:定长和不定长。
定长很容易:以32位为例,前四个字节存数字,然后是ascii码。每次读取都先读前四个,然后再读四个。
对于变长有一点技巧了。先说,为什么要变长。因为不变长,可能会浪费空间。但是,变成,我怎么知道要去读几个字节。所以,leveldb采用一种方法,对于32位的数字,这32位都是有效位。但是,我现在要求,每7位加一个最高位用来标记这是数字。
那么,先把32位补齐了,32+3 = 35 % 7 = 0;然后每7位字节,加一个最高位.8*5 = 40。所以,一个32位数字,变长编码,最多可以存40位。高位置1的原因在于,对于字符编码ascii来说,最高为全部是0.这样就可以区别。
- leveldb-编码
- LevelDB 存储编码
- leveldb源码剖析--编码
- leveldb中的编码方式的分析
- 32位固定编码实现--leveldb
- leveldb源码中变长编码代码
- LevelDb
- LevelDb
- LevelDb
- leveldb
- leveldb
- leveldb
- leveldb
- LevelDb
- LevelDb
- Leveldb
- Leveldb
- levelDB
- poj1011:Sticks
- VPC使用SNAT实现内网机器可以使用互联网
- 你好:MineData
- [笔记分享] [Language] C语言进阶小结
- [AS尝龟]Unable to inflate view tag without class attribute
- leveldb-编码
- C++各种变量内存分配
- WOJ1022-Competition of Programming
- java编程思想之控制执行流程
- java RSA和AES加密解密工具
- Android原生webView加载h5页面出现加载错乱不完全问题
- JSON和JSONP
- 游戏编程之DirectX的修炼:二(创建属于自己的windows窗口程序:上)
- 列表新闻无图片不显示