zoukankan      html  css  js  c++  java
  • 玩转Leveldb原理及源码--拙见1

    可以说是不知天高地厚。。

    可以说是班门弄斧。。

    但是,我今天还就这样走了,我喜欢!!!!!!


    注:后续文章,限于篇幅,不懂名词都有 紫色+下划线 超链接,有兴趣,可以查阅;


    网上关于Leveldb 的源码剖析啊,解析啊什么的有好多,差不多都是大神级别的在搞,如果我们水平相当,那不如凑一对呗:

    既然开始了,哪有停下的道理,先了解一下Levedb的关荣历史、完美现在和光辉的未来:

    Leveldb:

    1.Leveldb是一个google实现的非常高效的kv数据库,目前能够支持billion级别的数据量了。 

    在这个数量级别下还有着非常高的性能,主要归功于它的良好的设计,特别是LMS算法。

    2.LevelDB 是单进程的服务,性能非常之高,在一台4核Q6600的CPU机器上,

    每秒钟写数据超过40w,而随机读的性能每秒钟超过10w。

    3.LevelDB 只是一个 C/C++ 编程语言的库(有没有超级感动,哈)

    4.Leveldb只是一个语言库,不包含网络服务封装, 所以无法像一般意义的存储服务器(如 MySQL)那样, 用客户端来连接它.

    LevelDB 自己也声明, 使用者应该封装自己的网络服务器(这得等我学网络啦)

    5.LevelDB具有很高的随机写,顺序读/写性能,但是随机读的性能很一般,

    也就是说LevelDB很适合应用在查询较少,而写很多的场景。

    LevelDB应用了LSM (不懂吧,点这里)策略,lsm_tree不懂吧,点这里对索引变更进行延迟及批量处理,

    并通过一种类似于归并排序的方式高效地将更新迁移到磁盘,降低索引插入开销。

    6.key和value都是任意长度的字节数组;
    7.entry(即一条K-V记录)默认是按照key的字典顺序存储的,当然开发者也可以重载这个排序函数;
    8.提供的基本操作接口:Put()、Delete()、Get()、Batch();
    9.支持批量操作以原子操作进行;
    10.可以创建数据全景的snapshot(快照),并允许在快照中查找数据;
    11.可以通过前向(或后向)迭代器遍历数据(迭代器会隐含的创建一个snapshot);
    12.自动使用Snappy压缩数据;
    13.可移植性;

    以下是百度来的资料加一整理:如果了解,可以略过:

    Jeff Dean其人:http://research.google.com/people/jeff/index.html

       Google大规模分布式平台Bigtable和MapReduce主要设计和实现者。

    Sanjay Ghemawat其人:http://research.google.com/people/sanjay/index.html

       Google大规模分布式平台GFS,Bigtable和MapReduce主要设计和实现工程师。


       LevelDb就是这两位大神级别的工程师发起的开源项目,简而言之,LevelDb是能够处理十亿级别规模Key-Value型数据持久性存储的C++程序库。正像上面介绍的,这二位是Bigtable的设计和实现者,如果了解Bigtable的话,应该知道在这个影响深远的分布式存储系统中有两个核心的部分:Master Server和Tablet Server。其中Master Server做一些管理数据的存储以及分布式调度工作,实际的分布式数据存储以及读写操作是由Tablet Server完成的,而LevelDb则可以理解为一个简化版的Tablet Server。

    LevelDb有如下一些特点:

        首先,LevelDb是一个持久化存储的KV系统,和Redis这种内存型的KV系统不同,LevelDb不会像Redis一样狂吃内存,而是将大部分数据存储到磁盘上。

        其次,LevleDb在存储数据时,是根据记录的key值有序存储的,就是说相邻的key值在存储文件中是依次顺序存储的,而应用可以自定义key大小比较函数,LevleDb会按照用户定义的比较函数依序存储这些记录。

        再次,像大多数KV系统一样,LevelDb的操作接口很简单,基本操作包括写记录,读记录以及删除记录。也支持针对多条操作的原子批量操作。

        另外,LevelDb支持数据快照(snapshot)功能,使得读取操作不受写操作影响,可以在读操作过程中始终看到一致的数据。

        除此外,LevelDb还支持数据压缩等操作,这对于减小存储空间以及增快IO效率都有直接的帮助。

        LevelDb性能非常突出,官方网站报道其随机写性能达到40万条记录每秒,而随机读性能达到6万条记录每秒。总体来说,LevelDb的写操作要大大快于读操作,而顺序读写操作则大大快于随机读写操作。

  • 相关阅读:
    SPSS Clementine 数据挖掘入门 (2)
    Oracle与SQL Server数据库管理对比
    在SharePoint中修改AD用户密码的WebPart
    【html】html 特殊字符大全
    【javascript】csshover 解决 ie6 下 hover 兼容问题
    【css】纯 css 制作带三角的边框
    【javascript】无缝滚动——上下
    【css】利用小数解析差异解决浏览器兼容性问题
    【javascript】checkbox——类似邮箱全选功能(完整版)
    【javascript】无缝滚动——左右
  • 原文地址:https://www.cnblogs.com/melons/p/5791855.html
Copyright © 2011-2022 走看看