`
zlx19900228
  • 浏览: 51786 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Google group varint算法解析

阅读更多

在了解 group varint 算法之前,应该对 varint 有所了解。

What is varint? 根据 google http://code.google.com/apis/protocolbuffers/docs/encoding.html 的官方解释可以很清晰的了解到,它是一种用 1 个或多个字节序列化 integer 的一种方法, Smaller numbers take a smaller number of bytes. 传统的 integer 是以 32 位来表示的,存储需要 4 个字节,当如果整数大小在 256 以内,那么只需要用一个字节就可以存储这个整数,这样就可以节省 3 个字节的存储空间, Google varint 就是根据这种思想来序列化整数的:
Each byte in a varint, except the last byte, has the most significant bit (msb) set – this indicates that there are further bytes to come. The lower 7 bits of each byte are used to store the two's complement representation of the number in groups of 7 bits, least significant group first.

varint 中的除了最后一个字节的每个字节,都有一个最高标志位,这表明的是否还有更多的字节来表示这个 int ,怎么说呢,因为存储是一连串的字节数组,那么以官方文档的例子为例,

第一个字节最高位为 0 ,表示我只用一个字节就可以表示我自己 ( 这个 int) ,第二个字节同理,第三个字节第一位为 1 ,表明我后面还有字节来表示我自己,于是再看它后面的字节,最高位为 0 ,所以后面没有更多的字节了,这就是 indicates that there are further bytes to come 的含义,但是这种算法在每次 decode 的时候,会遍历每个字节来确定哪些字节代表的一个 int( 关于如何 encode 以及 decode varint 可以参照野王师兄的算法实现, http://www.searchtb.com/2011/05/google-group-varint-%E6%97%A0%E6%8D%9F%E5%8E%8B%E7%BC%A9%E8%A7%A3%E5%8E%8B%E7%AE%97%E6%B3%95%E7%9A%84%E9%AB%98%E6%95%88%E5%AE%9E%E7%8E%B0.html )

 

Group varint 是对 varint 的一种优化,现在,我用前 2 位来表示有几个字节代表一个 int for example:

00 表示一个字节, 01 表示 1 个字节, 10 表示 2 个字节, 11 表示 4 个字节,现在我把这 8 位表示当前这 4 int 序列字节数的位拿出来,存放入一个字节,将这个字节当作一个 prefix ,比如现在我要 decode 序列,我只用将传过来的序列的 prefix 拿出来,放入我预编译好的 256-entry table 中,去拿出这代表的 offsets ,这怎么说呢,以野王师兄实现的代码为例,

/**

  * group varint 的索引表,

  * 4 列分别表示 4 int 压缩单元 第一个索引单元的距离 (byte)

  * 5 表示的是 下一个索引单元 第一个索引单元的距离 (byte)

  */

static const int GROUP_VARINT_IDX_ARR[256][5] =

{

    /* 00 00 00 00 */ {1, 2, 3, 4, 5},

    /* 00 00 00 01 */ {1, 2, 3, 4, 6},

    /* 00 00 00 10 */ {1, 2, 3, 4, 7},

    /* 00 00 00 11 */ {1, 2, 3, 4, 8},

 

    /* 00 00 01 00 */ {1, 2, 3, 5, 6},

    /* 00 00 01 01 */ {1, 2, 3, 5, 7},

    /* 00 00 01 10 */ {1, 2, 3, 5, 8},

    /* 00 00 01 11 */ {1, 2, 3, 5, 9},

 

    /* 00 00 10 00 */ {1, 2, 3, 6, 7},

    /* 00 00 10 01 */ {1, 2, 3, 6, 8},

    /* 00 00 10 10 */ {1, 2, 3, 6, 9},

    /* 00 00 10 11 */ {1, 2, 3, 6, 10},

 

    /* 00 00 11 00 */ {1, 2, 3, 7, 8},

    /* 00 00 11 01 */ {1, 2, 3, 7, 9},

    /* 00 00 11 10 */ {1, 2, 3, 7, 10},

    /* 00 00 11 11 */ {1, 2, 3, 7, 11},

 

    /* 00 01 00 00 */ {1, 2, 4, 5, 6},

    /* 00 01 00 01 */ {1, 2, 4, 5, 7},

    /* 00 01 00 10 */ {1, 2, 4, 5, 8},

    /* 00 01 00 11 */ {1, 2, 4, 5, 9},

 

    /* 00 01 01 00 */ {1, 2, 4, 6, 7},

    /* 00 01 01 01 */ {1, 2, 4, 6, 8},

    /* 00 01 01 10 */ {1, 2, 4, 6, 9},

    /* 00 01 01 11 */ {1, 2, 4, 6, 10},

 

    /* 00 01 10 00 */ {1, 2, 4, 7, 8},

    /* 00 01 10 01 */ {1, 2, 4, 7, 9},

    /* 00 01 10 10 */ {1, 2, 4, 7, 10},

    /* 00 01 10 11 */ {1, 2, 4, 7, 11},

 

    /* 00 01 11 00 */ {1, 2, 4, 8, 9},

    /* 00 01 11 01 */ {1, 2, 4, 8, 10},

    /* 00 01 11 10 */ {1, 2, 4, 8, 11},

    /* 00 01 11 11 */ {1, 2, 4, 8, 12},

 

    /* 00 10 00 00 */ {1, 2, 5, 6, 7},

    /* 00 10 00 01 */ {1, 2, 5, 6, 8},

    /* 00 10 00 10 */ {1, 2, 5, 6, 9},

    /* 00 10 00 11 */ {1, 2, 5, 6, 10},

 

    /* 00 10 01 00 */ {1, 2, 5, 7, 8},

    /* 00 10 01 01 */ {1, 2, 5, 7, 9},

    /* 00 10 01 10 */ {1, 2, 5, 7, 10},

    /* 00 10 01 11 */ {1, 2, 5, 7, 11},

 

    /* 00 10 10 00 */ {1, 2, 5, 8, 9},

    /* 00 10 10 01 */ {1, 2, 5, 8, 10},

    /* 00 10 10 10 */ {1, 2, 5, 8, 11},

    /* 00 10 10 11 */ {1, 2, 5, 8, 12},

 

    /* 00 10 11 00 */ {1, 2, 5, 9, 10},

    /* 00 10 11 01 */ {1, 2, 5, 9, 11},

    /* 00 10 11 10 */ {1, 2, 5, 9, 12},

    /* 00 10 11 11 */ {1, 2, 5, 9, 13},

 

    /* 00 11 00 00 */ {1, 2, 6, 7, 8},

    /* 00 11 00 01 */ {1, 2, 6, 7, 9},

    /* 00 11 00 10 */ {1, 2, 6, 7, 10},

    /* 00 11 00 11 */ {1, 2, 6, 7, 11},

 

    /* 00 11 01 00 */ {1, 2, 6, 8, 9},

    /* 00 11 01 01 */ {1, 2, 6, 8, 10},

    /* 00 11 01 10 */ {1, 2, 6, 8, 11},

    /* 00 11 01 11 */ {1, 2, 6, 8, 12},

 

    /* 00 11 10 00 */ {1, 2, 6, 9, 10},

    /* 00 11 10 01 */ {1, 2, 6, 9, 11},

    /* 00 11 10 10 */ {1, 2, 6, 9, 12},

    /* 00 11 10 11 */ {1, 2, 6, 9, 13},

 

    /* 00 11 11 00 */ {1, 2, 6, 10, 11},

    /* 00 11 11 01 */ {1, 2, 6, 10, 12},

    /* 00 11 11 10 */ {1, 2, 6, 10, 13},

    /* 00 11 11 11 */ {1, 2, 6, 10, 14},

 

    /* 01 00 00 00 */ {1, 3, 4, 5, 6},

    /* 01 00 00 01 */ {1, 3, 4, 5, 7},

    /* 01 00 00 10 */ {1, 3, 4, 5, 8},

    /* 01 00 00 11 */ {1, 3, 4, 5, 9},

 

    /* 01 00 01 00 */ {1, 3, 4, 6, 7},

    /* 01 00 01 01 */ {1, 3, 4, 6, 8},

    /* 01 00 01 10 */ {1, 3, 4, 6, 9},

    /* 01 00 01 11 */ {1, 3, 4, 6, 10},

 

    /* 01 00 10 00 */ {1, 3, 4, 7, 8},

    /* 01 00 10 01 */ {1, 3, 4, 7, 9},

    /* 01 00 10 10 */ {1, 3, 4, 7, 10},

    /* 01 00 10 11 */ {1, 3, 4, 7, 11},

 

    /* 01 00 11 00 */ {1, 3, 4, 8, 9},

    /* 01 00 11 01 */ {1, 3, 4, 8, 10},

    /* 01 00 11 10 */ {1, 3, 4, 8, 11},

    /* 01 00 11 11 */ {1, 3, 4, 8, 12},

 

    /* 01 01 00 00 */ {1, 3, 5, 6, 7},

    /* 01 01 00 01 */ {1, 3, 5, 6, 8},

    /* 01 01 00 10 */ {1, 3, 5, 6, 9},

    /* 01 01 00 11 */ {1, 3, 5, 6, 10},

 

    /* 01 01 01 00 */ {1, 3, 5, 7, 8},

    /* 01 01 01 01 */ {1, 3, 5, 7, 9},

    /* 01 01 01 10 */ {1, 3, 5, 7, 10},

    /* 01 01 01 11 */ {1, 3, 5, 7, 11},

 

    /* 01 01 10 00 */ {1, 3, 5, 8, 9},

    /* 01 01 10 01 */ {1, 3, 5, 8, 10},

    /* 01 01 10 10 */ {1, 3, 5, 8, 11},

    /* 01 01 10 11 */ {1, 3, 5, 8, 12},

 

    /* 01 01 11 00 */ {1, 3, 5, 9, 10},

    /* 01 01 11 01 */ {1, 3, 5, 9, 11},

    /* 01 01 11 10 */ {1, 3, 5, 9, 12},

    /* 01 01 11 11 */ {1, 3, 5, 9, 13},

 

    /* 01 10 00 00 */ {1, 3, 6, 7, 8},

    /* 01 10 00 01 */ {1, 3, 6, 7, 9},

    /* 01 10 00 10 */ {1, 3, 6, 7, 10},

    /* 01 10 00 11 */ {1, 3, 6, 7, 11},

 

    /* 01 10 01 00 */ {1, 3, 6, 8, 9},

    /* 01 10 01 01 */ {1, 3, 6, 8, 10},

    /* 01 10 01 10 */ {1, 3, 6, 8, 11},

    /* 01 10 01 11 */ {1, 3, 6, 8, 12},

 

    /* 01 10 10 00 */ {1, 3, 6, 9, 10},

    /* 01 10 10 01 */ {1, 3, 6, 9, 11},

    /* 01 10 10 10 */ {1, 3, 6, 9, 12},

    /* 01 10 10 11 */ {1, 3, 6, 9, 13},

 

    /* 01 10 11 00 */ {1, 3, 6, 10, 11},

    /* 01 10 11 01 */ {1, 3, 6, 10, 12},

    /* 01 10 11 10 */ {1, 3, 6, 10, 13},

    /* 01 10 11 11 */ {1, 3, 6, 10, 14},

 

    /* 01 11 00 00 */ {1, 3, 7, 8, 9},

    /* 01 11 00 01 */ {1, 3, 7, 8, 10},

    /* 01 11 00 10 */ {1, 3, 7, 8, 11},

    /* 01 11 00 11 */ {1, 3, 7, 8, 12},

 

    /* 01 11 01 00 */ {1, 3, 7, 9, 10},

    /* 01 11 01 01 */ {1, 3, 7, 9, 11},

    /* 01 11 01 10 */ {1, 3, 7, 9, 12},

    /* 01 11 01 11 */ {1, 3, 7, 9, 13},

 

    /* 01 11 10 00 */ {1, 3, 7, 10, 11},

    /* 01 11 10 01 */ {1, 3, 7, 10, 12},

    /* 01 11 10 10 */ {1, 3, 7, 10, 13},

    /* 01 11 10 11 */ {1, 3, 7, 10, 14},

 

    /* 01 11 11 00 */ {1, 3, 7, 11, 12},

    /* 01 11 11 01 */ {1, 3, 7, 11, 13},

    /* 01 11 11 10 */ {1, 3, 7, 11, 14},

    /* 01 11 11 11 */ {1, 3, 7, 11, 15},

 

    /* 10 00 00 00 */ {1, 4, 5, 6, 7},

    /* 10 00 00 01 */ {1, 4, 5, 6, 8},

    /* 10 00 00 10 */ {1, 4, 5, 6, 9},

    /* 10 00 00 11 */ {1, 4, 5, 6, 10},

 

    /* 10 00 01 00 */ {1, 4, 5, 7, 8},

    /* 10 00 01 01 */ {1, 4, 5, 7, 9},

    /* 10 00 01 10 */ {1, 4, 5, 7, 10},

    /* 10 00 01 11 */ {1, 4, 5, 7, 11},

 

    /* 10 00 10 00 */ {1, 4, 5, 8, 9},

    /* 10 00 10 01 */ {1, 4, 5, 8, 10},

    /* 10 00 10 10 */ {1, 4, 5, 8, 11},

    /* 10 00 10 11 */ {1, 4, 5, 8, 12},

 

    /* 10 00 11 00 */ {1, 4, 5, 9, 10},

    /* 10 00 11 01 */ {1, 4, 5, 9, 11},

    /* 10 00 11 10 */ {1, 4, 5, 9, 12},

    /* 10 00 11 11 */ {1, 4, 5, 9, 13},

 

    /* 10 01 00 00 */ {1, 4, 6, 7, 8},

    /* 10 01 00 01 */ {1, 4, 6, 7, 9},

    /* 10 01 00 10 */ {1, 4, 6, 7, 10},

    /* 10 01 00 11 */ {1, 4, 6, 7, 11},

 

    /* 10 01 01 00 */ {1, 4, 6, 8, 9},

    /* 10 01 01 01 */ {1, 4, 6, 8, 10},

    /* 10 01 01 10 */ {1, 4, 6, 8, 11},

    /* 10 01 01 11 */ {1, 4, 6, 8, 12},

 

    /* 10 01 10 00 */ {1, 4, 6, 9, 10},

    /* 10 01 10 01 */ {1, 4, 6, 9, 11},

    /* 10 01 10 10 */ {1, 4, 6, 9, 12},

    /* 10 01 10 11 */ {1, 4, 6, 9, 13},

 

    /* 10 01 11 00 */ {1, 4, 6, 10, 11},

    /* 10 01 11 01 */ {1, 4, 6, 10, 12},

    /* 10 01 11 10 */ {1, 4, 6, 10, 13},

    /* 10 01 11 11 */ {1, 4, 6, 10, 14},

 

    /* 10 10 00 00 */ {1, 4, 7, 8, 9},

    /* 10 10 00 01 */ {1, 4, 7, 8, 10},

    /* 10 10 00 10 */ {1, 4, 7, 8, 11},

    /* 10 10 00 11 */ {1, 4, 7, 8, 12},

 

    /* 10 10 01 00 */ {1, 4, 7, 9, 10},

    /* 10 10 01 01 */ {1, 4, 7, 9, 11},

    /* 10 10 01 10 */ {1, 4, 7, 9, 12},

    /* 10 10 01 11 */ {1, 4, 7, 9, 13},

 

    /* 10 10 10 00 */ {1, 4, 7, 10, 11},

    /* 10 10 10 01 */ {1, 4, 7, 10, 12},

    /* 10 10 10 10 */ {1, 4, 7, 10, 13},

    /* 10 10 10 11 */ {1, 4, 7, 10, 14},

 

    /* 10 10 11 00 */ {1, 4, 7, 11, 12},

    /* 10 10 11 01 */ {1, 4, 7, 11, 13},

    /* 10 10 11 10 */ {1, 4, 7, 11, 14},

    /* 10 10 11 11 */ {1, 4, 7, 11, 15},

 

    /* 10 11 00 00 */ {1, 4, 8, 9, 10},

    /* 10 11 00 01 */ {1, 4, 8, 9, 11},

    /* 10 11 00 10 */ {1, 4, 8, 9, 12},

    /* 10 11 00 11 */ {1, 4, 8, 9, 13},

 

    /* 10 11 01 00 */ {1, 4, 8, 10, 11},

    /* 10 11 01 01 */ {1, 4, 8, 10, 12},

    /* 10 11 01 10 */ {1, 4, 8, 10, 13},

    /* 10 11 01 11 */ {1, 4, 8, 10, 14},

 

    /* 10 11 10 00 */ {1, 4, 8, 11, 12},

    /* 10 11 10 01 */ {1, 4, 8, 11, 13},

    /* 10 11 10 10 */ {1, 4, 8, 11, 14},

    /* 10 11 10 11 */ {1, 4, 8, 11, 15},

 

    /* 10 11 11 00 */ {1, 4, 8, 12, 13},

    /* 10 11 11 01 */ {1, 4, 8, 12, 14},

    /* 10 11 11 10 */ {1, 4, 8, 12, 15},

    /* 10 11 11 11 */ {1, 4, 8, 12, 16},

 

    /* 11 00 00 00 */ {1, 5, 6, 7, 8},

    /* 11 00 00 01 */ {1, 5, 6, 7, 9},

    /* 11 00 00 10 */ {1, 5, 6, 7, 10},

    /* 11 00 00 11 */ {1, 5, 6, 7, 11},

 

    /* 11 00 01 00 */ {1, 5, 6, 8, 9},

    /* 11 00 01 01 */ {1, 5, 6, 8, 10},

    /* 11 00 01 10 */ {1, 5, 6, 8, 11},

    /* 11 00 01 11 */ {1, 5, 6, 8, 12},

 

    /* 11 00 10 00 */ {1, 5, 6, 9, 10},

    /* 11 00 10 01 */ {1, 5, 6, 9, 11},

    /* 11 00 10 10 */ {1, 5, 6, 9, 12},

    /* 11 00 10 11 */ {1, 5, 6, 9, 13},

 

    /* 11 00 11 00 */ {1, 5, 6, 10, 11},

    /* 11 00 11 01 */ {1, 5, 6, 10, 12},

    /* 11 00 11 10 */ {1, 5, 6, 10, 13},

    /* 11 00 11 11 */ {1, 5, 6, 10, 14},

 

    /* 11 01 00 00 */ {1, 5, 7, 8, 9},

    /* 11 01 00 01 */ {1, 5, 7, 8, 10},

    /* 11 01 00 10 */ {1, 5, 7, 8, 11},

    /* 11 01 00 11 */ {1, 5, 7, 8, 12},

 

    /* 11 01 01 00 */ {1, 5, 7, 9, 10},

    /* 11 01 01 01 */ {1, 5, 7, 9, 11},

    /* 11 01 01 10 */ {1, 5, 7, 9, 12},

    /* 11 01 01 11 */ {1, 5, 7, 9, 13},

 

    /* 11 01 10 00 */ {1, 5, 7, 10, 11},

    /* 11 01 10 01 */ {1, 5, 7, 10, 12},

    /* 11 01 10 10 */ {1, 5, 7, 10, 13},

    /* 11 01 10 11 */ {1, 5, 7, 10, 14},

 

    /* 11 01 11 00 */ {1, 5, 7, 11, 12},

    /* 11 01 11 01 */ {1, 5, 7, 11, 13},

    /* 11 01 11 10 */ {1, 5, 7, 11, 14},

    /* 11 01 11 11 */ {1, 5, 7, 11, 15},

 

    /* 11 10 00 00 */ {1, 5, 8, 9, 10},

    /* 11 10 00 01 */ {1, 5, 8, 9, 11},

    /* 11 10 00 10 */ {1, 5, 8, 9, 12},

    /* 11 10 00 11 */ {1, 5, 8, 9, 13},

 

    /* 11 10 01 00 */ {1, 5, 8, 10, 11},

    /* 11 10 01 01 */ {1, 5, 8, 10, 12},

    /* 11 10 01 10 */ {1, 5, 8, 10, 13},

    /* 11 10 01 11 */ {1, 5, 8, 10, 14},

 

    /* 11 10 10 00 */ {1, 5, 8, 11, 12},

    /* 11 10 10 01 */ {1, 5, 8, 11, 13},

    /* 11 10 10 10 */ {1, 5, 8, 11, 14},

    /* 11 10 10 11 */ {1, 5, 8, 11, 15},

 

    /* 11 10 11 00 */ {1, 5, 8, 12, 13},

    /* 11 10 11 01 */ {1, 5, 8, 12, 14},

    /* 11 10 11 10 */ {1, 5, 8, 12, 15},

    /* 11 10 11 11 */ {1, 5, 8, 12, 16},

 

    /* 11 11 00 00 */ {1, 5, 9, 10, 11},

    /* 11 11 00 01 */ {1, 5, 9, 10, 12},

    /* 11 11 00 10 */ {1, 5, 9, 10, 13},

    /* 11 11 00 11 */ {1, 5, 9, 10, 14},

 

    /* 11 11 01 00 */ {1, 5, 9, 11, 12},

    /* 11 11 01 01 */ {1, 5, 9, 11, 13},

    /* 11 11 01 10 */ {1, 5, 9, 11, 14},

    /* 11 11 01 11 */ {1, 5, 9, 11, 15},

 

    /* 11 11 10 00 */ {1, 5, 9, 12, 13},

    /* 11 11 10 01 */ {1, 5, 9, 12, 14},

    /* 11 11 10 10 */ {1, 5, 9, 12, 15},

    /* 11 11 10 11 */ {1, 5, 9, 12, 16},

 

    /* 11 11 11 00 */ {1, 5, 9, 13, 14},

    /* 11 11 11 01 */ {1, 5, 9, 13, 15},

    /* 11 11 11 10 */ {1, 5, 9, 13, 16},

    /* 11 11 11 11 */ {1, 5, 9, 13, 17}

};

 

/* 00 00 00 00 */ {1, 2, 3, 4, 5},

00 00 00 00 表示我传过来的 4 int 都用一个字节表示,因为 00 代表一个字节嘛,所以他距离 prefix 的距离就是 1 2 3 4 ,所以下一个索引距离第一个索引的距离是 5 ,这样我们都定位出了这 4 个连续 group varint 编码的哪几个字节代表哪几个 int 压缩单元,接下来我们所要做的就是对确定的 int 压缩单元进行解压缩了,具体的算法也可以参照上面的野王师兄的算法实现。

  • 大小: 35.7 KB
  • 大小: 10.8 KB
分享到:
评论

相关推荐

    Varint+ZigZag解码 ZigZag编码

    实现Varint + ZigZag的编解码过程,里面有我自己对Vint编解码实现的算法 ,VInt编码为Varint编码和ZigZag编码的结合,为一种将64位二进制编码的有符号整型编码在最多10字节中的编码方式。Varint编码为一种将64位二...

    VintCode.rar Varint \ZAGZIG\编码解码

    实现Varint + ZigZag的编解码过程,里面有我自己对Vint编解码实现的算法 ,VInt编码为Varint编码和ZigZag编码的结合,为一种将64位二进制编码的有符号整型编码在最多10字节中的编码方式。Varint编码为一种将64位二...

    前端开源库-signed-varint

    在实际应用中,signed-varint可以与其他前端技术结合,比如用于构建高效的序列化协议、数据压缩算法、或者是解析二进制数据流(如protobuf或Cap'n Proto格式)。此外,由于其轻量级和高效的特点,这个库也可以作为...

    前端开源库-signed-varint.zip

    2. **解码函数**:从 signed-varint 编码的字节数组中解析出原始的整数值。解码过程需要考虑第一个字节的符号位,并根据需要进行负数的还原。 3. **API 设计**:通常,开源库会提供易于使用的 API 接口,例如 `...

    cryptopp 、ms-gsl 、 varint 开源库安装包

    包含vcpkg安装cryptopp / ms-gsl / varint 所需下载的安装资源包,以及windows下cmd运行所需的PowerShell-6.2.1-win-x86安装包,解压出来放在vcpkg的downloads目录下即可使用。

    简单易懂的时序数据压缩算法分析.doc

    有时,可能需要结合多种算法,如使用ZigZag+Varint组合处理有符号整数,或者结合其他如Run-Length Encoding(RLE)和Dictionary Encoding等压缩技术,以达到最佳的压缩效果。 总的来说,理解并合理运用时序数据压缩...

    varint:varint C 扩展(用于 ruby​​ 协议缓冲区)

    瓦林特一个小的 C 扩展,用于加速协议缓冲区中的 varint。安装将此行添加到应用程序的 Gemfile 中: gem 'varint'然后执行: $ bundle或者自己安装: $ gem install varint贡献分叉吧创建您的功能分支( git ...

    Rust中的SIMD加速varint编码器和解码器-Rust开发

    varint-simd是用Rust编写的快速SIMD加速的可变长度整数编码器和解码器。 它旨在用于协议缓冲区(protobuf),Apache Avro和类似的序列化格式的实现中。 varint-simd varint-simd是用Rust编写的快速SIMD加速的可变...

    易语言-易语言 纯源码实现 非递归解析Protobuf全部节点并自动生成组包代码

    Protobuf解析目前圈子没见过一个能[一次解析全部节点]的模块(类似protoc.exe --decode_raw),一般都是解析最外一层,用过Protobuf的童鞋可能知道,在面对嵌套多层并节点很多的情况下,可能会有多层循环和很多个判断,我...

    扁平树-用于对不执行任何IO的varint进行编码/解码的Rust模块。 受到Node.js varint模块的启发-Rust开发

    flat-tree将二叉树映射到列表。 改编自mafintosh / flat-tree。 文档Crates.io用法extern crate flat_tree; let parent = flat_tree flat-tree将二叉树映射到列表。 改编自mafintosh / flat-tree。...

    sstable解析

    "sstable解析" SSTable是LevelDB中的一种存储格式,它是 LevelDB 底层存储方式的核心组件。SSTable 文件格式是 LevelDB 中最重要的组件之一,它直接影响着 LevelDB 的性能和存储效率。 1. SSTable 文件格式 ...

    leveldb实现解析.pdf

    leveldb是Google公司推出的高性能持久化键值存储库,它广泛应用于各种需要快速、可扩展的存储解决方案的系统中。leveldb采用了LSM树(Log-Structured Merge-Tree)模型来优化写入性能,同时在读取操作上采取了多种...

    google protobuf 源代码

    在“google protobuf源代码”中,我们可以深入理解其内部实现机制,包括编码规则、压缩算法以及与各种编程语言的接口。源代码分析有助于开发者优化性能,自定义扩展,或者在自己的项目中实现类似的功能。 1. **编码...

    leveldb实现解析[归类].pdf

    LevelDB是由Google开发的一个开源、轻量级的键值存储库,主要用于嵌入式系统和云存储服务。它提供了一种高效、可靠的方式来存储和检索大量键值对数据,适用于数据库、日志记录、元数据存储等多种场景。本文将深入...

    leveldb实现解析

    4. **Varint**: 变长整数编码技术,用于节省空间,尤其是在小数值频繁出现的情况下效果显著。 5. **ValueType**: 定义了数据类型的枚举,例如指明是新键值还是覆盖或删除等操作。 6. **SequenceNumber**: 顺序号,...

    level db实现解析

    4. **Varint**:变长整数编码机制,用于减少数据的存储空间。 5. **ValueType**:类型值,标识了记录的类型,如删除、新版本等。 6. **SequenceNumber**:序列号,用于唯一标识一个日志条目。 7. **UserKey**:用户...

    streamvbyte:使用StreamVByte编解码器在C中进行快速整数压缩

    StreamVByte是一种新的整数压缩技术,该技术将SIMD指令(矢量化)应用于Google的Group Varint方法。 最终结果比其他面向字节的压缩技术要快。 该方法是免专利的,代码可在Apache许可下获得。 它包括快速差分编码...

    govarint:Golang的变长整数压缩库

    该项目旨在为使用各种算法的 32 位和 64 位整数的高性能编码和解码提供一个简单的 API。 用法 每个整数编码算法都符合一个编码和解码接口。 接口还指定了无符号整数的大小,32 位或 64 位,下面将称为 XX。 创建编码...

Global site tag (gtag.js) - Google Analytics