使用纯ruby存储数据的最佳方式,无依赖关系

时间:2013-12-13 06:23:03

标签: ruby

我必须仅使用ruby core或stdlib中提供的工具创建应用程序。 YAML或SQLite是否带有红宝石?有哪些其他工具可以让我将数据存储到文件中?它们的优点和缺点是什么?

3 个答案:

答案 0 :(得分:5)

Ruby的stdlib很深。也许太深了。我知道sqlite不在那里,但我想到了什么。这是我发现的......

stdlib中最多有4个不同的简单数据库:

  • PStore - 非常简单的持久哈希。为您处理编组,因此您可以存储红宝石树的树木。纯红宝石溶液。
  • SDBM - 基于C的键/值存储。 Ruby随附整个源代码,因此它应该可以跨平台移植。简单的字符串键和值。
  • GDBM - 另一个字符串键/值存储。使用GNU dbm。它的“可枚举”因此它更像哈希。可能不太便携。
  • DBM - 使用Ruby编译的平台上可用的DBM头,因此它可能是几个DBM实现之一(读取:不可移植)。另一个字符串只有键/值存储。那是3.与GDBM不同,虽然这个允许你存储非字符串值并通过调用#to_s#inspect来静默破坏它们。

我现在可能会将PStore用于小事。 SQLite可能更好,但PStore无疑更简单,所以如果工作量足够小就有意义。

您也可以使用序列化。 Marshal将转储实际的ruby对象及其数据。 YAML也可以这样做。使用JSON / YAML / CSV,您可以精确控制数据的格式。所有这些都可以与File一起使用,将其输出写入文件。

答案 1 :(得分:1)

你可以使用ruby的stdlib CSV库来存储任何数据库数据。其格式非常有用,用于存储,导出和导入DB数据。请参阅有关CSV here的文档。例如,只需:

require 'csv'

# save
CSV.open("file.csv", "wb") do |csv|
   csv << ["row", "of", "CSV", "data"]
   csv << ["another", "row"]
   ...
end

#load
CSV.foreach("file.csv") do |row|
   row # => ["row", "of", "CSV", "data"]
   ...
end

答案 2 :(得分:0)

File.open 'local.rbdb', 'w+' do |f|
  f.write JSON.generate(write_target)
End

以典型方式构建write_target数据,然后使用JSON作为存储格式。