- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
对于如何测试两种不同的 mongoid/mongodb 查询实现的性能,您有什么建议吗?
要比较的实现与之前的 "Q & A" 有关但为简洁起见,我会再次报告这些:
第一个代码:
Competitor = Struct.new(:html_url, :description, :user)
competitors = []
User.all.map do |user|
user.watchlists.all.map do |wl|
if wl.tags_array == ["ruby", "web", "framework"]
competitors << Competitor.new(wl.html_url, wl.description, wl.user.nickname)
end
end
end
对比第二个代码:
Competitor = Struct.new(:html_url, :description, :user)
competitors = []
User.where('watchlists.tags_array' => %w[ruby web framework]).only(:nickname, :watchlists).each do |u|
u.watchlists.where(:tags_array => %w[ruby web framework]).each do |wl|
competitors << Competitor.new(wl.html_url, wl.description, u.nickname)
end
end
为了完整性,
下划线数据模型是:
class User
include Mongoid::Document
field :nickname
embeds_many :watchlists
end
class Watchlist
include Mongoid::Document
field :html_url
field :description
field :tags_array, type: Array
embedded_in :user
end
当前对这两个代码的性能进行基准测试和比较的方法是什么?
最佳答案
到目前为止,我找到了这种方式,但如果你知道更好的东西,请也回答......
第一个代码:
1.9.2p290 :038 > Competitor = Struct.new(:html_url, :description, :user)
1.9.2p290 :039 > time = Benchmark.measure do
1.9.2p290 :040 > competitors = []
1.9.2p290 :041?>
1.9.2p290 :042 > User.all.map do |user|
1.9.2p290 :043 > user.watchlists.all.map do |wl|
1.9.2p290 :044 > if wl.tags_array == ["ruby", "web", "framework"]
1.9.2p290 :045?> competitors << Competitor.new(wl.html_url, wl.description, wl.user.nickname)
1.9.2p290 :046?> end
1.9.2p290 :047?> end
1.9.2p290 :048?> end
1.9.2p290 :049?> end
MONGODB (34ms) heroku_app1707530['users'].find({})
MONGODB [DEBUG] cursor.refresh() for cursor 2492208785546818168
MONGODB [DEBUG] cursor.refresh() for cursor 2492208785546818168
=> 1.390000 0.010000 1.400000 ( 1.400842)
1.9.2p290 :050 >
对比第二个代码:
1.9.2p290 :049 > Competitor = Struct.new(:html_url, :description, :user)
1.9.2p290 :050 > time = Benchmark.measure do
1.9.2p290 :051 > competitors = []
1.9.2p290 :052?>
1.9.2p290 :053 > User.where('watchlists.tags_array' => %w[ruby web framework]).only(:nickname, :watchlists).each do |u|
1.9.2p290 :054 > u.watchlists.where(:tags_array => %w[ruby web framework]).each do |wl|
1.9.2p290 :055 > competitors << Competitor.new(wl.html_url, wl.description, u.nickname)
1.9.2p290 :056?> end
1.9.2p290 :057?> end
1.9.2p290 :058?> end
MONGODB (185ms) heroku_app1707530['users'].find({"watchlists.tags_array"=>["ruby", "web", "framework"]}, {:_type=>1, :nickname=>1, :watchlists=>1})
MONGODB [DEBUG] cursor.refresh() for cursor 2195378613558492020
=> 0.440000 0.000000 0.440000 ( 0.456714)
1.9.2p290 :059 >
但更好的是:
第一个代码:
1.9.2p290 :157 > Competitor = Struct.new(:html_url, :description, :user)
1.9.2p290 :158 > competitors = []
=> []
1.9.2p290 :159 > Benchmark.bm(10) do |x|
1.9.2p290 :160 > x.report("first:") do
1.9.2p290 :161 > User.all.map do |user|
1.9.2p290 :162 > user.watchlists.all.map do |wl|
1.9.2p290 :163 > if wl.tags_array == ["ruby", "web", "framework"]
1.9.2p290 :164?> competitors << Competitor.new(wl.html_url, wl.description, wl.user.nickname)
1.9.2p290 :165?> end
1.9.2p290 :166?> end
1.9.2p290 :167?> end
1.9.2p290 :168?> end
1.9.2p290 :169?> x.report("second:") do
1.9.2p290 :170 > User.all.map do |user|
1.9.2p290 :171 > user.watchlists.all.map do |wl|
1.9.2p290 :172 > if wl.tags_array == ["ruby", "web", "framework"]
1.9.2p290 :173?> competitors << Competitor.new(wl.html_url, wl.description, wl.user.nickname)
1.9.2p290 :174?> end
1.9.2p290 :175?> end
1.9.2p290 :176?> end
1.9.2p290 :177?> end
1.9.2p290 :178?> x.report("third:") do
1.9.2p290 :179 > User.all.map do |user|
1.9.2p290 :180 > user.watchlists.all.map do |wl|
1.9.2p290 :181 > if wl.tags_array == ["ruby", "web", "framework"]
1.9.2p290 :182?> competitors << Competitor.new(wl.html_url, wl.description, wl.user.nickname)
1.9.2p290 :183?> end
1.9.2p290 :184?> end
1.9.2p290 :185?> end
1.9.2p290 :186?> end
1.9.2p290 :187?> end
user system total real
first: MONGODB (30ms) heroku_app1707530['users'].find({})
MONGODB [DEBUG] cursor.refresh() for cursor 6320857008182747446
MONGODB [DEBUG] cursor.refresh() for cursor 6320857008182747446
1.460000 0.010000 1.470000 ( 1.475545)
second: MONGODB (24ms) heroku_app1707530['users'].find({})
MONGODB [DEBUG] cursor.refresh() for cursor 8580701579081246457
MONGODB [DEBUG] cursor.refresh() for cursor 8580701579081246457
1.470000 0.010000 1.480000 ( 1.494812)
third: MONGODB (24ms) heroku_app1707530['users'].find({})
MONGODB [DEBUG] cursor.refresh() for cursor 6472818135140756688
MONGODB [DEBUG] cursor.refresh() for cursor 6472818135140756688
1.490000 0.010000 1.500000 ( 1.505000)
=> true
1.9.2p290 :188 >
对比第二个代码:
1.9.2p290 :065 > Competitor = Struct.new(:html_url, :description, :user)
1.9.2p290 :066 > competitors = []
=> []
1.9.2p290 :067 > Benchmark.bm(10) do |x|
1.9.2p290 :068 > x.report("first:") {User.where('watchlists.tags_array' => %w[ruby web framework]).only(:nickname, :watchlists).each{|u|u.watchlists.where(:tags_array => %w[ruby web framework]).each{|wl|competitors << Competitor.new(wl.html_url, wl.description, u.nickname)}}}
1.9.2p290 :069?> x.report("second:") {User.where('watchlists.tags_array' => %w[ruby web framework]).only(:nickname, :watchlists).each{|u|u.watchlists.where(:tags_array => %w[ruby web framework]).each{|wl|competitors << Competitor.new(wl.html_url, wl.description, u.nickname)}}}
1.9.2p290 :070?> x.report("third:") {User.where('watchlists.tags_array' => %w[ruby web framework]).only(:nickname, :watchlists).each{|u|u.watchlists.where(:tags_array => %w[ruby web framework]).each{|wl|competitors << Competitor.new(wl.html_url, wl.description, u.nickname)}}}
1.9.2p290 :071?> end
user system total real
first: MONGODB (163ms) heroku_app1707530['users'].find({"watchlists.tags_array"=>["ruby", "web", "framework"]}, {:_type=>1, :nickname=>1, :watchlists=>1})
MONGODB [DEBUG] cursor.refresh() for cursor 7239021952645827000
0.330000 0.000000 0.330000 ( 0.380199)
second: MONGODB (164ms) heroku_app1707530['users'].find({"watchlists.tags_array"=>["ruby", "web", "framework"]}, {:_type=>1, :nickname=>1, :watchlists=>1})
MONGODB [DEBUG] cursor.refresh() for cursor 4816095738351422260
0.320000 0.010000 0.330000 ( 0.381196)
third: MONGODB (125ms) heroku_app1707530['users'].find({"watchlists.tags_array"=>["ruby", "web", "framework"]}, {:_type=>1, :nickname=>1, :watchlists=>1})
MONGODB [DEBUG] cursor.refresh() for cursor 5014359782446173361
0.390000 0.010000 0.400000 ( 0.397241)
=> true
1.9.2p290 :072 >
然后第二个代码的结果真的更快,CPU 消耗更少......,感谢 rubish 的 "second code"
关于ruby-on-rails - 如何对 mongodb/mongoid 脚本进行基准测试,以比较两种不同的查询技术,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10123990/
我正在阅读一些基准测试技巧,并在此站点上发现了一条提示“重新启动 MySQL 服务器以消除任何不需要的缓存因素”:http://blog.monitor.us/2012/09/the-gold-sta
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。 关闭 7 年前。
我在linux上测量cpu时间和排序算法的时间。我使用getrusage来测量cpu时间,并使用clock_gettime CLOCK_MONOTONIC来获取墙时间。尽管我注意到cpu时间大于墙上时
我可以阅读很多关于 OpenCL 的文章,它似乎是最有前途的(唯一的?)多架构库。 OpenCL应该是第一个并行架构编程标准,它最终会被大部分程序员采用。这很好,但是从 native 编程库迁移到 O
我想在不使用外部依赖项的情况下对一些 Lua 进行基准测试。我目前正在使用 os.clock: local function dummy() end local start = os.clock()
我对此很好奇。 我想检查哪个函数更快,所以我编写了一些代码并执行了很多次。 public static void main(String[] args) { long ts;
有没有办法在项目的开发阶段对 SQL 查询进行基准测试? 有问题的表中只有几个示例行,但我想在行数达到数千、数百万、数十亿、数万亿、数亿等等之前对一些查询进行基准测试 用数千行样本数据填充表格是唯一的
我正在尝试测量使用 rdtsc 执行函数“check()”所需的时间,如下所示: a = rdtsc(); check(pw); b = rdtsc(); return (b-a); 但是,我收到的时
我想在我的 Hadoop 集群上执行基准测试和性能测试。我知道 hadoop-mapreduce*test*.jar 和 hadoop-mapreduce-examples*.jar 有很多用于基准测
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
这个现在非常常见的算法问题是在白板考试期间由监考人员提出的。我的工作是观察、倾听和客观判断给出的答案,但我无法控制这个问题,也无法与回答者互动。 给了五分钟的时间分析问题,考生可以写项目符号,伪代码(
我把代码从 http://www.bonto.ch/blog/2011/12/08/json-libraries-for-ios-comparison-updated/并在我的本地机器上进行了测试。
我正在尝试使用 MySQL 基准测试来测试一些查询。但是,我遇到了一个错误。 SELECT benchmark (10000, (select title from user)); 作为返回,我得到了
我很好奇这个。 我想检查哪个函数更快,所以我创建了一些代码并执行了很多次。 public static void main(String[] args) { long ts;
关闭。这个问题需要更多focused .它目前不接受答案。 想改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭 9 年前。 Improve this qu
我经常想比较同一函数的多个实现的运行时性能。对于个人输入,标准是一个很好的工具。 但是有什么简单的方法可以在不同的输入大小上绘制代码的性能,例如看算法复杂度? 理想情况下,我向库传递一个类型为 Ben
我有一系列旨在完成相同功能的功能。相同的输入产生相同的输出,但是执行这些输出所需的时间因功能而异。我想确定哪个是“最快”的,我想对自己的测量结果具有“统计学意义”有一定的信心。 细读Wikipedia
我想编写一个加载基准测试,它以编译时已知的步幅跨过给定的内存区域,并在该区域的末尾(2 的幂)使用尽可能少的非加载指令进行包装有可能。 例如,给定步长 4099,rdi 中的迭代计数以及 rsi 中指
我有多个组件与 RabbitMQ 相连。有些是生产者和消费者。我需要对我的系统进行基准测试/负载测试。我需要确保消费者每秒可以处理 N 条消息。我在互联网上做了一些搜索,但还没有真正找到任何东西。有没
是否有任何基准或研究来比较这两个 IDE --稳定性-- 开发人员生产力 - 特征 - 表现-- 等等 最佳答案 我是 Eclipse 用户(不是自愿的)。不确定稳定性,但性能方面 NetBeans
我是一名优秀的程序员,十分优秀!