2013-08-17 54 views
0

在ROR和mongoid作爲映射器,我碰到這類模型傳來:Rails應用程序的MongoDB指數澄清

class StockPrice 
include Mongoid::Document 
include Mongoid::Timestamps 

field :stock_id, type: String 
field :price, type: Float 

index :stock_id => +1, :updated_at => -1 

def self.price(stock_id) 
    where(stock_id: stock_id).desc(:updated_at).first.price 
end 
def self.crawl(stock_id) 
# I am stock price from internet using a web crawler 
end 
end 

作爲一個新手到MongoDB中,我有以下疑點:
1)什麼指數基本上是用於?
2)是什麼線在代碼傳達:
其中(STOCK_ID:STOCK_ID).desc(:的updated_at).first.price

回答

1

索引MongoDB中一樣與任何其他數據庫用於 - 它允許快速訪問數據記錄以及訂購。對於任何相當大的MongoDB數據庫(並且MongoDB數據庫可能是人爲的),索引對於良好的性能至關重要。

任何好的MongoDB參考都將解決索引問題。

+1和-1指的是索引中字段值的方向。因此,updated_at在索引中下降

where ...行提供該方法將返回與傳入的stock_id匹配的第一條記錄。匹配stock_id的記錄按降序排列在updated_at上,因此該函數將返回最新的updated_at值。請注意,該索引定義爲stock_id上的第一個索引,然後是降序索引updated_at,該索引進行了優化,以便能夠儘快返回該值。

+0

嘿,你能指出任何好的來源,我可以閱讀更多關於此。 –

+0

MongoDB在行動中,由Manning Press http://www.manning.com/banker/對MongoDB進行了很好的介紹,同時對索引進行了很好的解釋,爲什麼需要這樣做,以及如何判斷哪些查詢運行速度太慢,需要定義索引。 – nachbar

+0

我剛剛看到他們在哪裏開始第二版MongoDB in Action,這裏是:http://manning.com/banker2/我相信如果您在完成第二版之前訂購了它們,它們會發送電子版本被寫入,並且還允許訪問第一版的電子版本(因爲該版本是完整的,而新版本不是) – nachbar