README.md

    特征 键和值是任意字节数组。 数据按键存储。 调用者可以提供自定义比较功能来覆盖排序顺序。 的基本操作是Put(key,value),Get(key),Delete(key)。 可以在一个原子批中进行多次更改。 用户可以创建一个瞬态快照以获取一致的数据视图。 在数据上支持正向和反向迭代。 使用Snappy压缩库自动压缩数据。 外部活动(文件系统操作等)通过虚拟接口进行中继,因此用户可以自定义操作系统交互。 文献资料 LevelDB库文档在线提供,并与源代码捆绑在一起。

    局限性 这不是SQL数据库。它没有关系数据模型,不支持SQL查询,也不支持索引。 一次只能有一个进程(可能是多线程)访问特定的数据库。 库没有内置的客户端-服务器支持。需要这种支持的应用程序必须在库周围包装自己的服务器。 获取来源 git clone --recurse-submodules https://github.com/google/leveldb.git 建造 该项目开箱即用地支持CMake。

    为POSIX构建 快速开始:

    mkdir -p build && cd build
    cmake -DCMAKE_BUILD_TYPE=Release .. && cmake --build .

    Windows版 首先生成Visual Studio 2017项目/解决方案文件:

    mkdir build
    cd build
    cmake -G "Visual Studio 15" ..

    默认默认值将针对x86构建。对于64位运行:

    cmake -G “ Visual Studio 15 Win64 ” ..

    要从命令行编译Windows解决方案,请执行以下操作:

    devenv / build调试leveldb.sln

    或在Visual Studio中打开leveldb.sln并从内部进行构建。

    请参阅CMake文档以及CMakeLists.txt更多高级用法。

    为leveldb项目做贡献 leveldb项目欢迎您的贡献。leveldb的主要目标是成为可靠且快速的键/值存储。将考虑符合上述功能/限制并满足以下要求的更改。

    捐款要求:

    仅经过测试的平台。我们通常只接受针对经过编译和测试的平台的更改。这意味着POSIX(对于Linux和macOS)或Windows。有时会接受很小的更改,但要考虑的是例外而不是规则。

    稳定的API。我们非常努力地维护稳定的API。需要使用leveldb对项目进行更改的更改可能会被拒绝,而对项目没有足够的好处。

    测试:所有更改都必须伴随着新的(或更改的)测试,或关于为什么不需要新的(或更改的)测试的充分说明。

    风格一致:该项目符合《 Google C ++风格指南》。为确保更改格式正确,请运行:

    clang-format -i --style=file <file>

    提交拉取请求 在接受任何拉取请求之前,作者必须首先在https://cla.developers.google.com/上签署《贡献者许可协议》(CLA)。

    为了保持提交时间表线性 壁球 更改到一个单一的提交和底垫 在谷歌/性LevelDB /主。这样可以使提交时间轴保持线性,并更轻松地与Google内部存储库同步。GitHub的About Git rebase页面上的更多信息 。

    性能 这是包含的db_bench程序运行时的性能报告(带有说明)。结果有些嘈杂,但应该足以估算出性能。

    建立 我们使用具有一百万个条目的数据库。每个条目都有一个16字节的密钥和一个100字节的值。基准测试所使用的值压缩到其原始大小的一半左右。

    LevelDB:    version 1.1
    Date:       Sun May  1 12:11:26 2011
    CPU:        4 x Intel(R) Core(TM)2 Quad CPU    Q6600  @ 2.40GHz
    CPUCache:   4096 KB
    Keys:       16 bytes each
    Values:     100 bytes each (50 bytes after compression)
    Entries:    1000000
    Raw Size:   110.6 MB (estimated)
    File Size:  62.9 MB (estimated)

    写性能 “填充”基准按顺序或随机顺序创建一个全新的数据库。每次操作后,“ fillsync”基准都会将数据从操作系统刷新到磁盘。其他写入操作会将数据留在操作系统缓冲区高速缓存中一段时间​​。“覆盖”基准进行随机写入,以更新数据库中的现有密钥。

    fillseq      :       1.765 micros/op;   62.7 MB/s
    fillsync     :     268.409 micros/op;    0.4 MB/s (10000 ops)
    fillrandom   :       2.460 micros/op;   45.0 MB/s
    overwrite    :       2.380 micros/op;   46.5 MB/s

    上面的每个“ op”对应于单个键/值对的写入。也就是说,随机写入基准测试的速度约为每秒40万次写入。

    每个“ fillsync”操作的成本(0.3毫秒)比磁盘搜索(通常为10毫秒)少得多。我们怀疑这是因为硬盘本身正在将更新缓冲在其内存中,并且在将数据写入磁盘之前做出了响应。根据硬盘在断电时是否有足够的电量保存内存,这可能是安全的,也可能是不安全的。

    阅读表现 我们列出了正向和反向顺序读取的性能,以及随机查找的性能。请注意,基准测试创建的数据库很小。因此,当工作集适合内存时,该报告将表征leveldb的性能。读取操作系统缓冲区高速缓存中不存在的数据的成本将由从磁盘获取数据所需的一个或两个磁盘搜索决定。写入性能几乎不受工作集是否适合内存的影响。

    readrandom  : 16.677 micros/op;  (approximately 60,000 reads per second)
    readseq     :  0.476 micros/op;  232.3 MB/s
    readreverse :  0.724 micros/op;  152.9 MB/s

    LevelDB在后台压缩其基础存储数据以提高读取性能。经过大量随机写入后,立即完成了上面列出的结果。压缩后的结果(通常会自动触发)更好。

    readrandom  : 11.602 micros/op;  (approximately 85,000 reads per second)
    readseq     :  0.423 micros/op;  261.8 MB/s
    readreverse :  0.663 micros/op;  166.9 MB/s

    读取的高昂成本中有一些来自对磁盘读取块的反复解压缩。如果我们为leveldb提供足够的缓存,以便它可以将未压缩的块保存在内存中,则读取性能将再次提高:

    readrandom  : 9.775 micros/op;  (approximately 100,000 reads per second before compaction)
    readrandom  : 5.215 micros/op;  (approximately 190,000 reads per second after compaction)

    储存库内容 有关更多说明,请参见doc / index.md。有关实现的简要概述,请参见 doc / impl.md。

    公共接口位于include / leveldb / *。h中。调用方不应在该程序包中包含或依赖任何其他头文件的详细信息。这些内部API可能会更改,恕不另行通知。

    头文件指南:

    include / leveldb / db.h:DB的主界面:从此处开始。
    
    include / leveldb / options.h:控制整个数据库的行为,还控制单个读写的行为。
    
    include / leveldb / comparator.h:用户指定的比较功能的抽象。如果只想按字节进行键比较,则可以使用默认的比较器,但是如果客户希望自定义排序(例如,处理不同的字符编码等),则可以编写自己的比较器实现。
    
    include / leveldb / iterator.h:用于遍历数据的接口。您可以从数据库对象获取迭代器。
    
    include / leveldb / write_batch.h:用于原子地将多个更新应用于数据库的接口。
    
    include / leveldb / slice.h:一个简单的模块,用于维护其他字节数组的指针和长度。
    
    include / leveldb / status.h:状态是从许多公共接口返回的,用于报告成功和各种错误。
    
    include / leveldb / env.h:OS环境的抽象。该接口的posix实现位于util / env_posix.cc中。
    
    include / leveldb / table.h,include / leveldb / table_builder.h:大多数客户端可能不会直接使用的低层模块。

    项目简介

    LevelDB是Google编写的快速键值存储库,提供了从字符串键到字符串值的有序映射

    发行版本

    当前项目没有发行版本

    贡献者 1

    XuanDai @xuan_xuan_2

    开发语言

    • C++ 95.1 %
    • C 3.2 %
    • CMake 1.7 %