2013-02-23 18 views
13

Mi piace molto il modello di dati di YAML, preservando la maggior parte della semplicità di JSON e estendendolo con alcune funzionalità a volte importanti come i tipi di dati e i riferimenti personalizzati.Esiste un database YAML?

Quindi esiste un modo per memorizzare molti dati nel modello di dati YAML (o qualcosa di molto simile) e interrogarlo utilizzando un indice? Come un database YAML, analogo al XML databases o ai database JSON come Mongo DB. O c'è un mapper di YAML in qualcosa come Mongo DB che mi permette di usarlo in modo trasparente come negozio YAML?

Non ho trovato nulla quindi forse non ce ne sono. Perché dovrebbe essere? È un'idea stupida o YAML è semplicemente troppo giovane e arriveranno?

+0

Non sono sicuro di cosa stai cercando ...? Ci sono un sacco di librerie per convertire da YAML a modelli specifici della piattaforma (molti elencati su [WikiPedia] (http://en.wikipedia.org/wiki/YAML)). Da quei modelli, è possibile utilizzare uno dei numerosi driver di piattaforma per MongoDB per archiviare e interrogare/etc. – WiredPrairie

+0

Non sono molto interessato all'importazione di file YAML, ma piuttosto a un database con un modello di dati simile a YAML. Ho aggiornato la domanda per chiarire questo. – mb21

+0

Qual è la differenza tra una delle tante decine di database "NoSQL" basati su documenti e il database "YAML" che stai proponendo? – WiredPrairie

risposta

2

Yaml è piuttosto utilizzato per scopi di configurazione. Non è utilizzato per database come MongoDB perché la serializzazione richiede più tempo di json. In effetti, json non è un sottoinsieme di yaml (sebbene sia vicino). Le librerie Json sono generalmente più veloci: stackoverflow.com/questions/2451732/ ....

Se l'interoperabilità e la velocità sono un problema, utilizzare JSON. - Erik Aronesty

+0

Qualsiasi riferimento al tuo testo è sempre apprezzato. – DontVoteMeDown

+7

YAML è molto più veloce per un essere umano da inserire e leggere. Anche se c'è stata una certa lentezza nel modo di serializzarlo, il tempo della macchina è molto più economico del tempo umano. Ulteriori JSON e MongoDB non supportano i riferimenti, una carenza critica. A volte la velocità di elaborazione non è la cosa importante che vuoi dare la priorità; a volte la velocità di sviluppo e la trasparenza del cliente sono molto più importanti. – CommaToast

+0

@CommaToast, Il tuo non pensare correttamente a questo problema, la tua no-ops mentalità trascura le preoccupazioni dei sistemi. Nel mondo reale, prendi la tua mentalità e scrivi pura spazzatura e aspettati che sia abbastanza buono ... se usassi YAML all'interno del DB, non sarebbe più abbastanza buono da nessuna parte. Perché? Perché la Programmazione dei Sistemi esiste per una ragione, e la mentalità di Sviluppo Web è il risultato di ciò che i Sistemi validi funzionano. Altrimenti scriveremmo i nostri Kernel in Ruby, non per una dannata buona ragione. Puoi fare entrambe le cose, più facile per gli sviluppatori e ben progettato ... ma non lo hai ancora fatto. – TechZilla

1

o c'è un mapper da YAML a qualcosa di simile Mongo DB che mi permette in modo trasparente lo uso come un negozio YAML?

Non direttamente per quanto ne so.

Il problema principale sembra essere che l'interfaccia di Mongo DB è basata su un hash (cioè coppie chiave-valore). Quindi, in sostanza, stai chiedendo se c'è un mappatore da YAML a un hash. La risposta non è semplicemente perché YAML può immagazzinare strutture arbitrarie mentre gli hash non possono.

Ma se siete disposti a semplificare gli oggetti, si potrebbe essere in grado di fare questo in parte:

class SomeObject 
    def initialize 
    @bob = 'abc' 
    @fred = 'cde' 
    end 

    def to_hash 
    h = {} 
    instance_variables.sort.each do |v| 
    h[v] = instance_variable_get(v) 
    end 
    return h 
end 

Se si guarda il codice to_yaml vedrete che è molto simile al metodo to_hash (perché è lì che ho avuto l'idea).

Nota probabilmente avrete bisogno anche di un metodo from_hash. E probabilmente si desidera iniziare a lavorare un sistema per classi con variabili di istanza che sono gli oggetti (vale a dire non solo stringhe, simboli, ecc)

Ora il codice Mongo per inserire l'elemento:

include Mongo 
db = MongoClient.new.db('test') 
stuff = db.collection('stuff') 
item = SomeClass.new() 
... other code ... 
stuff.insert(item.to_hash) 

I rendersi conto che questo non risponde alla tua domanda direttamente, ma spero che aiuti ancora.

John

Problemi correlati