最新要闻
- 【世界速看料】新能源汽车充电时为何要交停车费 专家:可防止充电之后不挪窝
- 当前热点-全球首枚3D打印火箭!美国“人族一号”发射失败
- 明年底有望普及!PCIe 5.0 SSD尴尬了 买的人太少:性能残血、价格死贵
- 我和你本应该各自好各自坏是什么歌?我和你本应该各自好各自坏歌词
- mirror男团中谁的人气最高?mirror男团年龄排序
- 亡羊补牢的亡是什么意思?亡羊补牢成语故事
- 班主任管理班级的策略与措施是什么?班主任教育随笔示范
- 《最终幻想16》新片段 宠物可以防止你迷路
- 卿卿日常李薇的真实身份是什么?卿卿日常郝葭死了吗?
- 质感旗舰!真我GT Neo5 SE未来感十足:纳米级光哑熔合工艺打造
- 女子不敢在隧道开车 交给无证男子驾驶 听到后果惊恐万分
- 196元暴涨至1910元 民宿回应五一价格翻十倍:先挂着 随时调整
- 最资讯丨专盯未成年?女孩添加“爱豆”QQ后被骗贷款3万4
- 连鸽两次 世界首枚3D打印火箭将再发射:这回能顺利吗?
- 酝酿产智融合“化学反应” 浙江衢州集中签约多家研究院
- 天天日报丨“帝王座驾、以辇为尊” 比亚迪云辇系统官宣:或为底盘新技术
广告
手机
iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
- 警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- 男子被关545天申国赔:获赔18万多 驳回精神抚慰金
- 3天内26名本土感染者,辽宁确诊人数已超安徽
- 广西柳州一男子因纠纷杀害三人后自首
- 洱海坠机4名机组人员被批准为烈士 数千干部群众悼念
家电
LevelDb-用户接口
- 优缺点
- 用户接口
- 基本读写
- 打开关闭数据库
- 读写
- 原子更新
- 同步/异步写
- 并发
- 迭代器
- 快照
- Slice
- 自定义key比较器
- 性能相关
- 压缩
- 缓存
- key设计
- 布隆过滤
- 获取范围数据大小近似值
- 基本读写
优缺点
- This is not a SQL database. It does not have a relational data model, it does not support SQL queries, and it has no support for indexes.
- Only a single process (possibly multi-threaded) can access a particular database at a time.
- There is no client-server support builtin to the library. An application that needs such support will have to wrap their own server around the library.TODO:回头再来理解
用户接口
基本读写
打开关闭数据库
#include #include "leveldb/db.h"leveldb::DB* db;leveldb::Options options;options.create_if_missing = true;leveldb::Status status = leveldb::DB::Open(options, "/tmp/testdb", &db);assert(status.ok());...delete db;
读写
std::string value;leveldb::Status s = db->Get(leveldb::ReadOptions(), key1, &value);if (s.ok()) s = db->Put(leveldb::WriteOptions(), key2, value);if (s.ok()) s = db->Delete(leveldb::WriteOptions(), key1);
原子更新
#include "leveldb/write_batch.h"...std::string value;leveldb::Status s = db->Get(leveldb::ReadOptions(), key1, &value);if (s.ok()) { leveldb::WriteBatch batch; batch.Delete(key1); batch.Put(key2, value); s = db->Write(leveldb::WriteOptions(), &batch);}
delete key1和put key2在一个原子请求中,要么都不执行,要么都执行。
同步/异步写
leveldb::WriteOptions write_options;write_options.sync = true;db->Put(write_options, ...);
默认写是异步的,可以设置上述参数实现同步写。异步写速度快。
并发
一个数据库同时只能被一个进程使用。一个进程中的DB对象是线程安全的,但是Iterator和WriteBatch这些对象不是。
(资料图)
迭代器
leveldb::Iterator* it = db->NewIterator(leveldb::ReadOptions());for (it->SeekToFirst(); it->Valid(); it->Next()) { cout << it->key().ToString() << ": " << it->value().ToString() << endl;}assert(it->status().ok()); // Check for any errors found during the scandelete it;
遍历所有的数据。
for (it->Seek(start); it->Valid() && it->key().ToString() < limit; it->Next()) { ...}
遍历[start, limit)区间的数据。
for (it->SeekToLast(); it->Valid(); it->Prev()) { ...}
倒序遍历,效率不如正序遍历。
快照
leveldb::ReadOptions read_options; read_options.snapshot = db->GetSnapshot(); assert(status.ok()); status = db->Put(leveldb::WriteOptions(), "key1", "value2"); leveldb::Iterator* it = db->NewIterator(read_options); for (it->SeekToFirst(); it->Valid(); it->Next()) { std::cout << it->key().ToString() << ": " << it->value().ToString() << std::endl; }
创建一个数据状态的可读快照。如上所示,Put key1,value2之前,数据库里key1对应的是value1,在Put之前创建了快照对象,Put之后,用快照的key1的值依然是value1。
Slice
it->key() and it->value()返回的都是Slice实例,能和string互转。
leveldb::Slice s1 = "hello";std::string str("world");leveldb::Slice s2 = str;
自定义key比较器
默认的是按key的字典序进行排序。
class TwoPartComparator : public leveldb::Comparator { public: // Three-way comparison function: // if a < b: negative result // if a > b: positive result // else: zero result int Compare(const leveldb::Slice& a, const leveldb::Slice& b) const { int a1, a2, b1, b2; ParseKey(a, &a1, &a2); ParseKey(b, &b1, &b2); if (a1 < b1) return -1; if (a1 > b1) return +1; if (a2 < b2) return -1; if (a2 > b2) return +1; return 0; } // Ignore the following methods for now: const char* Name() const { return "TwoPartComparator"; } void FindShortestSeparator(std::string*, const leveldb::Slice&) const {} void FindShortSuccessor(std::string*) const {}};TwoPartComparator cmp;leveldb::DB* db;leveldb::Options options;options.create_if_missing = true;options.comparator = &cmp;leveldb::Status status = leveldb::DB::Open(options, "/tmp/testdb", &db);...
性能相关
压缩
leveldb::Options options;options.compression = leveldb::kNoCompression;... leveldb::DB::Open(options, name, ...) ....
默认开启压缩,可用如上代码关闭。
缓存
#include "leveldb/cache.h"leveldb::Options options;options.block_cache = leveldb::NewLRUCache(100 * 1048576); // 100MB cacheleveldb::DB* db;leveldb::DB::Open(options, name, &db);... use the db ...delete dbdelete options.block_cache;
设置缓存。
leveldb::ReadOptions options;options.fill_cache = false;leveldb::Iterator* it = db->NewIterator(options);for (it->SeekToFirst(); it->Valid(); it->Next()) { ...}
大量读请求的场景下,可以关闭文件缓存,防止在内存中缓存大量数据。
key设计
leveldb中连续的key会存在一起,根据这个特性,经常一起访问的数据key最好相似。
filename -> permission-bits, length, list of file_block_idsfile_block_id -> data
比如有这两类数据,filename最好以"/"开始,file_block_id最好以数据开始,这样查找filename对应的元信息时,不会扫描到file_block_id对应的数据。
布隆过滤
leveldb::Options options;options.filter_policy = NewBloomFilterPolicy(10);leveldb::DB* db;leveldb::DB::Open(options, "/tmp/testdb", &db);... use the database ...delete db;delete options.filter_policy;
设置布隆过滤器,取key的特征,判定key存在的概率,从而减少不必要读。
获取范围数据大小近似值
leveldb::Range ranges[2];ranges[0] = leveldb::Range("a", "c");ranges[1] = leveldb::Range("x", "z");uint64_t sizes[2];db->GetApproximateSizes(ranges, 2, sizes);
参考资料:levedb doc
关键词:
-
世界视讯!Spring Cloud Alibaba微服务搭建(二)- 安装mysql
背景:CentOS7mysql8步骤:mysql安装文件,自行网上下载https: downloads mysql com archives community 网上说,centos
来源: 【天天报资讯】Vue之移动端viewport-vw适配
LevelDb-用户接口
世界视讯!Spring Cloud Alibaba微服务搭建(二)- 安装mysql
【世界速看料】新能源汽车充电时为何要交停车费 专家:可防止充电之后不挪窝
当前热点-全球首枚3D打印火箭!美国“人族一号”发射失败
明年底有望普及!PCIe 5.0 SSD尴尬了 买的人太少:性能残血、价格死贵
我和你本应该各自好各自坏是什么歌?我和你本应该各自好各自坏歌词
mirror男团中谁的人气最高?mirror男团年龄排序
亡羊补牢的亡是什么意思?亡羊补牢成语故事
班主任管理班级的策略与措施是什么?班主任教育随笔示范
《最终幻想16》新片段 宠物可以防止你迷路
看点:MS SQL服务器教程_编程入门自学教程_菜鸟教程-免费教程分享
卿卿日常李薇的真实身份是什么?卿卿日常郝葭死了吗?
质感旗舰!真我GT Neo5 SE未来感十足:纳米级光哑熔合工艺打造
女子不敢在隧道开车 交给无证男子驾驶 听到后果惊恐万分
196元暴涨至1910元 民宿回应五一价格翻十倍:先挂着 随时调整
最资讯丨专盯未成年?女孩添加“爱豆”QQ后被骗贷款3万4
连鸽两次 世界首枚3D打印火箭将再发射:这回能顺利吗?
全球热点!Python工具箱系列(二十八)
天天通讯!不知道
酝酿产智融合“化学反应” 浙江衢州集中签约多家研究院
天天日报丨“帝王座驾、以辇为尊” 比亚迪云辇系统官宣:或为底盘新技术
天天热文:早午餐合成一顿?医生提醒:细胞营养需求加大 更易长胖
即时看!警惕!义乌一女子险被电商“客服”骗走800万
当前观点:配可滑动中控屏、宾利同款B柱挂钩!极氪X内饰官图发布
每日看点!【数论与组合数学 3】Hensel 引理、原根
世界观察:Android使用SurfaceView实现签名板
每日聚焦:机器学习算法(三):基于horse-colic数据的KNN近邻(k-nearest neighbors)预测分类
全球微头条丨领域驱动设计DDD应用与最佳实践
环球观天下!Linux安装Redis教程
看热讯:小孩飞机票怎么收费
1000N连续旋转爆震 国内全新发动机点火成功:颠覆性优势
自爆卡车?奔驰EQE车库逆行:反怪特斯拉Model 3车主不让路
精选!男子在电竞酒店枕头下发现一窝老鼠 官方回应引网友吐槽:怎么能住
微头条丨8只海豚在美国海滩搁浅全部死亡 6只被安乐死
焦点速递!吉利全新SUV博越COOL官图发布:四出排气、1.5升发动机
要去海南旅游的老友们请注意,海南离岛免税购物,有新变化!
今日热闻!数据库系统原理之关系数据库
深入消息队列MQ,看这篇就够了!
全网最详细中英文ChatGPT-GPT-4示例文档-从0到1快速入门条目分类应用——官网推荐的48种最佳应用场景(附python/node.js/curl命令源
环球动态:以太网发明者鲍勃·梅特卡夫获图灵奖 计算机界的诺贝尔奖
又一股惨遭退市!市值暴跌99%
世界热议:《CS2》地图对比:起源2加持画质更明亮、细节丰富
去年净赚499亿元创纪录!保时捷2.7万名员工每人6.7万元奖金
Java八股文之基础篇
全球简讯:在 Arch Linux 中安装 GNOME 桌面所需步骤介绍
当你对 redis 说你中意的女孩是 Mia
环球时讯:琥珀手串会变色吗 琥珀手串会越戴越亮吗
环球看点!全球首个空中飞行出租车来了:巴黎开测 2024奥运会要用
【天天报资讯】抗早泄国产“伟哥”药物上市 市场有多大?专家称将翻倍增长 国内患者众多
全球首搭帝瓦雷音响!比亚迪腾势N7猎跑SUV亮相:运动低趴
当前速讯:鸡鸣寺游客爆满设反悔门引导离寺 网友神评:我佛果然慈悲 给反悔机会
全球今日报丨读C#代码整洁之道笔记04_重构C#代码识别代码坏味道
北方多地遭遇沙尘暴 PM爆表:气象台再发预警 还没退去
环球头条:流浪小狗乞求收养者一起带走玩具熊:画面让养狗人士泪目 为何被遗弃
今日关注:iPhone 14首发的车祸检测功能让人崩溃!苹果iOS 16.4将优化升级
世界热讯:读Java性能权威指南(第2版)笔记25_性能测试方法上
每日头条!LOL2023狗熊怎么出装(上单狗熊2023出装顺序)
精选!等了 11年 《CSGO2》电竞网游终于官宣:画质大升级 免费更新
天天简讯:使用C#开发微信公众号对接ChatGPT和DALL-E
今日关注:关于人工智能的思考,写在chatGPT爆火之时
Vue——initRender【八】
环球快讯:NVIDIA突然复活SLI!但不是你想的那样
每日看点!比尔·盖茨谈ChatGPT 赞其1980年以来最革命性技术进步
天天即时:爱子飞机上死亡:母亲怒告世界最大航司美国航空
谷歌的“GPT”终于憋出来了!但是 也不比百度强多少啊
当前热议!抖音救人一命!男子发头孢配酒视频获救:客服教科书式报警
头条:交700个税的工资多少_j700
今日讯!SEO优化:友情链接!真心换真心?
通过 poe 免费使用ChatGPT、GPT-4
天天观察:71.C++标准库类型string
CTAS建表时报错ORA-65114
Go HTTP编程
天天热点!苹果官方推荐!iNote灵感笔记新版发布:超紧凑模式来了
热讯:金士顿无敌了!拿下2022年全渠道SSD市场占有率第一
高德、口碑正式合并:阿里旗下本地到店业务将统一整合
热推荐:国科微:目前晶圆产能较前两年已趋于缓和
全球最新:关于基于AWS-Cli的方式对RDS资源批量添加tag的方法
全球微速讯:小红书去水印技巧合集(亲测有效!!!)
每日热点:Git基本使用
RHEL无法配置网关问题一则
世界快看点丨加快步伐!腾讯高管:“生成式AI”或纳入微信和QQ
天津金逸影城
2023年3月22日(软件工程日报)
阿里云大使和代理商的优惠的区别与选择
动态焦点:美债市场危机四伏 “安全资产”吸引力或进一步下降
3GB显存被封杀!《光环无限》都不让玩
Opera浏览器推送97.0.4719.26更新:集成ChatGPT与AI总结功能
世界速递!碧桂园打造湖湘人居典范 护航品质生活
世界新动态:70.C++ using的三种用法详解
环球资讯:农业银行发行700亿元二级资本债进一步增强资本实力
3599元 铭凡NUCG5迷你主机上架:碳纤维机身、下压式散热
世界百事通!比RTX 4080小一半!NVIDIA发布RTX 4000 SFF半高卡:功耗仅70瓦
【世界新要闻】专家:沙尘天气里最好别戴隐形眼镜
焦点播报:成龙和甄子丹"打架"谁会赢?甄子丹:我老了 他更老
性价比更高 有哪些散片CPU值得入手?
每日精选:Swift 备忘清单_开发速查表分享
全球信息:利用“姿态相似度比较”功能,对运动(动作)识别检测“秒”适配
国民第一APP坐实了 微信月活破13亿无可匹敌
天天时讯:堆料最多的小米手机!曝小米13 Ultra最高配1TB UFS 4.0闪存