leveldb阅读心得

From:http://hi.baidu.com/mryuan0/item/62876af79667c6d76325d2f2

1. 对于用户传递过来的数据,通过转换以其他格式存储,move消耗的时间并不多,关键要设计一个好的内存分配器,比如说memtable的设计。

2.所有类的数据成员以_结束

3.序列化,数据格式统一little endian, 测试代码可以这样做, 其中网络字节序列是big endian,而很多机器是little endian, 因为google采用变长整数编码,它就只能使用little endian,这和编码过程密切相关的。陈硕在其muduo中使用的endian.h头文件的函数在机器序列和字节序列之间转换,转换函数为bexxtoh htobexx xx表示64,32

  union w
  {
   int a;
   char b;
  } c;
  c.a = 1;
  return (c.b == 1);

采用google的变长字节编码,可以极大的优化系统的性能

采用snappy压缩算法,包含头文件snappy.h

该文件在/usr/local/include/snappy.h, 里面提供了很多接口,其中可以使用下面的两个接口,看上去比较好用




size_t Compress(const char* input, size_t input_length, string* output);

bool Uncompress(const char* compressed, size_t compressed_length,

string* uncompressed);



对于数据序列化需要buffer,可以通过string作为buffer,也可以封装vector< char >, 这两者分别被leveldb和陈硕使用

4,对于不抛出异常的系统,new抛出的异常不算,设计一个status,记录错误的原因, 执行的系统状态,可以极大的简化系统的设计,对于一些不容易出错的情况,比方说系统没有内存,可以不考虑系统的错误,因为这种错误发生,将无法恢复,直接刮掉。

原文地址:https://www.cnblogs.com/xiangshancuizhu/p/2840712.html