2010-11-19 82 views
6

MongoDB中的常用做法是使用短名稱來節省空間。例如,人們可能希望使用「FN」,而不是「FIRST_NAME」Mongoid和Rails的字段別名

然而,在您的應用程序,你如果使用「FN」所有的地方擰緊。這太難看了。具體來說,在Mongoid中聲明一個字段時,是否有一種簡單的方法來指定別名?

而且,沒有人知道,使用Mongoid任何開源項目範例嗎?

謝謝!

回答

3

我從來沒有見過的短鍵名在任何MongoDB的項目,所以我不會說這是常見的做法。我認爲你不會看到明顯的速度提升,並且會不必要地使代碼複雜化。描述性的名字很好,只要它們不那麼具有描述性,它會讓你永遠輸入。

有很多MongoDB開源項目。只要在github上搜索就可以了。

- 編輯下面 -

這是一個很有見解的答案。如其他答案中所述,覆蓋處理方法(https://github.com/mongoid/mongoid/blob/master/lib/mongoid/attributes/processing.rb)在您必須使用小字段名的情況下更爲合適。

+5

這不是一個速度問題,這是一個空間問題。將「first_name」和「fn」存儲10億次(〜10GB vs〜2GB)存在很大差異。如果您使用的是商用硬件,空間便宜,但如果您使用的是服務器級硬件,則空間很貴。請參閱:http://blog.boxedice.com/2010/10/23/on-shortened-field-names-in-mongodb/ – Intelekshual 2011-02-24 20:01:38

+0

我只能看到縮短字段名稱的唯一時間是:1)較小的值,2 )非常大的數據集,3)非常鬆散的模式(adhoc字段)。鑑於這三種情況,我同意重寫處理方法是有意義的(如下面的答案)。即使這樣,在查詢時也必須記住,所以你生成的代碼更復雜一些。例如,如果我有一個非常大的數據集,值很小,但是我的模式幾乎不會改變(如跟蹤統計數據),那麼我可能會選擇postgresql而不是mongodb。 – 2011-02-25 17:41:56

+0

很確定10Gen(MongoDB背後的公司)的人與Dave Rapin的意見不一致[1]。不僅如@Intelekshual所提到的那樣,您可以節省大量的磁盤空間,但Mongo需要將工作集和索引存儲在內存中。較小的文件意味着你可以更存儲在內存中,更不用說性能由於不必處理更加臃腫蒙戈文檔 [1]增加你的應用程序代碼的收穫:http://docs.mongodb.org/manual/faq/developers /#how-do-i-optimize-storage-use-for-small-documents – xentek 2013-07-12 21:53:29

0

像這樣的東西應該在你的類文件中工作。 (它並沒有在所有的情況下進行了測試,正好路過一個哈希到創建或更新。)

field :fn, :type => String 

    alias :first_name :fn 
    alias :filtered_process :process 

    def process(attrs = nil) 
    attrs[:fn] = attrs[:first_name] unless attrs.nil? 
    filtered_process(attrs) 
    end 
+0

Mongoid 3內置了對字段別名的支持,因此您不必使用ruby的方法緩存去除別名方法。 – xentek 2013-07-12 21:56:31