【最后203篇系列】020 rocksdb agent

news2025/4/1 23:52:35

今天还是挺开心的一天,又在工具箱里加了一个工具。嗯,但是快下班的时候也碰到一些不太顺心的事,让我有点恼火。我还真没想到一个专职的前端,加测试,以及其他一堆人,竟然不知道后端返回的markdown,在前端渲染成html展示后,如果字体太大,应该去改css这件事。

实在比较无语,还好有deepseek
在这里插入图片描述
在这里插入图片描述
反正我也纯粹技术直男那种气不过,突然灵光一闪,难道:
在这里插入图片描述

好吧,反正气也消了,冷静下来想想有啥要和老版沟通的要仔细,哈哈

言归正传,今天的一大收获是rocksdb agent。

大体是这么一回事,rocksdb是一个基于「硬盘」的kv数据库,因为前面做的伪实时服务是需要这么一个kv库来缓存结果的。最好的选择当然是redis,目前也是这么干的,还能直接设置一个ttl,很方便。

我自己的服务都喜欢把内存往大了整,再配机器肯定不会低于128G的,如果是霄龙,必须是256G+的。不过有时候生产上的服务器可能不一定能做主;另外还有一个点是,redis我定位不做持久化,所以在需要做程序持久化缓存的时候就得用别的库。目前我用mongo,其实也还不错,mongo的用途太多了。但mongo也有问题,如果真的用在生产上,大量零碎的并发还是烦人的。

我发现rocksdb刚好卡在这个空挡上,使用起来是类似下面这样的样子:

import rocksdb

# 打开或创建一个 RocksDB 数据库
db = rocksdb.DB("test.db", rocksdb.Options(create_if_missing=True))

# 插入数据
db.put(b"key1", b"value1")

# 读取数据
value = db.get(b"key1")
print(value.decode('utf-8'))  # 输出: value1

# 删除数据
db.delete(b"key1")

# 关闭数据库
del db

第一个小问题,读写是二进制字符串

然后我就像装一个环境来着,之前我以为rocksdb是像mysql那样,要专门起个服,后来发现是嵌入式的,类似sqlite的方式,只要pip就好了。

然后… pip失败了,报了一堆错我也没细看。后来按大模型的指导试了下,发现不管是mac还是ubuntu都挺不好装的,后来在我的某个镜像上装好了

conda install -c conda-forge python-rocksdb

第二个小问题,安装不方便

然后开始使用测试,突然发现在ipython里执行数据库导入时报错,原因是之前已经执行了一次了。原来rocksdb是进程锁的,一个进程只能开一个连接。这点上,多少有点像kafka>

第三个小问题,进程锁

因为这些问题,做一个agent就变得很有必要。总体上,这个agent按照json标准实现了普通读写和ttl读写,以及删除键。还有一些高级的功能就没有去搞了,这样就完成了我的持久化kv存储。

然后我又用一个对象稍微封装了一下,这样用起来比较方便。


    wrock = WRock()
    # 写 2-6ms/条  在100和1000并发下测试 for 1000和10000
    keyword_args_list = [{'k':'test_var%s' % i , 'v': 123 * i , 'ttl' : 100, 'timeout':100} for i in range(1000)]
    tick1 = time.time()
    results = thread_concurrent_run(wrock.ttl_save, keyword_args_list= keyword_args_list, max_workers =100)
    print(time.time() - tick1)

    # 读 + 删 2-6ms/条
    keyword_args_list = [{'k':'test_var%s' % i , 'timeout':100} for i in range(1000)]
    tick1 = time.time()
    results = thread_concurrent_run(wrock.ttl_get, keyword_args_list= keyword_args_list, max_workers =100)
    print(time.time() - tick1)

总体上的效果还是让人满意的,每条大约是2ms-6ms的读写,有相当一部分会损耗在json序列化和反序列化上,但这也是必须的。

按2ms的速度估算,TPS大约是500。回头有空我也可以测一下redis,同样也受到json序列化的影响稍微降低了速度。

大约花了半天时间就完成好了这一切,感觉还是不错的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2318818.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

mysql-connector-python 报错(0xC0000005)

报错情况: 原因: mysql-connector-python版本不对,我们的mysql版本为sql8.0需要下载mysql-connector-python8.0....的库 方法: pip install mysql-connector-python8.1.0 即可

从零开始实现Stable Diffusion本地部署

1. 依赖安装 文件打包下载地址(Stable Diffusion) # git : 用于下载源码 https://git-scm.com/downloads/win # Python 作为基础编译环境 https://www.python.org/downloads/ # Nvidia 驱动,用于编译使用GPU显卡硬件 https://ww…

RAG各类方法python源码解读与实践:利用Jupyter对RAG技术综合评测【3万字长文】

检索增强生成(RAG )是一种结合信息检索与生成模型的混合方法。它通过引入外部知识来提升语言模型的性能,从而提高回答的准确性和事实正确性。为了简单易学,不使用LangChain框架或FAISS向量数据库,而是利用Jupyter Note…

RPA+AI 技术到底好在哪里?

在自动化领域,RPA与生成式AI都是强大的技术,都可以用来实现自动执行重复耗时的任务。 主要区别是:传统RPA擅长处理结构化与规则明确简单的流程,而在非结构化数据处理、动态上下文适应、智能决策等能力上有欠缺;而基于…

flowable适配达梦7 (2.1)

经过第一版的问题解决,后端项目可以启动,前端页面也集成进去。 前端在流程设计页面报错 之后发现主要是组件中modelerStore这个值没有 解决方法:在data增加对象 给component/process/designer.vue 中涉及到的每个子组件传入 :modelerStore“modeler…

基于java的ssm+JSP+MYSQL的母婴用品网站(含LW+PPT+源码+系统演示视频+安装说明)

系统功能 管理员功能模块: 主页 个人中心 用户管理 商品分类管理 商品信息管理 留言板管理 成长交流 系统管理 订单管理 留言管理 用户功能模块: 主页 个人中心 我的收藏管理 订单管理 前台首页功能模块: 首页 商品信息 论…

面试八股 —— Redis篇

重点:缓存 和 分布式锁 缓存(穿透,击穿,雪崩) 降级可作为系统的保底策略,适用于穿透,击穿,雪崩 1.缓存穿透 2.缓存击穿 3.缓存雪崩 缓存——双写一致性 1.强一致性业务&#xff08…

gradle-8.13

gradle-8.13 稍微看了下,基于Maven改造的 https://gradle.org/install/https://github.com/gradle/gradle-distributions/releaseshttps://github.com/gradle/gradle-distributions/releases/download/v8.13.0/gradle-8.13-all.zip https://github.com/gradle/gra…

不使用负压电源,ADC如何测量正负压?

电路图来自ZLinear的开源数据采集板卡DL8884_RFN,是一个比较常见的电压偏置采集法 对电路进行分析,所以说可以先看下采集卡的模拟输入部分的参数如下: 通道数量: 8通道单端输入/4通道差分输入 分辨率: 16位逐次逼近型(SAR) ADC 采样速率: 40…

SinoSteel生产企业ERP实施建议书final(143页PPT)(文末有下载方式)

资料解读:SinoSteel 生产企业 ERP 实施建议书 final 详细资料请看本解读文章的最后内容。 在当今竞争激烈的商业环境中,企业的信息化建设对于提升竞争力和实现可持续发展至关重要。中钢集团作为一家大型跨国企业集团,在钢铁行业占据重要地位。…

贴片陶瓷天线和蓝牙天线的layout注意事项

板载天线,也有封装成器件进行使用: 看到这里,细心的人发现,天线接入芯片的时候,旁边也直接接地了: F型天线(Inverted F Antenna, IFA)的一端接地,看起来像是“短路”&am…

关于波士顿动力2025年3月的人形机器人最新视频

这是完整的视频: 波士顿动力最新逆天表演-机器人Atlas行走、奔跑、爬行、杂技_哔哩哔哩_bilibili 至少从目前来看,综合对比运动的幅度、各关节的协调性、整体的顺遂性、动作的拟人程度,波士顿动力是已知人形机器人中最好的。 尤其需要关注…

Wi-Fi NAN 架构(Wi-Fi Aware Specification v4.0,第2章:2.3~2.6)

1. NAN 数据通信架构 1.1 单播支持 要在两个NAN设备之间启动单播数据通信,服务需发起一个NAN数据路径(NDP,NAN Data Path)请求。这对NAN设备之间会建立一个NAN设备链路(NDL,NAN Device Link)&…

在Oracle Linux 7上安装Oracle 11gr2数据库

好久没有安装Oracle 11g了,虽然是老版本,但是还是有很多公司在用,自从有了oracle linux感觉安装变简单了。 1.安装先决条件包,此包会配置系统参数,建立oracle用户等: yum install oracle-rdbms-server-11gR2-preinstall 安装完这个oracle自…

python爬虫概述

0x00 python爬虫概述 以豆瓣的选电影模块为例,当查看源代码搜索猫猫的奇幻漂流瓶是搜不到的 这时服务器的工作方式应该是这样的 客户端浏览器第一次访问其实服务器端是返回的一个框架(html代码) 当客户端浏览器第二次通过脚本等方式进行访问时服务器端才返回的数据…

【C++】STL库面试常问点

STL库 什么是STL库 C标准模板库(Standard Template Libiary)基于泛型编程(模板),实现常见的数据结构和算法,提升代码的复用性和效率。 STL库有哪些组件 STL库由以下组件构成: ● 容器&#xf…

Qt 控件概述 QWdiget 1.1

目录 qrc机制 qrc使用 1.在项目中创建一个 qrc 文件 2.将图片导入到qrc文件中 windowOpacity: cursor 光标 cursor类型 自定义Cursor font tooltip focusPolicy styleSheet qrc机制 之前提到使用相对路径的方法来存放资源,还有一种更好的方式…

C# Exe + Web 自动化 (BitComet 绿灯 自动化配置、设置)

BitComet GreenLight,内网黄灯转绿灯 (HighID), 增加p2p连接率提速下载-CSDN博客 前两天写个这个,每次开机关机后要重来一遍很麻烦的索性写个自动化。 先还是按照上面的教程自己制作一遍,留下Luck 以及 路由器相关的 端口记录信息。 (因为自…

1-1 MATLAB深度极限学习机

本博客来源于CSDN机器鱼,未同意任何人转载。 更多内容,欢迎点击本专栏目录,查看更多内容。 参考[1]魏洁.深度极限学习机的研究与应用[D].太原理工大学[2023-10-14].DOI:CNKI:CDMD:2.1016.714596. 目录 0.引言 1.ELM-AE实现 2.DE…

MyBatis源码分析のSql执行流程

文章目录 前言一、准备工作1.1、newExecutor 二、执行Sql2.1、getMappedStatement2.2、query 三、Cache装饰器的执行时机四、补充总结 前言 本篇主要介绍MyBatis解析配置文件完成后,执行sql的相关逻辑: public class Main {public static void main(Str…