2013-02-23 3 views
13

Я очень люблю модель данных YAML, сохраняя большую часть простоты JSON и расширяя ее несколькими иногда важными функциями, такими как пользовательские типы данных и ссылки.Есть ли база данных YAML?

Итак, есть ли способ хранить много данных в модели данных YAML (или что-то очень похожее) и запрашивать ее с помощью индекса? Как база данных YAML, аналогичная XML databases или базам данных JSON, таким как Mongo DB. Или есть ли ящик от YAML к чему-то вроде Mongo DB, который позволяет мне прозрачно использовать его в качестве магазина YAML?

Я ничего не нашел, поэтому, возможно, их нет. Почему это так? Это глупая идея или ЯМЛ просто слишком молод, и они придут?

+0

Я точно не знаю, что вы ищете ...? Существует множество библиотек для конвертирования из YAML в конкретные модели платформы (многие из них перечислены на [WikiPedia] (http://en.wikipedia.org/wiki/YAML)). Из этих моделей вы можете использовать один из многих драйверов платформы для MongoDB для хранения и запросов/и т. Д. – WiredPrairie

+0

Я не так сильно заинтересован в импорте файлов YAML, но имею в виду базу данных с моделью данных, подобной YAML. Я уточнил вопрос, чтобы прояснить это. – mb21

+0

В чем разница между любыми из множества десятков баз данных на базе «NoSQL» и базы данных «ЯМЛ», которую вы предлагаете? – WiredPrairie

ответ

2

Yaml скорее используется для целей конфигурации. Он не используется для базы данных, такой как MongoDB, потому что сериализация занимает больше, чем json. Фактически, json не является подмножеством yaml (хотя он близок). Json библиотеки, как правило, быстрее: stackoverflow.com/questions/2451732/ ....

Если интероперабельность и скорость вызывают озабоченность, используйте JSON. - Erik Aronesty

+0

Любая информация о вашем тексте всегда ценится. – DontVoteMeDown

+7

YAML намного быстрее, чтобы человек мог вводить и читать. Даже если была некоторая медлительность в том, как сериализовать его, машинное время намного дешевле человеческого времени. Далее JSON и MongoDB не поддерживают ссылки, что является критическим недостатком. Иногда скорость обработки не важная вещь, которую вы хотите установить приоритет; иногда важны скорость разработки и прозрачность клиента. – CommaToast

+0

@CommaToast, Ваш, не задумываясь над этой проблемой, ваш менталитет no-ops игнорирует системные проблемы. В реальном мире вы берете свой менталитет и пишете чистый мусор и ожидаете, что он будет достаточно хорош ... если вы использовали YAML внутри БД, это уже не было бы достаточно хорошим на любом участке. Зачем? Потому что системное программирование существует по какой-то причине, а менталитет веб-разработки - это 180, из которых работают хорошие системы. В противном случае мы просто напишем наши ядра в Ruby, мы не помышляем. Вы можете сделать и то, и другое для разработчиков, и хорошо спроектированы ... но вы еще не сделали этого. – 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. И вы, вероятно, хотите, чтобы приступить к разработке схемы для классов с переменными экземпляра, которые являются объектами (т.е. не только строки, символы и т.д.)

Теперь код Монго, чтобы вставить деталь:

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

I понимаете, это не отвечает на ваш вопрос напрямую, но, надеюсь, это все еще помогает.

John

Смежные вопросы