gpt4 book ai didi

ruby-on-rails - MongoDB 对 system.namespaces 集合的冗余查询?

转载 作者:可可西里 更新时间:2023-11-01 10:35:14 25 4
gpt4 key购买 nike

所以我使用 MongoDB(与 Mongoid Ruby Gem)已经有一段时间了,随着我们的应用程序的增长,我注意到随着我的数据的增长,请求花费的时间越来越长,这是一个典型的请求我的应用程序看起来像,但它需要大约 500 毫秒,仅用于数据库内容。

这里没什么特别的,只是一些 Controller 的东西:

Started GET "/cities/san-francisco?date_range=past_week" for 127.0.0.1 at 2011-11-15 11:13:04 -0800
Processing by CitiesController#show as HTML
Parameters: {"date_range"=>"past_week", "id"=>"san-francisco"}

然后查询运行,但我不明白的是,对于运行的每个查询,它在实际运行之前执行 MONGODB dashboard_development['system.namespaces'].find({})它!为什么?

MONGODB dashboard_development['system.namespaces'].find({})
MONGODB dashboard_development['users'].find({:_id=>BSON::ObjectId('4e80e0090f6d2e306f000001')})
MONGODB dashboard_development['system.namespaces'].find({})
MONGODB dashboard_development['cities'].find({:slug=>"san-francisco"})
MONGODB dashboard_development['system.namespaces'].find({})
MONGODB dashboard_development['accounts'].find({:_id=>BSON::ObjectId('4e80e0090f6d2e306f000002')})
MONGODB dashboard_development['system.namespaces'].find({})
MONGODB dashboard_development['neighborhoods'].find({"city_id"=>BSON::ObjectId('4e80e00a0f6d2e306f000005')})

然后 View 被渲染,它们也很慢......但这是一个单独的问题,我将在另一个时间解决。

Rendered cities/_title_and_scope.html.erb (109.3ms)
Rendered application/_dropdown.html.erb (0.1ms)
Rendered application/_date_range_selector.html.erb (6.2ms)
Rendered cities/show.html.erb within layouts/application (122.7ms)
Rendered application/_user_dropdown.html.erb (0.9ms)
Rendered application/_main_navigation.html.erb (5.8ms)

所以减去请求花费的 View 大约 500 毫秒,这对于一个真正简单的查询来说太长了,此外,应用程序会增长,时间也会增长。此外,此示例比请求通常花费的速度更快,有时需要 1000 毫秒或更多!

Completed 200 OK in 628ms (Views: 144.9ms)

另外我想问一下什么字段最适合做索引?也许这是我的问题,因为我根本没有真正使用它们。任何有助于理解这一点的帮助都会非常感激。谢谢!

最佳答案

您需要使用索引——否则,您的 mongo 查询将执行最好描述为全表扫描的操作。它将您集合的整个 json 文档加载到内存中,然后评估每个文档以确定它是否应该包含在响应中。

字符串、日期、数字都可以用作索引——诀窍是,对您正在“哪里”执行的每个属性都有一个索引。

您可以在您的 mongo 配置中关闭表扫描以帮助查找表扫描并销毁它们!

关于ruby-on-rails - MongoDB 对 system.namespaces 集合的冗余查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8141979/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com