2013-02-23 50 views
13

我非常喜欢YAML的数据模型,保留了JSON的大部分简单性,并使用一些有时非常重要的功能(如自定义数据类型和引用)来扩展它。那么有什么方法可以在YAML数据模型(或者非常相似的东西)中存储大量数据并使用索引来查询它吗?像YAML数据库,类似于XML databases或像Mongo DB这样的JSON数据库。或者是否有从YAML到Mongo DB的映射器,让我可以透明地将它用作YAML商店?是否有YAML数据库?

我还没有找到任何东西,所以也许没有任何东西。为什么会这样?这是一个愚蠢的想法还是YAML太年轻了,他们会来吗?

+0

我不确定你在找什么... ...?有许多库可以从YAML转换为特定于平台的模型(许多在[WikiPedia](http://en.wikipedia.org/wiki/YAML)上列出)。从这些模型中,您可以使用MongoDB的许多平台驱动程序之一来存储和查询/ etc。 – WiredPrairie 2013-02-23 17:02:57

+0

我对导入YAML文件并不是很感兴趣,而是有一个数据库与YAML类似的数据模型。我更新了这个问题来澄清这一点。 – mb21 2013-02-23 18:29:01

+0

许多几十个基于文档的“NoSQL”数据库与您提出的“YAML”数据库之间有什么区别? – WiredPrairie 2013-02-23 19:13:02

回答

2

Yaml只是用于配置目的。它不适用于MongoDB等数据库,因为序列化需要比json更长的时间。实际上,json不是yaml的一个子集(尽管它很接近)。 Json库通常更快:stackoverflow.com/questions/2451732/ ...。

如果互操作性和速度是一个问题,请使用JSON。 - Erik Aronesty

+0

任何有关您的文字的参考都会很感激。 – DontVoteMeDown 2013-06-18 19:26:35

+7

YAML对于人类来说输入和阅读要快得多。即使在序列化方面存在一些缓慢的情况,机器时间比人们的时间便宜得多。进一步的JSON和MongoDB不支持引用,这是一个重要的缺点。有时候处理速度并不是你想要优先考虑的重要因素;有时候开发速度和客户端透明度要重要得多。 – CommaToast 2014-11-14 17:18:20

+0

@CommaToast,你没有正确思考这个问题,你的无操作心态忽视了系统问题。在现实世界中,你需要你的心态,写下纯粹的垃圾,并期望它足够好......如果你在数据库中使用了YAML,那么在任何时候它都不会足够好。为什么?由于系统编程的存在是出于某种原因,而Web开发的心态与良好的系统工作类似。否则,我们只需在Ruby中编写我们的内核,我们不会有一个很好的理由。你可以做到这一点,对开发者来说更​​容易,而且设计精良......但你还没有做到。 – TechZilla 2016-07-11 15:21:02

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方法。你可能要开始工作了一个方案与实例变量是对象(即不只是字符串,符号等)

现在蒙戈代码中插入该项目类:

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

我意识到这并不直接回答你的问题,但希望它仍然有帮助。

约翰

相关问题