易语言资源网 - 做最全的易语言资源下载社区
精易论坛授权登录

基于谷歌开源的 LevelDB 键值库封装模块   [复制链接]

    2023-04-10 16:23:29
    高级教程源码
    易语言资源网
    1134 次浏览
    来源链接

什么是LevelDB

  • LevelDB是一个开源的键值对存储库,由Google开发和维护。它是一个快速、轻量级、高性能的存储库,适用于各种应用程序和平台。LevelDB支持多种语言,如C++、Java、Python等。
  • LevelDB采用单一进程、单线程的设计,它的存储方式类似于一个有序的键值对列表。每个键值对都被存储在磁盘上,并且可以按照键的顺序进行迭代。LevelDB的存储引擎使用了一种基于内存的B树数据结构,这种数据结构可以快速地插入、查找和删除数据。

LevelDB还支持数据压缩,可以在磁盘使用更少的空间来存储更多的数据。此外,它还提供了一些高级特性,如事务、快照和迭代器,以便于处理和管理数据。

LevelDB整体架构

  • LevelDb本质上是一套存储系统以及在这套存储系统上提供的一些操作接口。为了便于理解整个系统及其处理流程,我们可以从两个不同的角度来看待LevleDb:静态角度和动态角度。从静态角度,可以假想整个系统正在运行过程中(不断插入删除读取数据),此时我们给LevelDb照相,从照片可以看到之前系统的数据在内存和磁盘中是如何分布的,处于什么状态等;从动态的角度,主要是了解系统是如何写入一条记录,读出一条记录,删除一条记录的,同时也包括除了这些接口操作外的内部操作比如compaction,系统运行时崩溃后如何恢复系统等等方面。

  LevelDB的优点

  • LevelDB采用了写前日志(WAL)和快照(Snapshot)等机制,保证了数据的可靠性和一致性
  • LevelDB的存储引擎支持数据分片,可以将大型数据集分成多个小型的数据集进行存储,从而提高了存储的可扩展性。
  • LevelDB使用一种称为“后台压缩(Background Compression)”的技术来压缩数据。它会在后台运行一个压缩线程,定期检查数据库中的数据并压缩需要压缩的数据块。这样可以避免在压缩时对数据库的读写操作造成影响。
  • LevelDB在存储数据时是按照键的排序方式进行存储的,它并没有明确的容量限制,可以存储非常大的数据 [理论上无限制容量]。而类似MMKV框架限制容量的方式是使用了一种固定大小的映射文件,即在创建MMKV实例时就已经确定了最大容量,超过容量时就不能再写入数据[大概在 4GB 左右]

 

  • 如果你的应用需要大规模数据存储、数据持久化、支持多种编程语言,可以考虑使用LevelDB。因为LevelDB采用了基于日志结构的存储引擎,能够支持大规模数据存储,并且提供了多语言支持。
  • 虽然速度上虽然没Hashmap快,但LevelDB数据安全比较可靠,同时支持线程安全

更新日志: 1.2   2023/04/06 20:00

  • 修复键值为空时取出数据出现报错
  • 优化写入和读取的代码,单线程10W写入650毫秒
  • 由于不清楚 C++数组怎么传递至易语言的数组【取所有键】目前是先返回所有键的字符再分割
  • 有谁清楚 C++数组怎么传递至易语言的数组 可以联系我

补充内容 (2023-4-8 23:25):

新版本转至 https://bbs.125.la/forum.php?mod=viewthread&tid=14770677



点我下载 (已有 28 次下载)

引用模块


源码文件名 模块文件名
调用.e
精易模块.ec
leveldb-kv数据库.ec


引用支持库


源码文件名 支持库文件名 支持库标识
LevelDB.e 系统核心支持库 5.7 d09f2340818511d396f6aaf844c7e325
特殊功能支持库 3.1 A512548E76954B6E92C21055517615B0
调用.e 系统核心支持库 5.7 d09f2340818511d396f6aaf844c7e325
特殊功能支持库 3.1 A512548E76954B6E92C21055517615B0


[错误报告]   上一篇:Redis连接池     下一篇:易语言仿写b站up程序员血月python...