我非常喜欢YAML的数据模型,保留了JSON的大多数简单性,并使用一些有时重要的功能(如自定义数据类型和引用)来扩展它。
那么有没有办法在YAML数据模型中存储大量数据(或者非常类似的东西)并使用索引查询它?像YAML数据库,类似于XML databases或JSON数据库,如Mongo DB。或者是否有一个从YAML到Mongo DB的映射器,让我透明地将它用作YAML商店?
我没有找到任何东西,所以也许没有。那为什么会这样?这是一个愚蠢的想法,还是YAML太年轻了,他们会来吗?
答案 0 :(得分:3)
或者是否有一个从YAML到Mongo 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)
我意识到这并没有直接回答你的问题,但希望它仍然有帮助。
约翰
答案 1 :(得分:2)
Yaml
用于配置目的。它不用于MongoDB等数据库,因为序列化需要的时间超过json
。事实上,json不是yaml的一个子集(虽然它很接近)。 Json
库通常更快:stackoverflow.com/questions/2451732/ ....
如果需要考虑互操作性和速度,请使用JSON。 - Erik Aronesty
答案 2 :(得分:2)
更新主题,看看:http://blog.varunajayasiri.com/yamldb。
“ YAML数据库是一个将文档存储为YAML文件的文档数据库。只需编辑yaml文件即可维护数据库中的文档。
该数据库旨在用于CMS系统之类的系统,在该系统中,需要一种简单的方法来编辑数据,并且数据对象的数量不是很高。它也可以用来存储设置和配置。
将数据库存储为单独的文件,使您可以在数据库上使用git等版本控制系统,这再次非常适合存储设置,配置,博客文章和CMS内容。”