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.mzph.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】凤凰台上凤凰游,负约而去,一夜苦等,从此江南江北…