我的Ruby脚本需要一个小的非结构化数据库.不是Sqlite,更像是持久化哈希表的东西可以完美地工作,只要它可以存储基本的Ruby结构(数组,字符串,哈希等 - 所有可序列化的)并且在Ruby脚本崩溃时不会被破坏.
我知道Perl和Tie :: Hash有很多类似的解决方案,所以可能有一些类似于Ruby的宝石.那是什么宝石?
编辑:据我所知,PStore和yaml解决方案基于读取,解组,重新编组和在每次更改时编写整个数据库.这不仅要求所有它都适合内存,它是O(n ^ 2).所以它们都不是一个特别好的解决方案.
ger*_*rit 10
Ruby标准库中有PStore,无需安装任何东西.
require 'pstore'
store = PStore.new('store.pstore')
store.transaction do
store['key'] = 'value'
end
Run Code Online (Sandbox Code Playgroud)
也许FSDB(文件系统数据库)会满足您的需求。
\n\n\n\n\nFSDB 是文件系统数据库。FSDB 提供了一个线程安全、进程安全的数据库类,它使用本机文件系统作为后端,并允许多种文件格式和序列化方法。用户根据相对于数据库基目录的路径来访问对象。它\xe2\x80\x99的重量非常轻(数据库的状态本质上只是一个路径字符串,并且代码大小非常小,不到1K行,全是ruby)。
\n
$ sudo gem install fsdb\nRun Code Online (Sandbox Code Playgroud)\n\n这是文档中的示例:
\n\nrequire \'fsdb\'\n\ndb = FSDB::Database.new(\'/tmp/my-data\')\n\ndb[\'recent-movies/myself\'] = ["LOTR II", "Austin Powers"]\nputs db[\'recent-movies/myself\'][0] # ==> "LOTR II"\n\ndb.edit \'recent-movies/myself\' do |list|\n list << "A la recherche du temps perdu"\nend\nRun Code Online (Sandbox Code Playgroud)\n