2013-02-23 78 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) 

我意識到這並不直接回答你的問題,但希望它仍然有幫助。

約翰

相關問題