rocksdb merge的简单记录
背景
rocksdb的merge主要是为了解决读&写需要两步的操作。例如定义一个累加器,总得先把之前的值读出来才能加。
下面给两个例子,大家可以直接用。
AboutAddMerge
#include <iostream>
#include <rocksdb/db.h>
#include <rocksdb/table.h>
#include <rocksdb/options.h>#include <rocksdb/filter_policy.h>#include <rocksdb/iostats_context.h>
#include <rocksdb/trace_reader_writer.h>
#include "utilities/merge_operators.h"
#include "util/coding.h"using namespace rocksdb;using namespace std;
rocksdb::DB* db;
rocksdb::Options option;void OpenDB() {option.create_if_missing = true;option.compression = rocksdb::CompressionType::kNoCompression;option.merge_operator =MergeOperators::CreateUInt64AddOperator();auto s = rocksdb::DB::Open(option, "./db", &db);if (!s.ok()) {cout << "open faled : " << s.ToString() << endl;exit(-1);}cout << "Finish open !"<< endl;
}void DoWrite() {int j = 0;string key = std::to_string(j);std::string value;char buf[8];rocksdb::Status s;EncodeFixed64(buf, 15);db->Merge(rocksdb::WriteOptions(),key, std::string(buf,8));EncodeFixed64(buf, 33);s = db->Merge(rocksdb::WriteOptions(),key, std::string(buf,8));EncodeFixed64(buf, 77);s = db->Merge(rocksdb::WriteOptions(),key, std::string(buf,8));if (!s.ok()) {cout << "Merge value failed: " << s.ToString() << endl;exit(-1);}cout << "Finish merge !" << endl;s = db->Get(rocksdb::ReadOptions(), key, &value);if (!s.ok()) {cout << "Get after only merge is failed " << s.ToString() << endl;exit(-1);}cout << "Get merge value " << value.size() << " " << DecodeFixed64(value.data()) << endl;
}int main() {OpenDB();DoWrite();return 0;
}
最终打印结果
Get merge value 8 155
AboutAppendMerge
#include <rocksdb/db.h>
#include <rocksdb/iostats_context.h>
#include <rocksdb/options.h>
#include <rocksdb/table.h>
#include <rocksdb/trace_reader_writer.h>#include <iostream>#include "utilities/merge_operators.h"
using namespace rocksdb;rocksdb::DB* db;void OpenDB() {rocksdb::Options option;option.create_if_missing = true;// 默认会用 逗号分隔 不同的mergeoption.merge_operator = MergeOperators::CreateStringAppendOperator();auto s = rocksdb::DB::Open(option, "./db", &db);if (!s.ok()) {std::cout << "open faled : " << s.ToString() << std::endl;exit(-1);}std::cout << "Finish open !" << std::endl;
}void DoWrite() {std::string key = "mykey5";std::string value;rocksdb::WriteOptions writeOptions;db->Merge(writeOptions, key, "1");db->Merge(writeOptions, key, "3");db->Merge(writeOptions, key, " ");db->Merge(writeOptions, key, "abc");rocksdb::Status s = db->Merge(writeOptions, key, "6");if (!s.ok()) {std::cout << "Merge value failed: " << s.ToString() << std::endl;exit(-1);}s = db->Get(rocksdb::ReadOptions(), key, &value);if (!s.ok()) {std::cout << "Get after only merge is failed " << s.ToString() << std::endl;exit(-1);}std::cout << "Get merge value " << key << " " << value << std::endl;
}int main() {OpenDB();DoWrite();return 0;
}
最后打印结果
Get merge value mykey5 1,3, ,abc,6
CMakeList.TXT
add_executable(AboutAppendMerge app/AboutAppendMerge.cpp)
target_link_libraries(AboutAppendMerge ${ROCKSDB_SHARED_LIB})add_executable(AboutAddMerge app/AboutAddMerge.cpp)
target_link_libraries(AboutAddMerge ${ROCKSDB_SHARED_LIB})
参考资料
https://blog.csdn.net/Z_Stand/article/details/119703176
相关文章:
rocksdb merge的简单记录
背景 rocksdb的merge主要是为了解决读&写需要两步的操作。例如定义一个累加器,总得先把之前的值读出来才能加。 下面给两个例子,大家可以直接用。 AboutAddMerge #include <iostream> #include <rocksdb/db.h> #include <rocksdb…...
安卓开发板_MTK联发科评估套件_安卓开发板Demo板
开发板简介: 安卓开发板采用了副板架在底板的配套方式,支持更换不同平台核心板的副板就能直接完成对某个平台核心板在客户项目需求中的技术评估,既能在研发前期节约人力和物力成本,也能更直观体现出不同平台的核心板在同一个硬件下…...
maven指定模块快速打包idea插件Quick Maven Package
问题背景描述 在实际开发项目中,我们的maven项目结构可能不是单一maven项目结构,项目一般会用parent方式将各个项目进行规范; 随着组件的数量增加,就会引入一个问题:我们只想打包某一个修改后的组件A时就变得很不方便…...
i春秋云境靶场之CVE-2022-26965
1.环境搭建 提示我们后台存在rce,也就是命令执行漏洞 2.访问环境 cm - cmshttp://eci-2zeh0yf0ohu88wr26unq.cloudeci1.ichunqiu.com/ 我们可看到admin,我们点击,发现是一个登录页面,我们输入弱口令admin,登录成功 3.文件上传 我们在选项——选择主题…...
流域生态系统服务评价、水文水生态分析、碳收支、气候变化影响、制图等领域中的应用
流域生态系统服务评价、水文水生态分析、碳收支、气候变化影响、制图等领域中的应用 专题一、生态系统服务评价技术框架 1.1 生态系统服务概述 1.2 流域生态系统服务的分类与作用 1.3 生态系统服务评估方法 专题二、AI大模型与生态系统服务评价 2.1 目前常用大模型介绍 2…...
超像素提取加svm训练,鼠标点击选择标签(左键为正样本,右键为负样本)
自己写的demo记个笔记用 替换掉图片路径和保存路径svm训练的模型路径就可以跑 效果我觉的不行,目前也不知到如何优化、希望有大佬可以给点建议 流程 处理超像素 选择超像素 提取HOG、颜色直方图、LBP直方图特征 训练 预测 #include <iostream> #include <…...
Vue 中引入 ECharts 的详细步骤与示例
在Vue项目中引入ECharts,可以让我们轻松地在前端页面中展示各种图表。ECharts 是一个基于 JavaScript 的开源可视化图表库,它提供了丰富的图表类型和强大的配置选项,使得在Vue项目中集成和使用变得非常方便。 一、准备工作 创建Vue项目&…...
在 EC2 AWS 中开启防火墙后将自己锁定在 SSH 之外
在搭建ftp时,开启了系统防火墙的几个端口,并且设置了防火墙开机自启。当设置好之后,关闭了putty,再次连接SSH时,发现连接错误。仔细一想,防火墙没有开启22端口,这不嘎了么,自己把自己…...
OpenGL 进阶系列02 - OpenGL绘制三角形的必要步骤
目录 一:概述 二:必要的绘制步骤 三:相关OpenGL API 含义: 1. glViewport 介绍 2. OpenGL的 VAO 介绍 3. OpenGL的VBO介绍 4. OpenGL的着色器 API 介绍 5. OpenGL 绘制API介绍 四:例子 一:概述 要使用 OpenGL 绘制一个三角形,通常需要几步,需要使用哪些必要的Open…...
MySql基础34题写题记录(11-20)
11、取得最后入职的5名员工 select ename from emp order by hiredate desc limit 5; 12、取得每个薪水等级有多少员工 先取每个员工的薪水等级 Select e.ename,s.grade grade From emp e Join salgrade s On e.sal between s.losal and s.hisal 接着直接分组求 Select …...
设计模式——单例模式(1)
一、写在前面 设计模式有23种,每一篇是一种模式,从简单到难,第一篇从最简单的单例模式试试水创建型模式 单例模式工厂方法模式抽象工厂模式原型模式建造者模式 结构型模式行为型模式 二、介绍 单例模式是指一个类只能创建出一个对象&#…...
剧本杀小程序:提升玩家游戏体验,带动经济效益
剧本杀作为一个新兴游戏方式,能够满足年轻人的社交需求,让大众体验到不太一样的人生,在角色中进行演绎。这种独特的游戏模式吸引了众多的年轻玩家,由此,剧本杀行业进入了爆发期。 如今,在科技的不断创新下…...
Linux系统通过编辑crontab来设置定时任务---定时关机
在Linux系统中,crontab 是用来设置周期性被执行的指令的守护进程。通过编辑 crontab,您可以安排定时任务,比如定时关机、定时备份文件、定时运行脚本等。以下是如何编辑 crontab 来设置定时任务的步骤: 打开终端:您可以…...
Mac电脑word文档误删,4个方法快速恢复
对于使用Mac的用户来说,丢失重要的Word文档可能会为学习或工作带来严重的影响。不过,幸运的是,关于mac word 文档恢复方法还是有很多的,通常帮助Mac用户轻松找回丢失的word文档。接下来,小编将介绍一些在Mac上恢复丢失…...
threejs-基础材质设置
一、介绍 主要内容:基础材质(贴图、高光、透明、环境、光照、环境遮蔽贴图) 主要属性: side: three.DoubleSide, //设置双面 color: 0xffffff, //颜色 map: texture, //纹理 transparent: true, // 透明度 aoMap: aoTexture, //ao贴图 aoMapIntensity: 1…...
【大模型开发】AI提示词框架:解锁ICIO、CRISPE、BROKE和RASCEF的强大潜力
作为一名经验丰富的程序员,您是否曾感到在与AI助手交互时难以获得理想的输出?本文将为从事AI开发或经常使用AI工具的技术人员介绍四个强大的AI提示词框架:ICIO、CRISPE、BROKE和RASCEF。这些框架能帮助您更有效地与AI模型沟通,提高工作效率。 1. ICIO框架:简洁而有力 IC…...
Rust学习如何更有信心?
关于如何学习Rust,在Hacker News上有一篇非常火的教程,作者通过自己的Rust学习经历,向大家指出了一条如何学习Rust的路径。 学习一门编程语言必不可少的是阅读技术书籍和编写代码,要想掌握Rust,两者的交替学习至关重要…...
3个简单易懂的方法,教你马上掌握excel表格数据打印技巧
在EXCEL表格里制作表格后,表格的数据有可能不正好是一页,如果就这样打印出来,数据有可能不完整,表格也不美观,还浪费纸张,那么如何将表格打印在一张纸上呢?下面小编为你介绍几种方法和解决方案&…...
dbt 增量策略模型实战教程
上文我们介绍了增量策略的理论知识,本文结合实际场景介绍如何合理利用增量策略,内容包括应用场景、常见问题及解决方案。 应用场景 增量模型是定义如何增量向数据模型添加数据的有效方法——假设我们有描述信用卡交易的数据表——我们创建DBT模型&#…...
【含文档】基于Springboot+Android的校园论坛系统(含源码+数据库+lw)
1.开发环境 开发系统:Windows10/11 架构模式:MVC/前后端分离 JDK版本: Java JDK1.8 开发工具:IDEA 数据库版本: mysql5.7或8.0 数据库可视化工具: navicat 服务器: SpringBoot自带 apache tomcat 主要技术: Java,Springboot,mybatis,mysql,vue 2.视频演示地址 3.功能 系统定…...
mongodb源码分析session执行handleRequest命令find过程
mongo/transport/service_state_machine.cpp已经分析startSession创建ASIOSession过程,并且验证connection是否超过限制ASIOSession和connection是循环接受客户端命令,把数据流转换成Message,状态转变流程是:State::Created 》 St…...
论文浅尝 | 基于判别指令微调生成式大语言模型的知识图谱补全方法(ISWC2024)
笔记整理:刘治强,浙江大学硕士生,研究方向为知识图谱表示学习,大语言模型 论文链接:http://arxiv.org/abs/2407.16127 发表会议:ISWC 2024 1. 动机 传统的知识图谱补全(KGC)模型通过…...
鱼香ros docker配置镜像报错:https://registry-1.docker.io/v2/
使用鱼香ros一件安装docker时的https://registry-1.docker.io/v2/问题 一键安装指令 wget http://fishros.com/install -O fishros && . fishros出现问题:docker pull 失败 网络不同,需要使用镜像源 按照如下步骤操作 sudo vi /etc/docker/dae…...
使用Matplotlib创建炫酷的3D散点图:数据可视化的新维度
文章目录 基础实现代码代码解析进阶技巧1. 自定义点的大小和颜色2. 添加图例和样式美化3. 真实数据应用示例实用技巧与注意事项完整示例(带样式)应用场景在数据科学和可视化领域,三维图形能为我们提供更丰富的数据洞察。本文将手把手教你如何使用Python的Matplotlib库创建引…...
JS手写代码篇----使用Promise封装AJAX请求
15、使用Promise封装AJAX请求 promise就有reject和resolve了,就不必写成功和失败的回调函数了 const BASEURL ./手写ajax/test.jsonfunction promiseAjax() {return new Promise((resolve, reject) > {const xhr new XMLHttpRequest();xhr.open("get&quo…...
NPOI Excel用OLE对象的形式插入文件附件以及插入图片
static void Main(string[] args) {XlsWithObjData();Console.WriteLine("输出完成"); }static void XlsWithObjData() {// 创建工作簿和单元格,只有HSSFWorkbook,XSSFWorkbook不可以HSSFWorkbook workbook new HSSFWorkbook();HSSFSheet sheet (HSSFSheet)workboo…...
[大语言模型]在个人电脑上部署ollama 并进行管理,最后配置AI程序开发助手.
ollama官网: 下载 https://ollama.com/ 安装 查看可以使用的模型 https://ollama.com/search 例如 https://ollama.com/library/deepseek-r1/tags # deepseek-r1:7bollama pull deepseek-r1:7b改token数量为409622 16384 ollama命令说明 ollama serve #:…...
认识CMake并使用CMake构建自己的第一个项目
1.CMake的作用和优势 跨平台支持:CMake支持多种操作系统和编译器,使用同一份构建配置可以在不同的环境中使用 简化配置:通过CMakeLists.txt文件,用户可以定义项目结构、依赖项、编译选项等,无需手动编写复杂的构建脚本…...
Docker拉取MySQL后数据库连接失败的解决方案
在使用Docker部署MySQL时,拉取并启动容器后,有时可能会遇到数据库连接失败的问题。这种问题可能由多种原因导致,包括配置错误、网络设置问题、权限问题等。本文将分析可能的原因,并提供解决方案。 一、确认MySQL容器的运行状态 …...
6️⃣Go 语言中的哈希、加密与序列化:通往区块链世界的钥匙
Go 语言中的哈希、加密与序列化:通往区块链世界的钥匙 一、前言:离区块链还有多远? 区块链听起来可能遥不可及,似乎是只有密码学专家和资深工程师才能涉足的领域。但事实上,构建一个区块链的核心并不复杂,尤其当你已经掌握了一门系统编程语言,比如 Go。 要真正理解区…...
