范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

LevelDB从前门到后门之蜻蜓点水篇

  因为自己对数据库比较感兴趣,所以听说LevelDB时间比较早,但因种种原因一直没有写过相关的文章。这段时间不忙,准备做一个系列相关的主题。
  我们知道,现在主流的数据库有从关系型数据库逐渐往分布式数据库迁移的趋势,比如大名鼎鼎的TiDB和PolarDB。而TiDB底层存储引擎使用的是RocksDB,RocksDB则使用了LevelDB(这就是开源的力量,相互借鉴)。从这方面看,LevelDB的性能可见一斑。
  本篇文章主要介绍LevelDB的一些特点和基础概念。LevelDB是LSM (Log Structured Merge)算法的实现。里面涉及大量关于文件系统读写技术的真实案例。我们可以从中收货很多重要信息。
  当前官方的源码地址:C++版本,另外还有两个移植版本分别是GoLevelDB和JavaLevelDB。工程从结构和文件命名上基本保持了跟C++版本的一致。各位看官可以根据自己的喜好各取所需。不过建议还是从C++官方版本看起。有位老哥之前做过一版注释,不过可能是基于main主分支为母版,但是并不影响代码阅读。我使用当前版本为1.22。
  我自己用的是Mac电脑,主要开发语言是Java。对于C++的使用,更倾向于使用centos系统。所以我平时都是自建虚拟机,然后通过VSCode插件Remote Development"远程"控制来完成项目编译和调试工作。
  获取源代码: git clone --recurse-submodules https://github.com/google/leveldb.git
  构建: mkdir -p build && cd build cmake -DCMAKE_BUILD_TYPE=Release .. && cmake --build .
  注:编译完是没有 out-shared  , out-static  这两个文件夹 。
  头文件介绍:
  leveldb 对外暴露的接口都在  include/*.h   中,用户不应该依赖任何其它目录下的头文件,这些内部 API 可能会在没有警告的情况下被改变。 include/leveldb/db.h  :主要的 DB 接口,从这开始。 include/leveldb/options.h  : 控制数据库的行为,也控制当个读和写的行为。 include/leveldb/comparator.h  : 比较函数的抽象。如果你只想对 key 逐字节比较,可以直接使用默认的比较器。如果你想要自定义排序(例如处理不同的字符编码、解码等),可以实现自己的比较器。 include/leveldb/iterator.h  :迭代数据的接口,你可以从一个 DB 对象获取到一个迭代器。 include/leveldb/write_batch.h  :原子地将多个操作应用到数据库。 include/leveldb/slice.h  :类似 string,维护着指向字节数组的指针和对应的长度。 include/leveldb/status.h  :许多公共接口都会返回  Status  ,用于报告成功或各种错误。 include/leveldb/env.h  :操作系统环境的抽象,该接口的 posix 实现位于  util/env_posix.cc   中. include/leveldb/table.h, include/leveldb/table_builder.h  :底层的模块,大多数用户可能不会直接用到。
  我们可以编写一段代码,来进行简单的测试: #include  #include  #include  #include  using namespace leveldb;  int main()  {     leveldb::DB* db;     leveldb::Options options;     options.create_if_missing = true;     // 打开一个数据库,不存在就创建     leveldb::Status status = leveldb::DB::Open(options, "/tmp/testdb", &db);     assert(status.ok());     // 插入一个键值对     status = db->Put(leveldb::WriteOptions(), "hello", "LevelDB");     assert(status.ok());     // 读取键值对     std::string value;     status = db->Get(leveldb::ReadOptions(), "hello", &value);      assert(status.ok());     std::cout << value << std::endl;      delete db;     return 0; }
  编译命令: g++   test_db.cc  -o test_db  -L /usr/local/lib64  -lleveldb -lpthread -D_GLIBCXX_USE_CXX11_ABI=0  -std=c++11
  指定静态库路径:-L /usr/local/lib64 ,静态库名称:-lleveldb D_GLIBCXX_USE_CXX11_ABI:GCC版本1.5前后接口兼容性问题闭坑参数。
  执行test_db文件后,进入/tmp/testdb目录下,看到以下几个文件: [root@localhost testdb]# cd /tmp/testdb/ [root@localhost testdb]# ll total 16 -rw-r--r-- 1 root root 34 Oct 14 03:45 000003.log -rw-r--r-- 1 root root 16 Oct 14 03:45 CURRENT -rw-r--r-- 1 root root  0 Oct 14 03:45 LOCK -rw-r--r-- 1 root root 77 Oct 14 03:45 LOG -rw-r--r-- 1 root root 50 Oct 14 03:45 MANIFEST-000002 [root@localhost testdb]# pwd /tmp/testdb [root@localhost testdb]#
  喜欢用Java的同学可以引入对应的文件包同样可以完成上面的操作,POM文件:        org.iq80.leveldb       leveldb-api       0.12         org.iq80.leveldb       leveldb       0.12 
  Java代码: import org.iq80.leveldb.DB; import org.iq80.leveldb.DBFactory; import org.iq80.leveldb.Options; import org.iq80.leveldb.impl.Iq80DBFactory; import java.io.File; import java.io.IOException;  public class TestLevelDB {     public static void main(String[] args) throws IOException {         DBFactory factory = new Iq80DBFactory();         Options options = new Options();         options.createIfMissing(true);         DB db = factory.open(new File("/tmp/testdb"), options);         db.put(Iq80DBFactory.bytes("leveldb") , Iq80DBFactory.bytes("It is leveldb."));         byte[] bytes = db.get(Iq80DBFactory.bytes("leveldb"));         System.out.println(Iq80DBFactory.asString(bytes));     } }总结
  通过以上内容,我大概了解到了一些leveldb的特性和不足,并且做了简单的上机实验。更多功能测试,可以参考官方文档。后续我们将系统阐述leveldb各模块实现以及模块之间如何协作高效完成文件的读写能力。
  资料参考:
  基本概念 — leveldb-handbook 文档
  Leveldb 基本介绍和使用指南 - 掘金 (juejin.cn)
  头条居然不支持外链!

徽风美宿迎客天下!同程旅行徽州民宿市场发展白皮书解读编者按民宿是乡村文旅的新型载体,是满足民众美好生活需求的新兴业态,发展乡村民宿产业是实现乡村振兴的重要路径。近年来,黄山市借势全域旅游发展,依托自然文化生态等资源优势,把民宿业发展RCEP实施一周年带来巨大红利(文潘强周强黄浩铭郭轶凡)在广东深圳华丝企业股份有限公司的生产车间里,鲜艳又柔软的丝绸如流水一般在机器间蜿蜒盘旋,它们即将被制成各类华服,运往世界各地。2022年出口日本市场的衣服俄罗斯高明吗?俄乌战争中,如何理解俄罗斯的高明战术?俄罗斯在普京治下已经二十年有余了,这不像西方国家两党消磨,政策摇摆,普京的西方看也摇摆,不过就算不再摇摆这段时间也很久了,战争准备也许十几年前延期服役,画好军旅延长线第74集团军某旅一级上士王振兴没想到,自己的军旅生涯真的画上了延长线。延期服役申请被批准那天,王振兴正在执行训练保障任务。得知消息,他很高兴虽然军衔没有变化,但肩上的责任更重了。延宁白湖边鱼那时,湖里的鱼,都直接游向了餐桌。听一位渔佬儿站在岸边说湖里的鱼捞来现煮,不用姜酒。说的是活鱼之鲜美,却把鱼厨的技艺贬为无聊。40年前,淳安是个遥远的地方,山峦连绵。从杭州开车,在书是人类进步的阶梯如果问我最忠实的朋友是谁?那非书莫属了!我最喜欢的事情就是读书。握一卷诗书,添一杯香茗,盘膝而坐,让暗香盈袖。书陪伴着我走过每个岁月,它似一个跳跃的音符,也似一幅流光溢彩的画面。它垂直社交类互联网企业不断增加,这类企业到底有何盈利模式?互联网在经过了数十年的发展后进一步贴近了大众的生活,提高了大众的生活质量。自2011年以来,我国互联网步入迅猛发展的阶段,垂直化发展是这个阶段的主要趋势。相应产生的结果就是越来越多新春走基层快递企业日薪千元招人?成都地区快递用工整体平稳封面新闻记者马梦飞兔年春节渐近,春节假期也即将到来,与此同时,快递企业迎来了一年当中最繁忙的时段之一。今年,不出意外的是,各家快递公司均喊出了春节不打烊的口号,曾经作为行业优势的一中国梦大国工匠篇丨张存升科技创新淬炼金刚钻走进河南省力量钻石股份有限公司激光切割厂房内,30多台切割机激光闪耀,数控监测器上,一道道白光不断围绕着一个个小方块展开精准切割,小方块不足以厘米计。车间内,在张存升的操作下,30美国小弟韩国等举起大棒叫我们过去旅游,你去吗?韩国欢迎中国游客早日到访济州韩国日本等国家为了讨好美国大哥,操弄ZZ,以防止疫情扩散为由,区别对待我国游客。我国进行了反制,暂停了短期签证。美国的小弟们现在知道日子不好过,马上又要OpenAI生态圈OpenAI大未来的关键点你好,这里是科技前哨,今天继续跟你分享人工智能领域有关的新鲜见闻。最近,科技前哨的小伙伴发现,我们做了不少人工智能领域的相关研究,都有提到OpenAI,却始终没有介绍过这家超级独角
徐矿股份上市前夕壕无人性,27亿用于并购,37亿用于分红,平均8天受到一次行政处罚IPO观察12月8日,江苏徐矿能源股份有限公司(下称徐矿股份)将主板IPO上会,公开发行不超过不低于10亿股,不超过20亿股。营收超100亿,净利超20亿元,上市前夕豪气分红37亿,并花27断水断电断网也断气,乌克兰如何挺过第一个战争寒冬?采访观察者网杨子江俄乌陷入实际战争状态已有超过半年之久,双方军事行动仍然未见胜负端倪随着12月临近,东欧大部分地区进入寒冷的冬季雪风之中。观察者网专访身在乌克兰中部地区的中国公民李绝了!天下长河两个犟种的跌宕起伏,说透了历史认知规矩罗晋领衔的历史剧天下长河为什么能火?网络上有人给出了答案它不是一部非黑即白的电视剧。确实,因为历史的复杂性和人的局限性,真正的历史事件,后人用非黑即白的眼光去评判,都会有失偏颇。天刚刚,北京上海发布!普京核战争风险正上升!一国突发总统被弹劾当天被捕!特斯拉油价又大跌中国基金报记者赵心怡美东时间12月7日(周三),美国三大股指涨跌不一,标普500指数录得连续第五个交易日下跌,投资者担心美联储加息时间可能比预期更长,多家华尔街大行发出经济衰退警告还没发布!小米13系列配置已经曝出!两款机型配置有何不同?临近年底,许多手机厂商都打算在这个时间段推出自家的旗舰级机型!根据网络上的消息,这个月即将登场的新机数量高达十几款!而这十余款里面,就有小米13系列的身影!这个系列的机型目前还没发赞!众创指购直播电商SaaSERP系统获国家版权局颁发的软件著作证近日,众创指购研发的众创指购直播电商SaaSERP分销管理系统,获得国家版权局颁发的计算机软件著作权登记证书。这是众创指购收到的第68项软著。标志着众创指购在技术研发上又取得新突破来了!华东2023年拟开商业项目清单,你最爱哪个?出品联商网搜铺网撰文高天数据统计刘嘉玲在疫情常态化背景下,整个2022年的商业地产起伏发展城市更新步奏加快轻资产模式成为各大企业转型的新趋势老牌购物中心战略性撤退商管企业独立上市在半导体行业研究及2023年度策略周期和成长共振(报告出品方方正证券)半导体2023年展望半导体设备投资框架晶圆厂设备支出2023年970亿美元根据SEMI9月数据,2022年全球晶圆设备支出将达到990亿美元的历史新高同时预计最惨自动驾驶IPO公司上市一年,50亿美元市值几乎跌没编译凌敏平川来源AI前线最近几个月,自动驾驶遭遇寒潮。前有大众和福特共同参股支持的自动驾驶独角兽公司ArgoAI突然官宣倒闭,后有对冲基金TCI直接呼吁谷歌,缩减对自动驾驶部门Wa乘联会发布新能源汽车销量特斯拉单月交付超10万辆中国网汽车12月7日讯记者日前获悉,乘联会发布了有关11月新能源乘用车厂家批发销量的预估数据,考虑到主力企业中的个别企业11月减产因素与增量因素的平衡,11月主力企业占比较上月主力数字基础设施怎么建?有何意义?专家这样说数字基础设施是数字经济发展的基石。2022年国务院印发十四五数字经济发展规划明确提出,优化升级数字基础设施。加快建设信息网络基础设施,推进云网协同和算网融合发展,有序推进基础设施智