【发布时间】:2012-06-11 19:27:04
【问题描述】:
我将 Sinatra (1.3.2) 与 Mongoid (2.4.10) 一起使用。我注意到将大约 350 个 mongo 文档转换为 JSON 需要很长时间。
我添加了一些基准包装器,只是为了看看什么是最耗时的:
get '/games' do
content_type :text
obj = nil
t1 = Benchmark.measure { @games = filtered_games.entries }
t2 = Benchmark.measure { obj = @games.as_json }
t3 = Benchmark.measure { obj.to_json }
"Query: #{t1}\nTo Object: #{t2}\nJSON: #{t3}"
end
(filtered_games 只是使用 URL 中传递的参数返回 Mongoid 查询的结果)
这是一个典型的反应:
查询:0.100000 0.000000 0.100000 (0.234351)
到对象:3.560000 0.010000 3.570000 (3.569813)
JSON:0.220000 0.000000 0.220000 (0.217941)
因此,它看起来大部分时间只是将 Mongoid 对象转换为基本的 JSON 结构 (as_json)(超过 3.5 秒),而不是将该结构转换为 JSON 字符串。
文档不是特别大(大约 450 字节,每个文档 15-20 个字段)。
我想真正让我感到困惑的是,对 Mongodb 执行实际查询、解析响应并将其反序列化为 Mongoid 对象所需的时间要快得多..
这是为什么?关于如何进一步优化它的任何建议?我想我可以只使用对 Mongo 的本机调用并返回这些结果,但我希望能够继续使用我在 Mongoid 中定义的范围。
编辑:我之前实际上并没有在第一个基准测试中运行查询,因为 Mongoid 延迟加载直到 as_json 调用。
【问题讨论】:
标签: json performance mongodb sinatra mongoid