2010-11-19 23 views
6

MongoDB'de yerden tasarruf etmek için kısa anahtar adlarını kullanmak yaygın bir uygulamadır. Örneğin, "first_name" yerine "first_name" yerine "fn" kullanmak isteyebilirsiniz. Ancak, uygulamanızın her yerinde "fn" kullanırsanız vidalanırsınız. Çok çirkin. Özellikle Rails için, Mongoid'deki bir alanı bildirirken takma ad belirlemenin kolay bir yolu var mı?Mongoid ve Rails ile alan takma adları

Ayrıca, Mongoid kullanan herhangi bir açık kaynaklı örnek projeyi bilen var mı?

Teşekkürler!

cevap

3

Hiçbir MongoDB projesinde kısa anahtar adları görmedim, bu yüzden yaygın bir uygulama olduğunu söylemem. Fark edilebilir bir hız artışı göreceğinizi düşünmüyorum ve kodunuzu gereksiz yere karmaşıklaştıracaktır. Tanımlayıcı isimler o kadar uzun ki, sizi sonsuza dek yazacak kadar açıklayıcı değiller.

Birçok MongoDB açık kaynak projesi var. Sadece github üzerinde bir arama yapın.

- aşağıda düzenleme -

Bu oldukça inatçı bir cevaptı. Diğer cevaplarda anlatıldığı gibi işleme yöntemlerinin (https://github.com/mongoid/mongoid/blob/master/lib/mongoid/attributes/processing.rb) üzerine yazmak, küçük alan adlarına sahip olmanız gereken senaryolarda daha uygundur.

+5

Bu bir hız sorunu değil, bir boşluk sorunu. "First_name" ve "fn" nin milyarlarca kez kaydedilmesi arasında büyük bir fark var (~ 10GB vs ~ 2GB). Emtia donanımında çalışıyorsanız, alan ucuzdur, ancak sunucu sınıfı donanımında çalışıyorsanız, alan pahalıdır. Bkz .: http://blog.boxedice.com/2010/10/23/on-shortened-field-names-in-mongodb/ – Intelekshual

+0

Alan isimlerini kısalttığını görebildiğim tek zaman: 1) Küçük değerler, 2) Çok büyük veri kümesi, 3) Çok gevşek şema (adhoc alanlar). Bu 3 vaka göz önüne alındığında, işleme yöntemlerinin üzerine yazmanın mantıklı olduğunu kabul ediyorum (aşağıda belirtildiği gibi). O zaman bile, sorgulama yaparken aklınızda bulundurmanız gerekecek, dolayısıyla oldukça karmaşık bir kod üretiyorsunuz. Örneğin, gerçekten büyük bir veri kümem, küçük değerlerim varsa, ancak şemam neredeyse hiç değişmeyecek (izleme istatistikleri gibi), muhtemelen mongodb yerine postgresql kullanmayı tercih ediyorum. –

+0

Oldukça eminim ki, 10Gen'deki (MongoDB'nin arkasındaki şirket) arkadaşlarınız Dave Rapin'in düşüncesine katılmıyorlar [1]. Sadece, sözde @Intelekshual, önemli disk alanı tasarrufu fark edebilirsiniz, ancak Mongo çalışma kümesi ve dizinleri bellekte saklamak gerekiyor. Daha küçük belgeler hafızada daha fazla depolayabileceğiniz anlamına gelir, performans daha fazla şişirilmiş mongo dokümanlar işlemek zorunda kalmadan app kodu kazancınızı artırır söz değil [1]: http://docs.mongodb.org/manual/faq/developers/# nasıl-küçültmek-küçük depolama için kullanım-depolama-use – xentek

0

Böyle bir şey sınıf dosyanızda çalışmalıdır. (Sadece oluşturmak veya güncelleştirme olarak bir karma geçen her durumda test edilmemiştir.)

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, alan takma için destek yerleşik, bu nedenle Ruby'nin yöntem-önbellek-destorying diğer adı yöntemi kullanmak zorunda kalmazsınız. – xentek

İlgili konular