我正在通过比较 Tokumx 和纯 Mongodb 进行读取性能压力测试。
tokumx 和 mongodb 都在同一台机器上运行。
硬件概述:
Model Name: Mac mini
Model Identifier: Macmini6,1
Processor Name: Intel Core i5
Processor Speed: 2.5 GHz
Number of Processors: 1
Total Number of Cores: 2
L2 Cache (per Core): 256 KB
L3 Cache: 3 MB
Memory: 10 GB
每个实例中只有一个集合。每个集合中有 100,000 个条目。
对于 tokumx,它是作为分区集合创建的。但是对于 mongodb 来说,它被创建为一个普通的集合:
db.createCollection("sample", {partitioned: true, primaryKey: {field1:1, _id: 1}});
对于这两个实例,索引如下所示:
db.sample.ensureIndex({field1:1});
db.sample.ensureIndex({field2:1});
db.sample.ensureIndex({field3:1});
db.sample.ensureIndex({field4:1});
db.sample.ensureIndex({geo:"2d"});
db.sample.ensureIndex({"created_at":1});
我正在使用 Tsung做压力测试。
在测试计划中,我通过查看按 created_at desc 排序的 field2 和 geo 字段进行了简单搜索。
<clients>
<client host="localhost" use_controller_vm="false" maxusers="8000"/>
</clients>
<servers>
<server host="jchimac.thenetcircle.lab" port="8080" type="tcp"/>
</servers>
<load duration="5" unit="minute">
<arrivalphase phase="1" duration="5" unit="minute">
<users interarrival="0.03" unit="second"/>
</arrivalphase>
</load>
根据官方文档,交易应该是TOKUMX™ BENCHMARK VS. MONGODB – HDD
但在我的测试中:
托库姆:
MongoDB:
我在这里想知道是否有人可以对此提供任何提示?我在整个测试过程中是否遗漏了什么?
更新:
我在 Linux(CentOS) 机器上做了另一轮测试:
CentOS release 6.5 (Final)
2.6.32-504.1.3.el6.x86_64 GNU/Linux
MemTotal: 24589896 kB
CPU: 12* (Intel(R) Xeon(R) CPU E5645 @ 2.40GHz)
示例数据如下:
{
"_id": ObjectId("54867dc8ffbc15aa2bc3ee0e"),
"_iid": 15,
"_pid": 15,
"uid": 102296,
"nickname": "nickname_102296",
"gender": 3,
"image_id": 15,
"created_at": 1418100168,
"tag": 1,
"geo": {
"lat": 51.590449999999997033,
"lon": 6.9671900000000004383
}
}
每个集合有 1,000,000 个条目。
每个集合的索引(创建普通集合):
db.createCollection("coll", {primaryKey: {_pid:1, _id: 1}});
db.tokumx_coll.ensureIndex({gender:1});
db.tokumx_coll.ensureIndex({uid:1});
db.tokumx_coll.ensureIndex({geo:"2d"});
db.tokumx_coll.ensureIndex({_pid:1});
db.tokumx_coll.ensureIndex({_iid:1});
db.tokumx_coll.ensureIndex({"created_at":1});
测试计划也很简单:
{'$query', {gender,3,geo, {'$geoWithin', {'$center', [[48.72761, 9.24596], 0.005]}}}, '$orderby',{'_pid',-1}}
Tsung 压力测试每次测试运行 1 小时。并发为每秒1个请求。
<load>
<arrivalphase phase="1" duration="60" unit="minute">
<users interarrival="1" unit="second"/>
</arrivalphase>
</load>
报告截图如下:
TOKUMX:
MONGODB:
更新@2014.12.12 发现这个: https://github.com/Tokutek/mongo/issues/1014
最佳答案
TokuMX 2.0.0 Community Edition for MongoDB 仍然建立在 MongoDB 2.4 之上,当我发表这篇文章时,它还没有 GEO 2dsphere 索引。所以如果你正在制作 Compound Indexes有GEO索引,你必须等待基于支持geo 2dshere索引的MongoDB 2.6版本。
基本上:
如果你对我的压力测试感兴趣,你可以在这个 post 中找到它.
关于mongodb - Tokumx VS mongodb 读取性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27359394/
我正在寻找执行以下操作的正确语法(在Perl、Shell或Ruby中):#variabletoaccessthedatalinesappendedasafileEND_OF_SCRIPT_MARKERrawdatastartshereanditcontinues. 最佳答案 Perl用__DATA__做这个:#!/usr/bin/perlusestrict;usewarnings;while(){print;}__DATA__Texttoprintgoeshere 关于ruby-如何将脚
好的,所以我的目标是轻松地将一些数据保存到磁盘以备后用。您如何简单地写入然后读取一个对象?所以如果我有一个简单的类classCattr_accessor:a,:bdefinitialize(a,b)@a,@b=a,bendend所以如果我从中非常快地制作一个objobj=C.new("foo","bar")#justgaveitsomerandomvalues然后我可以把它变成一个kindaidstring=obj.to_s#whichreturns""我终于可以将此字符串打印到文件或其他内容中。我的问题是,我该如何再次将这个id变回一个对象?我知道我可以自己挑选信息并制作一个接受该信
无论您是想搭建桌面端、WEB端或者移动端APP应用,HOOPSPlatform组件都可以为您提供弹性的3D集成架构,同时,由工业领域3D技术专家组成的HOOPS技术团队也能为您提供技术支持服务。如果您的客户期望有一种在多个平台(桌面/WEB/APP,而且某些客户端是“瘦”客户端)快速、方便地将数据接入到3D应用系统的解决方案,并且当访问数据时,在各个平台上的性能和用户体验保持一致,HOOPSPlatform将帮助您完成。利用HOOPSPlatform,您可以开发在任何环境下的3D基础应用架构。HOOPSPlatform可以帮您打造3D创新型产品,HOOPSSDK包含的技术有:快速且准确的CAD
我想解析一个已经存在的.mid文件,改变它的乐器,例如从“acousticgrandpiano”到“violin”,然后将它保存回去或作为另一个.mid文件。根据我在文档中看到的内容,该乐器通过program_change或patch_change指令进行了更改,但我找不到任何在已经存在的MIDI文件中执行此操作的库.他们似乎都只支持从头开始创建的MIDI文件。 最佳答案 MIDIpackage会为您完成此操作,但具体方法取决于midi文件的原始内容。一个MIDI文件由一个或多个音轨组成,每个音轨是十六个channel中任何一个上的
文章目录1.开发板选择*用到的资源2.串口通信(个人理解)3.代码分析(注释比较详细)1.主函数2.串口1配置3.串口2配置以及中断函数4.注意问题5.源码链接1.开发板选择我用的是STM32F103RCT6的板子,不过代码大概在F103系列的板子上都可以运行,我试过在野火103的霸道板上也可以,主要看一下串口对应的引脚一不一样就行了,不一样的就更改一下。*用到的资源keil5软件这里用到了两个串口资源,采集数据一个,串口通信一个,板子对应引脚如下:串口1,TX:PA9,RX:PA10串口2,TX:PA2,RX:PA32.串口通信(个人理解)我就从串口采集传感器数据这个过程说一下我自己的理解,
s=Socket.new(Socket::AF_INET,Socket::SOCK_STREAM,0)s.connect(Socket.pack_sockaddr_in('port','hostname'))ssl=OpenSSL::SSL::SSLSocket.new(s,sslcert)ssl.connect从这里开始,如果ssl连接和底层套接字仍然是ESTABLISHED,或者它是否在默认值7200之后进入CLOSE_WAIT,我想检查一个线程几秒钟甚至更糟的是在实际上不需要.write()或.read()的情况下关闭。是用select()、IO.select()还是其他方法完成
在Ruby1.9中,我如何从ARGF中读取CSV?我尝试了以下方法,但没有打印任何内容:require'csv'CSV(ARGF).readdo|row|prowendhttp://www.ruby-doc.org/core-1.9.3/ARGF.htmlhttp://ruby-doc.org/stdlib-1.9.2/libdoc/csv/rdoc/CSV.html 最佳答案 如果你想偷懒你可以试试:CSV.new(ARGF.file).eachdo|row|...end来源:http://www.ruby-doc.org/std
我正在编写一个ruby程序,它应该执行另一个程序,通过stdin向它传递值,从它的stdout读取响应,然后打印响应。这是我目前所拥有的。#!/usr/bin/envrubyrequire'open3'stdin,stdout,stderr=Open3.popen3('./MyProgram')stdin.puts"helloworld!"output=stdout.readerrors=stderr.readstdin.closestdout.closestderr.closeputs"Output:"puts"-------"putsoutputputs"\nErrors:"p
我正在使用Ruby解决一些ProjectEuler问题,特别是这里我要讨论的问题25(Fibonacci数列中包含1000位数字的第一项的索引是多少?)。起初,我使用的是Ruby2.2.3,我将问题编码为:number=3a=1b=2whileb.to_s.length但后来我发现2.4.2版本有一个名为digits的方法,这正是我需要的。我转换为代码:whileb.digits.length当我比较这两种方法时,digits慢得多。时间./025/problem025.rb0.13s用户0.02s系统80%cpu0.190总计./025/problem025.rb2.19s用户0.0
我正在寻找一个用ruby演示计时器的在线示例,并发现了下面的代码。它按预期工作,但这个简单的程序使用30Mo内存(如Windows任务管理器中所示)和太多CPU有意义吗?非常感谢deftime_blockstart_time=Time.nowThread.new{yield}Time.now-start_timeenddefrepeat_every(seconds)whiletruedotime_spent=time_block{yield}#Tohandle-vesleepinteravalsleep(seconds-time_spent)iftime_spent