1

我有一个在 Heroku 上运行 Mongoid 的 Rails 应用程序,我需要设置一些索引以使数据库更快。我已经尝试在几个地方阅读它,并且我知道 Mongoid 有一些用于索引的内置函数,但我不确定应用它们的内容以及索引的频率。

我想索引的主要是我的设计模型:

scope :full_member_and_show, where(full_member: true).and(show: true).desc(:created_at)
scope :not_full_member_and_show, where(full_member: false).and(show: true).desc(:created_at)

embeds_many :comments
belongs_to :designer

search_in :tags_array

attr_accessible :image,  :tags, :description, :title, :featured, :project_number, :show



field :width
field :height
field :description
field :title
field :tags, type: Array
field :featured, :type => Boolean, :default => false
field :project_number, :type => Integer, :default => 0
field :show, :type => Boolean, :default => true
field :full_member, :type => Boolean, :default => false
field :first_design, :type => Boolean, :default => false

我需要索引什么,我究竟如何使用 Mongoid 进行索引,我应该多久做一次?

错误更新

如果尝试索引以下内容:

index({ full_member: 1, show: 1 }, { unique: true })

它向我抛出了这个错误:

Invalid index specification {:full_member=>1, :show=>1}; should be either a string, symbol, or an array of arrays.
4

1 回答 1

3

你不需要定期索引:一旦你添加了一个索引,mongo 会随着集合的变化保持该索引是最新的。这与 MySQL 或 Postgres 中的索引相同(您可能一直在考虑类似 solr 的东西)

要索引的内容取决于您将对数据集进行的查询。当您进行更新并消耗磁盘空间时,索引确实会带来一些开销,因此您不想在不需要它们时添加它们。

你通过索引告诉 mongoid 你想要什么索引,例如

class Person
  include Mongoid::Document
  index :city
end

对于 mongo 支持的各种索引,mongoid 文档中有大量示例。

然后你跑

rake db:mongoid:create_indexes

这确定了您想要的索引(基于index模型中的调用),然后确保它们存在于数据库中,并在必要时创建它们。在开发中,您将在向模型添加索引后运行它。在生产中,将其作为部署的一部分运行是有意义的(仅当您自上次部署以来添加了索引时才需要这样做,但系统地执行它会更容易)

文档中有很多关于 mongo 如何使用索引的信息

于 2012-07-03T17:25:27.810 回答