Очень простым решением будет PStore из стандартной библиотеки Ruby. Он должен соответствовать практически всем вашим требованиям:
- PStore хранит иерархии объектов Ruby в файлах, поэтому вы можете легко использовать Hash-подобные структуры, как в CouchDB
- Вы можете получить доступ к содержимому PStore с помощью простого API
- У него есть транзакции, но, насколько мне известно, нет версий
- да
- Вы можете использовать карту Ruby и добавить функции
- Все, что вам нужно, это доступ к файловой системе
Пример:
Вставить данные в хранилище:
require 'pstore'
store = PStore.new("/tmp/store")
store.transaction do
store["products"] = [{:name => "Test", :price => 100}
{:name => "Bla", :price => 120}
{:name => "Oink", :price => 300}]
end
Запрос суммы цен на все товары:
store.transaction do
store['products'].map {|p| p[:price]}.inject {|sum, p| sum + p}
end
Больше информации в этом блоге