NoSQL数据库性能大比较:MongoDB、Redis、Tokyo Tyrant

Mysql,Mongodb,Redis对比 Mysql,Mongodb,Redis对比MySQLRedisMongodb MySQL 1.为多种编程语言提供可API 2.大型的数据库。可以处理拥有上千万条记录的大型数据库 3.MySQL使用标准的SQL数据语言形式,支持多线程,充分利用CPU资源优化的SQL查询算法,有效的提高查询速度 应用场景:Web网站系统 Redis 1.Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。 2.性能极高- Redis能读的速度是110000次/s,写的速度是81000次/s 应用场景:用来做缓存-redis的所有数据时放在内存中的 Mongodb 1.面向集 立即下载

  准备对MongoDB, Redis以及Tokyo Tyrant的读写做一个简单的测试,为了进行相对公平的测试,需要了解他们背后的实现机制,下面是一些比较:

  存储实现的比较:

  * 内存文件映像(Memory-File Mapping) Redis, MongoDB

  * 文件 + Cache Tokyo Tyrant

  * 内存: Redis, Tokyo Tyrant

  Key/Value索引形式:

  * B+ Tree : MongoDB, Tokyo Tyrant

  * Hash Table: Redis, Tokyo Tyrant

  * Fixed Length: Tokyo Tyrant

  从上面的比较可以看出,Redis和MongoDB是基于系统内存映像文件,数据能命中在内存的时候读写操作性能应该是非常强的,当然,反过来,如果数据十分分散不能在内存命中,那么内存页的切换开销将是非常可怕的,MongoDB和Redis数据文件不同的是将数据存放在多个文件中,每当上一个存满的时候就会创建新的数据空间文件。鉴于MongoDB 是主要比较对象,而其采用B+Tree进行存储,故TT也使用B+Tree引擎进行比较。

  那么该测试什么自然就可以得知:尽管使用内存映像文件读写操作会很快(快到什么程度),但是当写满内存以后呢?

  文件大小限制:

  32bit: MongoDB <= 2G

  TT no limits if u ./configure --enable-off

  64bit: MongoDB和TT均无限制。

  注:Redis 总是受限于内存的大小。

  为了进行相对公平的测试:

  首先通过虚拟机对内存的使用进行同等限制,因为MongoDB和Redi实际上读写都是在内存操作的(利用MemoryMap文件),故当数据库的大小超过内存大小时候的性能尤为重要。故用虚拟机来设置一个较小的内存大小,来快速观察数据库大小超过内存的时候的性能。

  这里设置虚拟机内存256M,实际可使用内存200M左右,CPU 2核,Unbuntu Server 9.10

  测试记录:

  Key: 512的随机字符串

  Value: 大约5k的随机字符串

  每项记录数据大小:大约5.5k

  计划插入数据100000条:5.5k*1000=5.5M*100=550M 数据量大约 550M。

  注:key开始是用1k的随机字符串来测试,但是在测试mongoDB 报告key too large to index, 因此减小key的大小到512字节。

  当没有任何数据的时候:

  MongoDB的大小:

  64M: (db.0, db.1, ..)data FIle

  16M: (database.ns) name space index file.

  TC的大小:

  133K btree.tcb

  256 fixed.tcf

  517K hash.tch

  Redis的大小:

  VirtualMemFile: 41M redis-3546.vm

  DB: 0M

  注:redis的文件初始大小基本等于你设置的内存以及内存页的大小,可以自己调整。redis通过定时存盘的策略进行保存,定时策略可以自行设置。

  通常情况下,redis的数据库必须<=内存,如果要让redis的数据库大于内存,那么必须在配置中打开vm_enabled选项(貌似没用,当插入数据超过内存后,会被Unbuntu的后台保护进程给杀掉,如果设置了最大使用的内存,则数据已有记录数达到内存限值后不能继续插入新值)。

  key/value 功能:

  Redis: 读写key/value,value可以有各种结构,但Value无索引。

  MongoDB: 以collection组织,key如果不特别指定将由系统作为ObjectId产生(指定使用“_id”字段),value是结构化的,value里的字段可以被索引。

  TokyoTyrant: 读写key/value,table 数据引擎支持结构化的value和字段索引,其它数据引擎不支持,b+tree可以用key索引。

  基准测试机器:

  虚拟机是跑在 2 CPU 2.26G Intel Core 2 Duo,内存为2G

  虚拟机:

  CPU 2核

  内存 256M

  操作系统:Unbuntu Server 9.10 32bit

  使用软件版本:

  * MongoDB: mongodb-linux-i686-2010-02-26

  * TokyoTyrant: TT1.1.40; TC1.4.42

  * Redis: 2010-03-01(GIT SRC)

  启动:

  redis-server ./redis.conf(设置了最大内存210兆:maxmemory 210000000, vm-enable=yes,vm-max-memory 20000000,vm-pages 1342177)

  ./ttserver -port 1974 /data/db/tt.tcb

  bin/mongod -port 1974 --dbpath /data/db/mongo

  MongoDB

  如上所述测试添加10万条数据:

  内存,刚开始的时候虚拟内存占用48564,物理内存占用 3432,在插入2000条数据后,虚拟内存到达143M,物理内存33M,内存增长很迅速。最后虚拟内存稳定在1048M,物理内存则在160M-211M徘徊。

  CPU占用率最低的时候为6%,最高的时候达到30%,平时在8%-10%之间。

  从测试看,每次分配DB空间的时候所有插入操作被冻结,最坏的一次插入2000条耗时1分多(这个时候正好有分配空间文件发生),平时,插入2000条数据大约耗时17-18秒。

  最后MongoDB的数据文件总大小达到:977M

  接着测试MongoDB读取10万条记录(非命中形式:该key是随机产生的,因此大都不会存在数据库中)

  内存:虚拟内存稳定在1048M,物理内存占用在90M-94M。

  CPU:最低占用8%,最高到45%;平时在10%-12%左右。

  读取2000条记录大约耗时3-4秒,第一次用了6秒。

  Redis

  同样测试添加10万条数据:

  内存,开始的时候忘记看了,大致较开始的虚拟内存占用112M,物理内存82M,在4万条记录的时候VM占用196M,物理内存占用163M,最后的时候VM占用237M,物理内存204M。

  CPU:最低占用3%,最高的时候15%,平时在7%-11%之间。

  当Redis向磁盘写入数据的时候,有变慢(2000条记录耗时21秒),平时存2000条记录大约耗时18-19秒左右。

  不过没有设定maxmemory的时候,在大约写入 6万多个数据后服务器被挂掉。当设置最大使用内存(200M)后,达到内存限制,写入不了(已写入48136个数据),但是不会挂了。

  Redis文件在写入48136个数据时候的大小(包括VM文件):277M,其中VM 41M,数据库236M。

  接着测试Redis读取10万条记录(非命中形式:该key大都不会存在数据库中)

  内存:虚拟内存237M,物理内存占用204M

  CPU:在26%-43%

  读取2000条记录大约耗时在3-4秒。

  Tokyo Tyrant

  如上所述测试添加10万条数据:采用默认配置参数运行TT B+Tree

  内存:初始的时候VM: 76928 物理内存: 1232,在插入的过程内存的增加很少,在插入到4万条记录的时候虚拟内存仅为99540,物理内存23M,到最后虚拟内存117M,物理内存37M。

  CPU占用率始终稳定在2%

  在插入到5万条记录前,平均插入2000条耗时约19-20秒,到8万条记录前时候,插入2000条耗时20-22秒,再接下来的2万条,平均插入2000条耗时在慢慢增加并有震荡,28秒,最后到42秒(B+Tree的索引节点在内存中满了?可能需要调整参数?)。

  TT的数据库只有一个文件大小为:589M

  接着测试TT读取10万条记录(非命中形式:该key大都不会存在数据库中)

  内存稳定在:VM110M;物理内存36M。

  CPU:最低2%,最高6%,平时在4%

  读取2000条记录大约耗时在7-8秒,偶尔6秒或9秒。

  小结:

  MongoDB和Redis写入数据不是直接写入磁盘,所以当重启系统时候没有存盘的数据将全部丢失。TT实际上也有内存缓冲,不过和前者相比要小的多。

  以上测试并不完善,只是一个开始,比如没有测试小数据(以数字作为key,100字节Value),没有测试较大的数据(20K左右);没有测试在命中情况下的性能;没有测试并发读写的性能,据闻MongoDB的并发读写效率不是特别出色,MongoDB的特色在于支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,并实现了存储节点的自动sharding管理等配套功能;以及由于MongoDB是分布在多个文件中,当数据量远大内存,分布在足够多的文件的时候的性能;对开启同步日志后的Replication测试....对于TT来说,需要对TT的其它数据引擎进行测试,以及TT的各种数据引擎如何优化?TC/TT在mixi的实际应用当中,存储了2000万条以上的数据,同时支撑了上万个并发连接,是一个久经考验的项目。TC在保证了极高的并发读写性能的同时,具有可靠的数据持久化机制,同时还支持类似关系数据库表结构的hashtable以及简单的条件,分页和排序操作,是一个很棒的NoSQL数据库。TC的主要缺点是在数据量达到上亿级别以后,并发写数据性能会大幅度下降(读不受影响),NoSQL: If Only It Was That Easy提到,他们发现在TC里面插入1.6亿条2-20KB数据的时候,写入性能开始急剧下降。Redis本质上是一个Key-Value类型的内存数据库,很像memcached,整个数据库统统加载在内存当中进行操作,定期通过异步操作把数据库数据flush到硬盘上进行保存。因为是纯内存操作,Redis的性能非常出色,Redis最大的魅力是支持保存List链表和Set集合的数据结构,而且还支持对List进行各种操作,例如从List两端push和pop数据,取 List区间,排序等等,对Set支持各种集合的并集交集操作,此外单个value的最大限制是1GB,不像memcached只能保存1MB的数据,Redis可以用来实现很多有用的功能,比方说用他的List来做FIFO双向链表,实现一个轻量级的高性能消息队列服务,用他的Set可以做高性能的tag系统等等。另外Redis也可以对存入的Key-Value设置expire时间,因此也可以被当作一个功能加强版的memcached来用。


将机器人urdf模型转换为Mujoco环境下的mjcf模型 在使用gym环境进行人形模型站立训练的过程中,我想要将之前ros环境下的机器人urdf模型导入到mujoco环境下,这时候就需要将urdf模型转换为mujoco专用的mjcf模型。-AzureLoong.urdf是机器人模型(我这里使用青龙的模型);--custom_robot.xml是转换完成之后的机器人模型的名字和格式;包要求 Python 版本必须是 3.11 或更高),保证自己的其他训练环境和依赖不被干扰。首先将meshes文件迁移到需要输出的目录下,然后再运行转换命令。最后就可以成功输出了。 阅读详情

相关推荐

深入理解DQN中的Q值:核心概念和应用

在强化学习中,Q值(或称为动作价值函数)是核心概念之一。Q值函数 ( Q(s, a) ) 表示在给定状态 ( s ) 下,采取动作 ( a ) 并遵循某策略后,智能体从当前状态到未来状态所能获得的预期总回报。简言之,Q值是评估特定状态和动作对的好坏的指标。

qlkaicx的博客 2976

redis和mongodb哪个速度更快

在实际应用中,很多场景可能会同时使用 Redis 和 MongoDB,利用它们各自的优势来满足不同的需求。例如,可以将 Redis 用作缓存来加速访问速度,而将 MongoDB 用于持久化存储和复杂查询。综合来说,Redis 在访问速度上由于基于内存,通常会更快,特别是对于读取频繁的场景。然而,MongoDB 提供了更灵活的数据模型,适用于复杂的数据结构和查询需求。Redis和MongoDB是两种不同类型的数据库,各自在特定的应用场景下有着不同的优势。

记录技术上的一些解决方案 1512

8.5/Q1,Charls最新高分文章解读!

8 257名受试者中,672人(8.14%)在9年内发生过卒中。在调整的多因素cox回归模型中,TyG和ABSI仍然是卒中的预测因素,TyG的HR为1.25(95%CI:1.06~1.47),ABSI的HR为1.33(95%CI:1.06~1.68)。TyG和ABSI联合诊断效能最高(AUC:0.579,95%CI:0.553~0.597),而TyG(AUC:0.566,95%CI:0.544~0.587)和ABSI(AUC:0.533,95%CI:0.524~0.597)的诊断效能最低。

gsky_sci的博客 1016

redis 和 mongodb 比较

总体来说,Redis适用于高性能的键值存储和缓存场景,而MongoDB适用于更复杂的数据存储和查询需求,特别是对复杂数据结构和丰富查询功能的支持。具体选择应根据实际应用需求和数据模型的特点进行评估。Redis和MongoDB是两种不同类型的数据库,它们在数据存储和查询方式、数据模型以及适用场景等方面有一些明显的区别。

qq_52126327的博客 1411

手把手教你排查I2C通信故障:当上拉电阻配置不当会发生什么?

本文深入解析I2C通信中上拉电阻配置不当导致的常见故障,包括波形畸变和通信失败现象。通过示波器波形分析和系统化解决方案,帮助工程师快速诊断和优化I2C总线性能,特别适用于嵌入式系统和智能设备开发场景。

weixin_33725722的博客 341

如何区分Info与CoWoS封装?

这篇文章主要从Info、CoWoS封装的定义、Interposer的种类以及Info、CoWoS封装的种类三方面进行了介绍,希望读者能够有所收获

wangyubo1的博客 7939

数据库对比(Redis/Mysql/SQLite/ES/MongoDB)

做后端开发的程序员基本都要学会数据库的相关知识。

NCU_wander的博客 3838

告别模糊与偏色:使用RKISP Tuner为RK3588s+IMX415进行图像质量调优的实战心得

本文详细介绍了如何使用RKISP Tuner为RK3588s+IMX415进行图像质量调优的实战经验。从调试环境搭建到3A算法优化,再到画质增强模块的深度调参,提供了全面的技术指导和参数建议,帮助工程师解决噪声、色偏和细节模糊等常见问题,显著提升成像质量。

weixin_28729205的博客 455

Redis和MongoDB对比

MongoDB 是一个基于分布式文件存储的数据库。由 C++ 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。它支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是它支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。非关系型数据库。

爱是与世界平行 5900

华为OD机试真题新系统-空间占用计算(Py/Java/C/C++/Js/Go)

华为OD机试新系统机试真题 【空间占用计算】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为OD机试真题【空间占用计算】。

qq_45776114的博客 3448

彻底解决Failed to configure a DataSource: ‘url‘ attribute is not specified and no embedded datasource

Failed to configure a DataSource: ‘url‘ attribute is not specified and no embedded datasource

renkai721的专栏 24万+

Redis与MongoDB:技术优势与市场选择解析_redis和mongodb各自用途优势

综上所述,Redis在国内市场上的流行并非偶然,而是技术特性、市场需求、企业支持、社区活跃度等多重因素共同作用的结果。当然,MongoDB在其擅长的领域如数据分析、大数据存储和存档等方面也有其独到之处,特别是在处理更加复杂的数据模型和支持大规模数据集方面。MongoDB的文档模型、丰富的查询语言和索引功能可以很好地服务于这些需求。对于开发者和企业来说,选择数据库技术时需要考虑各自的业务场景和技术需求。例如,如果应用需要高速缓存、会话存储、消息队列或实时分析,Redis可能是更合适的选择。

2401_84910888的博客 1771

YOLOv8剪枝 l1剪枝测试精度仅掉0.8个点,速度提高10.7fps!

文章摘要: 本文提出了一种基于组归一化的重要性评分方法GroupNormImportance,用于神经网络剪枝中的通道选择。该方法支持多种变体,包括标准L1范数、组L1范数和BN缩放因子等计算方式。核心实现包括三个关键部分:1)支持p范数计算(默认为L2);2)提供7种组重要性归约方法(如均值、最大值等);3)提供8种归一化方案(包括标准化、高斯化、LAMP等)。该方法输入一个剪枝组,输出各通道的重要性分数,通过依赖图可实现结构化剪枝。实验对比图展示了剪枝前后的效果差异,验证了该方法的有效性。

FJN110的博客 397

转 NoSQL数据库性能比较 MongoDB vs Redis vs Tokyo Tyrant

转 NoSQL数据库性能比较 MongoDB vs Redis vs Tokyo Tyrant

qq_43725037的博客 278

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

常见的NoSQL数据库

NoSQL数据库发展迅猛,据说现在已经有上百种NoSQL数据库了,下面来了解下常见的一些NoSQL数据库 先来看张表,了解下典型的NoSQL数据库的分类 NoSQL一般特征: 临时性键值存储 一般作为关系型数据库的缓存来使用 由于存在数据丢失的可能,所以一般用来处理不需要持久保存的数据 具有非常快的处理速度 用于需要使用expires时(需要定期清除数据) 使用一致性散列(Consistent...

zhaohong_bo的专栏 1243

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

15个nosql数据库

1、MongoDB 介绍 MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。主要解决的是海量数据的访问效率问题,为WEB应用提供可扩展的高性能数据存储解决方案。当数据量达到50GB以上的时候,MongoDB的数据库访问速度是MySQL的10倍以上。MongoDB的并发读写效率不是特别出色,根据官方提供的性能测试表明,大约每秒可以处理0.5万~1.5万次读写请求。Mon...

1222

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

[转] NoSQL数据库性能比较:MongoDB vs Redis vs Tokyo Tyrant

  * MongoDB vs Redis vs Tokyo Tyrant准备对MongoDB, Redis以及Tokyo Tyrant的读写做一个简单的测试,为了进行相对公平的测试,需要了解他们背后的实现机制,下面是一些比较:存储实现的比较:   * 内存文件映像(Memory-File Mapping) Redis, MongoDB   * 文件 + Cache  T

heiyeluren的blog(黑夜路人的开源世界) 1万+

NoSQL数据库性能比较:MongoDB、Redis、Tokyo Tyrant

准备对MongoDB, Redis以及Tokyo Tyrant的读写做一个简单的测试,为了进行相对公平的测试,需要了解他们背后的实现机制,下面是一些比较:   存储实现的比较:   * 内存文件映像(Memory-File Mapping) Redis, MongoDB   * 文件 + Cache Tokyo Tyrant   * 内存: Redis, Tokyo Tyr

厚积薄发的博客 896

NoSQL数据库性能比较:MongoDB vs Redis vs Tokyo Tyrant

* MongoDB vs Redis vs Tokyo Tyrant准备对MongoDB, Redis以及Tokyo Tyrant的读写做一个简单的测试,为了进行相对公平的测试,需要了解他们背后的实现机制,下面是一些比较:<br />存储实现的比较:   * 内存文件映像(Memory-File Mapping) Redis, MongoDB   * 文件 + Cache  Tokyo Tyrant   * 内存: Redis, Tokyo TyrantKey/Value索引形式:  * B+ Tree  

wzm112的专栏 879

* MongoDB vs Redis vs Tokyo Tyrant

* MongoDB vs Redis vs Tokyo Tyrant 准备对MongoDB, Redis以及Tokyo Tyrant的读写做一个简单的测试,为了进行相对公平的测试,需要了解他们背后的实现机制,下面是一些比较: 存储实现的比较:    * 内存文件映像(Memory-File Mapping) Redis, MongoDB    * 文件 + Cache  Tokyo

0li's Blog 1550

MongoDB vs Redis vs Tokyo Tyrant

* MongoDB vs Redis vs Tokyo Tyrant 准备对MongoDB, Redis以及Tokyo Tyrant的读写做一个简单的测试,为了进行相对公平的测试,需要了解他们背后的实现机制,下面是一些比较: 存储实现的比较:    * 内存文件映像(Memory-File Mapping) Redis, MongoDB    * 文件 + Cache  Tokyo

Byane的专栏 1121

游戏内存数据库MongoDB vs Redis vs Tokyo Tyrant

MongoDB vs Redis vs Tokyo Tyrant     * MongoDB,Redis,Tokyo Tyrant(Tokyo Cabinet)性能测试比较 准备对MongoDB, Redis以及Tokyo Tyrant的读写做一个简单的测试比较,为了进行相对公平的测试,需要了解他们背后的实现机制,下面是一些比较: 存储实现的比较: * 内存文件映像(Memory-Fi...

JavaEye_Blog 223

[转]NoSQL数据库性能比较:MongoDB、Redis、Tokyo Tyrant

准备对MongoDB, Redis以及Tokyo Tyrant的读写做一个简单的测试,为了进行相对公平的测试,需要了解他们背后的实现机制,下面是一些比较:   存储实现的比较:   * 内存文件映像(Memory-File Mapping) Redis, MongoDB   * 文件 + Cache Tokyo Tyrant   * 内存: Redis, Tokyo Tyrant ...

heamon的专栏 237

MongoDB,Redis,Tokyo Tyrant(Tokyo Cabinet)性能测试比较

* MongoDB,Redis,Tokyo Tyrant(Tokyo Cabinet)性能测试比较 准备对MongoDB, Redis以及Tokyo Tyrant的读写做一个简单的测试比较,为了进行相对公平的测试,需要了解他们背后的实现机制,下面是一些比较: 存储实现的比较: * 内存文件映像(Memory-File Mapping) Redis, MongoDB * 文件 + Cache

happylife1527的专栏 743

NOSQL数据库读书笔记(种类与特征)

本文的观点根据佐佐木达也著、罗勇译的《NoSQL数据库入门》一书提取并整理。

爱笑的余尔 829
上一篇: GLOBAL variable and should be set with SET GLOBAL
下一篇: php sphinx 高效率搜索引擎搭建
大鹏的世界
博客等级 码龄19年 332粉丝 417原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值