nutsdb與mysql_分享下 nutsdb 單機 1 億、10 億數據實測

大家好, 想給大家分享下我最近為 nutsdb 做的數據測試。

測試項目

起因

事情起因是這個 issue ,簡單說就是內存高了,不夠用了。

可能很多人不知道 NutsDB。簡單介紹下,NutsDB 是我幾個月以前開源的一個 Go 語言編寫的內嵌型 KV 數據庫,支持多種數據結構。開源取的的反饋:一開源就上了 Go 趨勢榜。一周斬獲 500+star,也得到很多同行的關注,給我提建議。還有幾個用在了生產環境。

驗證測試一億條數據

回到正題:

為了驗證這個 issue

于是我先測了一個億的數據量

版本:nutsdb V0.4.0

服務器配置:Ubuntu 16.04 64 位 8 核 64G

數據量:占有 11G 左右 (目前版本沒有做壓縮)

為了加快測試,沒有設置實時 sync,寫入速度:25.7w/s

key\value 類似:

key := []byte("namename" + strconv.Itoa(i))

val := []byte("valvalvavalvalvalvavalvalvalvavalvalvalvaval" + strconv.Itoa(i))

測試結果:

Mem : 64430 MB , Free: 63776 MB , Used:176 MB , Usage:0.273957%

start db index cost time: 72.076μs

batch put data cost: 6m29.067011134s

Mem : 64430 MB , Free: 24760 MB , Used:39147 MB , Usage:60.759105%

發現 消耗內存是數據量的 3.46 倍左右,說實話雖然比他說的少幾倍,但我還是有點接受不了。怎么辦?

解決

于是開發了新的模式 EntryIdxMode:HintBPTSparseIdxMode, 專門為節約內存設計。原理采用 b+樹多級索引的方式。

master 分支 已經支持了,有興趣的歡迎嘗試。

那我們單機先來測試 10 億條數據。

新模式測試 10 億條數據

版本 :nutsdb master 分支

主機配置:Ubuntu 16.04 64 位 2 核 2G

key\value 類似上面的

為了加快測試,沒有設置實時 sync

測試結果:

Mem : 1999 MB , Free: 1786 MB , Used:53 MB , Usage:2.688618%

Mem : 1999 MB , Free: 1695 MB , Used:135 MB , Usage:6.784733%

內存占用只有 82MB,完成 10 億條數據插入,但是寫速度降到 4.35w/s。產生索引數據文件 153G

再來看下讀的表現,讀取 10 條數據,這個是沒有加緩存的結果如下:

load cost: 2.607796193s

key , find val namename0 valvalvavalvalvalvavalvalvalvavalvalvalvaval0

key , find val namename1 valvalvavalvalvalvavalvalvalvavalvalvalvaval1

key , find val namename2 valvalvavalvalvalvavalvalvalvavalvalvalvaval2

key , find val namename3 valvalvavalvalvalvavalvalvalvavalvalvalvaval3

key , find val namename4 valvalvavalvalvalvavalvalvalvavalvalvalvaval4

key , find val namename5 valvalvavalvalvalvavalvalvalvavalvalvalvaval5

key , find val namename6 valvalvavalvalvalvavalvalvalvavalvalvalvaval6

key , find val namename7 valvalvavalvalvalvavalvalvalvavalvalvalvaval7

key , find val namename8 valvalvavalvalvalvavalvalvalvavalvalvalvaval8

key , find val namename9 valvalvavalvalvalvavalvalvalvavalvalvalvaval9

read cost 87.208728ms

好了分享到這里。歡迎留言交流。

最后,歡迎去 nutsdb 提 issue,點 Star 關注,提交 PR,謝謝!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/378862.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/378862.shtml
英文地址,請注明出處:http://en.pswp.cn/news/378862.shtml

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

相關文章

java 方法 示例_帶有示例的Java EnumSetSupplementOf()方法

java 方法 示例EnumSet類complementOf()方法 (EnumSet Class complementOf() method) complementOf() method is available in java.util package. clipartOf()方法在java.util包中可用。 complementOf() method is used to contain all the elements of this EnumSet that are…

在需要時開啟Perl新特性

從5.10開始,新特性必須開啟才能使用。Perl默認不啟用新特性保持向后兼容。 如果想啟用新特性,可以使用新的-E開關。打開所有的新特性。 % perl5.10.1 -E say.pl #開啟5.10.1 版本的所有新特性 在源代碼中使用 use 指令之后指定perl版本號就可以了。 use …

P2P技術詳解(一):NAT詳解——詳細原理、P2P簡介

目錄1. IPv4協議和NAT的由來2. NAT的工作模型和特點2.1、NAT的概念模型2.2、一對一的NAT2.3、一對多的NAT2.4、按照NAT端口映射方式分類2.4.1全錐形NAT2.4.2限制錐形NAT2.4.3端口限制錐形NAT2.4.4對稱型NAT3. NAT的限制與解決方案3.1、IP端到端服務模型3.2、NAT的弊端3.3、NAT穿…

決定孩子命運的八大關鍵問題

你可以不是天才,但你可以是天才的父母!樹立做父母正確的家庭教育觀念,為孩子建造一個良好的人生平臺,讓孩子有很好的人格修養,懂得做人,懂得成功的真正含義。簡單方便,容易操作,適合…

java calendar_Java Calendar internalGet()方法與示例

java calendar日歷類internalGet()方法 (Calendar Class internalGet() method) internalGet() method is available in java.util package. internalGet()方法在java.util包中可用。 internalGet() method is used to get the value of the given field(fi) of this Calendar …

顯示照片的二維直方圖

顯示照片的二維直方圖 import cv2 from matplotlib import pyplot as plt img cv2.imread(E:\Python-workspace\OpenCV\OpenCV/water1.png,1)#第一個參數為選擇照片的路徑,注意照片路徑最后一個為正斜杠其他都為反斜杠;第二個參數,其中1表示…

周五怎么表示 mysql_完美起航-MySQL找每個月最后一個星期五--函數定義與使用

數據庫作業有一道題是這樣子的:有一張名叫emp的表記錄員工信息,其中有如下字段 HIREDATE 表示員工被雇用的日期:然后問題是這樣的:q7.Show details of employee hiredates and the date of their first payday.(Paydays occur on…

要想能安心,必須先死心。

其實,不論是感情,還是學習、工作還是生活,不都是如此?曾經年少懷抱一個名校夢,如果高考不成功,那么你一定會選擇考研讓自己死一次心;小時候特別喜歡 某個職業,長大了你拋棄所有機會追…

silverlight學習總結【完】

以下內容是個人理解,不保證正確性。且假設使用C#,并且有一定的相關知識和XML基礎。 silverlight是什么,能做什么 silverlight用XAML來做前端界面,用.NET或者JS作為程序腳本支持,在瀏覽器內外運行的應用。可以認為和FLA…

P2P技術詳解(二):P2P中的NAT穿越(打洞)方案詳解

目錄1、內容概述2、反向鏈接技術:一種特殊的P2P場景(通信雙方中只有一方位于NAT設備之后)3、基于UDP協議的P2P打洞技術詳解3.1、原理概述3.2、典型P2P情景1: 兩客戶端位于同一NAT設備后面(即相同內網中)3.3…

Java Byte類的compareTo()方法和示例

簡短的類compareTo()方法 (Short class compareTo() method) compareTo() method is available in java.lang package. compareTo()方法在java.lang包中可用。 compareTo() method is used to check equality or inequality for this Byte object against the given Byte objec…

顯示照片的RGB直方圖

顯示照片的RGB直方圖 import numpy as np import cv2 as cv from matplotlib import pyplot as plt img cv.imread(E:\Python-workspace\OpenCV\OpenCV/BEYOND.png,1)#第一個參數為選擇照片的路徑,注意照片路徑最后一個為正斜杠其他都為反斜杠;第二個參…

OUT還開通博客!

現在哪有人還在玩博客哦,哎試試,記錄一下自己開發網站的點滴吧!轉載于:https://www.cnblogs.com/17say/archive/2013/02/18/2915125.html

網站V5的一些想法(轉)

V5即將到來,面對“全新”的V5,前端這塊自然也要借這次改版的機會,將我們前端的一些想法實踐到V5中去,實現一次跨越。 1 嘗試模塊化的代碼書寫(html、css等) 模塊化的目的是為了提高代碼的重用性、擴展性、可維護性 2 文件引用使用…

mysql慢查詢開啟語句分析_mysql慢查詢語句分析總結

我們經常會接觸到MySQL,也經常會遇到一些MySQL的性能問題。我們可以借助慢查詢日志和explain命令初步分析出SQL語句存在的性能問題通過SHOW FULL PROCESSLIST查看問題SHOW FULL PROCESSLIST相當于select * from information_schema.processlist可以列出正在運行的連…

P2P技術詳解(三):P2P中的NAT穿越(打洞)方案詳解(進階分析篇)

目錄1、NAT和NAPT2、NAT帶來的問題3、P2P通信穿越NAT的技術、方法4、NAT穿越技術1:應用層網關4.1、原理4.2、限制5、NAT穿越技術2:中間件技術5.1、原理5.2、限制6、NAT穿越技術3:打洞技術(Hole Punching)6.1、原理6.2、方法6.2.1NAT行為類型與…

Java BufferedReader reset()方法及示例

BufferedReader類的reset()方法 (BufferedReader Class reset() method) reset() method is available in java.io package. reset()方法在java.io包中可用。 reset() method is used to reset the stream to the most recent mark of this stream. reset()方法用于將流重置為該…

將兩大小完全相同的照片進行加權混合對比

將兩張大小完全相同的照片進行加權混合對比 import cv2 img1cv2.imread(E:\Python-workspace\OpenCV\OpenCV/water1.png,1)#第一個參數為選擇照片的路徑,注意照片路徑最后一個為正斜杠其他都為反斜杠;第二個參數,其中1表示所選照片為彩色照片…

過了很久了

很久沒來這里了,一般也就找找資料會上一下子。差不多算是荒廢了吧 不要緊,開始寫了轉載于:https://www.cnblogs.com/Anykong/archive/2013/02/18/2916333.html

古文中驚艷的句子

-1】終于為那一身江南煙雨覆了天下,容華謝后,不過一場,山河永寂。-2】千秋功名,一世葬你,玲瓏社稷,可笑卻無君王命。-3】鳳凰臺上鳳凰游,負約而去,一夜苦等,從此江南江北…