想要在单个字符串列中存储名称/值对,我该怎么做?

时间:2011-04-16 21:27:45

标签: ruby-on-rails ruby

我想在数据库中存储名称/值对。

我想要从db中提取这些名称/值对并循环遍历它们并输出如下内容:

nvpairs.each do |k,v|

  puts k, v

end

我希望它尽可能快(在将数据库中的行加载到模型的属性中时对其进行反序列化,或者如果我从字符串模型属性手动执行此操作),我有哪些选项?

3 个答案:

答案 0 :(得分:1)

检索包含编码的名称/值对的字符串,然后解码它们以便进一步处理,可能比分别检索名称和值字段并处理它们要慢。

当没有where子句时,数据库非常快速地抓取行。条款几乎一样快。如果您需要真正的速度,那么编写一个基于DBI的SQL查询。如果您不需要那么快的速度,那么自己编写原始SQL并将其填充到ORM查询中。如果那是太多的工作,那么我开始质疑速度需求,并认为ActiveRecord或任何ORM就足够了,因为它们可以为简单的查找生成良好的SQL。而且,在那一点上,你将非常快速地掌握所有记录。

听起来像你需要做一个基准测试。

答案 1 :(得分:0)

提出一种哈希到字符串的编码/解码方法。

例如,您可以使用逗号分隔键/值和分号以分隔对;如果它们是内容的一部分,请确保任何控制字符都可以被转义(例如,使用“\”来转义逗号,分号和反斜杠,它们实际上是键/值的一部分)。例如:

h = {1 => 2, '3,4' => '5;6', 7 => '8\9'}
s = encode_hash(h) # => "1,2;3\\,4,5\\;6;7,8\\9"
d = decode_hash(s) # => {"1" => "2", "3,4" => "5;6", "7" => "8\\9"}

性能将在很大程度上取决于您的实现,但当然,本机模块易于编写并且可以产生出色的结果。

答案 2 :(得分:0)