2010-11-19 14 views
6

È prassi comune in MongoDB utilizzare nomi di chiavi brevi per risparmiare spazio. Ad esempio, si potrebbe voler usare "fn" invece di "first_name"Alias ​​di campo con Mongoide e Rotaie

Tuttavia nella tua app, sei fregato se usi "fn" dappertutto. È troppo brutto In particolare per Rails, c'è un modo semplice per specificare un alias quando si dichiara un campo in Mongoid?

Inoltre, qualcuno sa di progetti di esempio open source che utilizzano Mongoid?

Grazie!

risposta

3

Non ho mai visto nomi di tasti brevi in ​​alcun progetto MongoDB, quindi non direi che è una pratica comune. Non penso che vedresti un notevole miglioramento della velocità e complicherebbe inutilmente il tuo codice. I nomi descrittivi sono buoni così a lungo che non sono così descrittivi che ti porta per sempre a scrivere.

Ci sono molti progetti open source MongoDB. Fai una ricerca su github.

- Modifica Qui di seguito -

Questa è stata una risposta piuttosto supponente. La sovrascrittura dei metodi di elaborazione (https://github.com/mongoid/mongoid/blob/master/lib/mongoid/attributes/processing.rb) come descritto in altre risposte è più appropriata nello scenario in cui si DEVE avere nomi di campo piccoli.

+5

Non è un problema di velocità, è un problema di spazio. C'è una grande differenza tra la memorizzazione di "first_name" e "fn" un miliardo di volte (~ 10 GB vs ~ 2 GB). Se utilizzi hardware di base, lo spazio è economico, ma se utilizzi hardware di qualità server, lo spazio è costoso. Vedi: http://blog.boxedice.com/2010/10/23/on-shortened-field-names-in-mongodb/ – Intelekshual

+0

L'unica volta che vedrei necessario accorciare i nomi dei campi è quando: 1) Valori piccoli, 2) Dataset molto grande, 3) Schema molto loose (campi ad hoc). Dati questi 3 casi, concordo sul fatto che la sovrascrittura dei metodi di elaborazione abbia senso (come indicato di seguito). Anche in questo caso dovrai tenerlo a mente anche per le query, quindi stai producendo un codice un po 'più complicato. Ad esempio, se ho un dataset veramente grande, valori piccoli, ma il mio schema non cambierà quasi mai (come le statistiche di tracciamento), probabilmente opterei per postgresql invece di mongodb. –

+0

Abbastanza sicuro che la gente di 10Gen (la compagnia dietro MongoDB) non sia d'accordo [1] con l'opinione di Dave Rapin. Non solo, come menzionato @Intelekshual, puoi realizzare notevoli risparmi di spazio su disco, ma Mongo ha bisogno di memorizzare il tuo working set e gli indici in memoria. Documenti più piccoli significa che è possibile archiviarne altri in memoria, per non parlare delle prestazioni che aumentano il guadagno del codice app non dovendo gestire più documenti mongo gonfiati [1]: http://docs.mongodb.org/manual/faq/developers/# how-do-i-optimize-storage-use-for-small-documents – xentek

0

Qualcosa di simile dovrebbe funzionare nel file di classe. (Non è stato provato in tutti i casi, solo di passaggio in un hash creare o aggiornare.)

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 incorpora il supporto per l'aliasing dei campi, quindi non è necessario utilizzare il metodo alias metodo-cache-destorying di ruby. – xentek