• 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,记录错误的原因, 执行的系统状态,可以极大的简化系统的设计,对于一些不容易出错的情况,比方说系统没有内存,可以不考虑系统的错误,因为这种错误发生,将无法恢复,直接刮掉。

  • 相关阅读:
    代理模式与Android
    图数据库 Titan 高速入门
    怎样编写支持命令行选项的程序
    协方差的意义
    我所理解的Spring AOP的基本概念
    Google搜索解析
    POJ 3311 Hie with the Pie floyd+状压DP
    JS怎样将拖拉事件与点击事件分离?
    C++语言笔记系列之十二——C++的继承
    Mac下Android配置及unity3d的导出Android
  • 原文地址:https://www.cnblogs.com/xiangshancuizhu/p/2840712.html
Copyright © 2020-2023  润新知