【最后203篇系列】020 rocksdb agent

今天還是挺開心的一天,又在工具箱里加了一個工具。嗯,但是快下班的時候也碰到一些不太順心的事,讓我有點惱火。我還真沒想到一個專職的前端,加測試,以及其他一堆人,竟然不知道后端返回的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和10000keyword_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.pswp.cn/pingmian/72905.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/72905.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/72905.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

10-- 網絡攻擊防御原理全景解析 | 從單包攻防到DDoS軍團作戰(包你看一遍全記住)

🛡? 網絡攻擊防御原理全景解析 | 從單包攻防到DDoS軍團作戰 如果你也對網絡工程師的內容感興趣的話,歡迎看我的最新文章9–BGP路由黑洞(超萬字大解析):網絡世界的“百慕大三角“逃生指南(BGP路由配置實驗含路由黑洞,…

解鎖Python print()函數高級用法

print() 是 Python 中最常用的函數之一,用于將內容輸出到控制臺。雖然它的基本用法非常簡單,但 print() 函數還支持許多高級功能,如格式化輸出、重定向輸出、控制分隔符和結束符等。 1. print() 函數的基本用法 1.1 語法 print() 函數的基本語法如下: print(*objects, …

鬼泣:動作系統3

文章目錄 self-Tag:可以直接在游戲運行時通過標簽區分不同Actorsolid隔離:模塊化低耦合:將功能拆分成多個模塊,修改單一模塊時無需修改其他模塊 動作優先級:當前動作能否打斷上一動作函數不能使用timelineset timer by…

Polymer入門指南:從零開始構建、組織、管理Web Component

前言 Web Component是一種強大的技術,它允許開發者創建可重用的自定義元素,其功能和樣式都與原生HTML元素類似。Polymer是一個用于創建Web Component的庫,簡化了開發過程。今天我們將一起來了解如何基于Polymer開發Web Component。 什么是P…

廣度優先搜索(BFS) vs 深度優先搜索(DFS):算法對比與 C++ 實現

目錄 一、BFS 和 DFS 的核心思想 1. BFS(廣度優先搜索) 2. DFS(深度優先搜索) 二、BFS 和 DFS 的對比 三、C 代碼實現 1. BFS 實現(鄰接表表示的無向圖) 2. DFS 實現(遞歸與迭代兩種方式&…

vulhub靶機----基于docker的初探索,環境搭建

環境搭建 首先就是搭建docker環境,這里暫且寫一下 #在kali apt update apt install docker.io配置docker源,位置在/etc/docker/daemon.json {"registry-mirrors": ["https://5tqw56kt.mirror.aliyuncs.com","https://docker…

第7章 類與面向對象

6-1 二維平面上的點操作(Python3) 題目描述 設計一個表示二維平面上點的類 Point。該類應該包含以下功能: 兩個私有屬性 _x 和 _y,分別表示點的橫坐標和縱坐標。 一個構造函數 __init__,用于初始化點的坐標。 一個…

算法訓練篇06--力扣611.有效三角形的個數

目錄 1.題目鏈接:611.有效三角形的個數 2.題目描述: 3.解法一:(暴力解法)(會超時): 4.解法二(排序雙指針) 1.題目鏈接:611.有效三角形的個數 2.題目描述: 給定一個包含非負整數的數組 nums &#xf…

網絡編程之解除udp判斷客戶端是否斷開

思路&#xff1a;每幾秒發送一條不顯示的信息&#xff0c;客戶端斷開則不再發送信息&#xff0c;超時則表示客戶端斷開連接。&#xff08;心跳包&#xff09; 服務器 #include <head.h>#define MAX_CLIENTS 100 // 最大支持100個客戶端 #define TIMEOUT 5 // 5秒…

Python Cookbook-4.8 二維陣列變換

任務 需要變換一個列表的列表&#xff0c;將行換成列&#xff0c;列換成行。 解決方案 需要一個列表&#xff0c;其中的每一項都是同樣長度的列表&#xff0c;像這樣 arr [[1,2,3],[4,5,6],[7,8,9],[10,11,12]]列表推導提供了簡單方便的方法以完成二維陣列的轉換: print …

B樹與B+樹在MySQL中的應用:索引

數據結構演示網站&#xff1a;Data Structure Visualization 先來了解兩個數據結構B樹與B樹 B樹&#xff1a; N階B樹每個節點最多存儲N-1個Key&#xff0c;N個指針 例如&#xff1a;一個5階B樹&#xff0c;當前節點存儲到5個Key時&#xff0c;中間的數會向上分離&#xff0c;…

【重構小程序】基于Tika和Langchain4J進行文件解析和文本切片(二)

為了將大語言模型植入到小程序中&#xff0c;來支持用戶的問答。那我們首先需要做的是什么呢&#xff0c;不是引入大語言模型&#xff0c;而且為大語言模型搭建一個私有化知識庫&#xff0c;但是這是這節呢&#xff0c;我們先不搭建私有化知識庫&#xff0c;在這之前&#xff0…

python|exm6-1try-except結構|raise關鍵字|異常類型

目錄 一、try-expect 1. 多個try-expect結構的使用 1.1 捕捉特定異常 1.2 捕捉全部異常 1.3 所有異常合并處理 2. try-except-else-finally 結構 二、raise 關鍵字 一、try-expect try-expect 結構是 Python 中用于異常處理的關鍵機制。它允許你捕獲并處理代碼中可能發生…

小藍的括號串1(棧,藍橋云課)

問題描述 小藍有一個長度為 nn 的括號串&#xff0c;括號串僅由字符 ( 、 ) 構成&#xff0c;請你幫他判斷一下該括號串是否合法&#xff0c;合法請輸出 Yes &#xff0c;反之輸出 No 。 合法括號序列&#xff1a; 空串是合法括號序列。 若 ss 是合法括號序列&#xff0c;則 (…

Centos7配置本地yum源

Centos7配置本地yum源 1、基于iso鏡像的centos源 1.1 準備iso <span style"color:#000000"><span style"background-color:#ffffff"><code class"language-bash"><span style"color:#008000"># 首先看自己使用…

VNA操作使用學習-14 再測晶振特性

再測一下4Mhz晶振&#xff0c;看看特性曲線&#xff0c;熟悉一下vna使用。 s11模式&#xff0c;找遍了各種format都無法顯示&#xff0c;只有這一種&#xff08;s11&#xff0c;Resistance&#xff09;稍微顯示出一個諧振&#xff0c;但是只有一個點。 s21模式 這是201p&#…

Tr0ll2靶機詳解

一、主機發現 arp-scan -l靶機ip&#xff1a;192.168.55.164 二、端口掃描、漏洞掃描、目錄枚舉、指紋識別 2.1端口掃描 nmap --min-rate 10000 -p- 192.168.55.164發現21端口的ftp服務開啟 以UDP協議進行掃描 使用參數-sU進行UDP掃描 nmap -sU --min-rate 10000 -p- 19…

基于開源模型的微調訓練及瘦身打造隨身掃描儀方案__用AI把手機變成文字識別小能手

基于開源模型的微調訓練及瘦身打造隨身掃描儀方案__用AI把手機變成文字識別小能手 一、準備工作&#xff1a;組裝你的"數碼工具箱" 1. 安裝基礎工具&#xff08;Python環境&#xff09; 操作步驟&#xff1a; 訪問Python官網下載安裝包安裝時務必勾選Add Python to…

GitHub 超火的開源終端工具——Warp

Warp 作為近年來 GitHub 上備受矚目的開源終端工具&#xff0c;以其智能化、高性能和協作能力重新定義了命令行操作體驗。以下從多個維度深入解析其核心特性、技術架構、用戶評價及生態影響力&#xff1a; 一、背景與核心團隊 Warp 由前 GitHub CTO Jason Warner 和 Google 前…

使用C#創建安裝Windows服務程序

在實際工作中&#xff0c;如果我們需要開發一個運行在后臺&#xff0c;無需用戶交互&#xff0c;不需要界面的應用程序&#xff0c;我們可以通過Windows服務來實現。 本文主要介紹如何基于C#創建一個Windows服務&#xff0c;來實現西門子PLC的定時讀取保存。 一、Windows服務…