2013-02-23 22 views
13

私はYAMLのデータモデルが非常に好きです.JSONのシンプルさの大部分を保存し、カスタムデータ型や参照などのいくつかの重要な機能を拡張しています。YAMLデータベースはありますか?

YAMLデータモデル(またはそれに近いもの)にたくさんのデータを格納し、インデックスを使用してクエリを実行する方法はありますか? YAMLデータベースのように、XML databasesやMongo DBのようなJSONデータベースに似ています。または、YAMLのマッパーがMongo DBのようなものになっていますので、YAMLストアとして透過的に使用できますか?

何も見つかりませんでしたので、おそらく何もありません。それはなぜでしょうか?それは愚かなアイデアかYAMLは単に若すぎるのですか?彼らは来るでしょうか?

+0

私はあなたが探しているものを正確にはわかりません... ...? YAMLからプラットフォーム固有のモデル(多くは[WikiPedia](http://en.wikipedia.org/wiki/YAML)に掲載されています)に変換するライブラリはたくさんあります。これらのモデルから、MongoDB用の多くのプラットフォームドライバの1つを使用して、/ etcを保存して照会することができます。 – WiredPrairie

+0

私はYAMLファイルのインポートに興味はありませんが、YAMLに似たデータモデルを持つデータベースを持っています。これを明確にするために質問を更新しました。 – mb21

+0

何十種類もの文書ベースの "NoSQL"データベースと提案している "YAML"データベースの違いは何ですか? – WiredPrairie

答えて

2

Yamlは、設定目的でむしろ使用されます。シリアライゼーションがjsonよりも長くかかるため、MongoDBなどのデータベースには使用されません。実際、jsonはyamlのサブセットではありません(ただし、近いですが)。 Jsonライブラリは一般的に高速です:stackoverflow.com/questions/2451732/ ...

相互運用性と速度が問題になる場合は、JSONを使用してください。 - Erik Aronesty

+0

あなたのテキストに関する参考情報は常に感謝しています。 – DontVoteMeDown

+7

YAMLは人間が入力して読むのがはるかに高速です。シリアル化の方法が遅い場合でも、マシン時間は人間の時間よりもはるかに安いです。さらに、JSONとMongoDBは参考文献をサポートしていません。批判的な欠点です。場合によっては、処理速度が優先順位を付けたい重要なものではない場合もあります。時には開発スピードとクライアントの透明性がより重要になります。 – CommaToast

+0

@CommaToast、あなたはこの問題について正しく考えていないので、ノーオプスの考え方はシステムの懸念事項を無視します。現実世界では、あなたの精神を取り、純粋なゴミを書き、それが十分であると期待しています....あなたがDBの中でYAMLを使用した場合、それはもはや十分な伸びによっては十分ではありません。どうして? Systems Programmingは理由のために存在するため、Web Developmentの考え方は、Systemsがどのように機能するかということから180です。さもなければ、私たちはRubyにカーネルを書きます。私たちはまあまあの理由ではありません。両方をやり、devsの方が簡単にでき、うまく設計されています...しかし、あなたはまだそれを作っていません。 – TechZilla

1

か、私には透過的にYAMLストアとしてそれを使用することができますモンゴDBのようなものにYAMLからマッパーはありますか?

私が知る限りでは直接にはありません。

主な問題は、Mongo DBのインターフェイスがハッシュ(キーと値のペア)に基づいているようです。したがって、本質的にYAMLからハッシュまでのマッパーがあるかどうかを尋ねています。 YAMLは任意の構造体を格納できるため、ハッシュはできません。

しかし、あなたはあなたのオブジェクトを簡素化するために喜んでいる場合は、部分的にこれを行うことができるかもしれない:

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 

あなたはto_yamlコードを見れば、あなたはそれがto_hash方法と非常に似ていることがわかります(それは私が考えを得た場所なので)。

おそらくfrom_hashメソッドも必要になることに注意してください。そして、あなたは、おそらくオブジェクトであるインスタンス変数を持つクラスのためのスキームを出し作業を開始したい(すなわちなどの文字列、記号、だけではなく)

今のmongoコード項目を挿入するには:

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

Iこれはあなたの質問に直接答えないことを認識していますが、それでもうまくいけば助かります。

ジョン

関連する問題