Хотите сохранить пары имя / значение в одном строковом столбце, как я могу это сделать? - PullRequest
0 голосов
/ 17 апреля 2011

Я хочу сохранить пары имя / значение в базе данных.

Затем я хочу вытащить эти пары имя / значение из БД, перебрать их и вывести что-то вроде:

nvpairs.each do |k,v|

  puts k, v

end

Я хочу, чтобы это было как можно быстрее (десериализация при загрузке строк из БД в свойство модели или если я делаю это вручную из свойства строковой модели), какие варианты у меня есть?

Ответы [ 3 ]

1 голос
/ 17 апреля 2011

Извлечение строк, содержащих закодированные пары имя / значение, затем их декодирование для дальнейшей обработки, вероятно, будет медленнее, чем получение полей имени и значения отдельно и их обработка.

Базы данных действительно быстро захватывают строки, когда нет выражения where. Простые, где пункты почти так же быстро. Если вам нужна реальная скорость, напишите SQL-запрос на основе DBI. Если вам не нужна такая большая скорость, напишите исходный SQL-код самостоятельно и вставьте его в запрос ORM. Если это слишком много работы, я начинаю сомневаться в требовании о скорости и думаю, что ActiveRecord или любой ORM будет достаточно, потому что они генерируют хороший SQL для простых поисков. И в этот момент вы очень быстро окажетесь на вершине всех записей.

Звучит так, будто вам нужно сделать тест.

0 голосов
/ 17 апреля 2011
0 голосов
/ 17 апреля 2011

Придумайте метод кодирования / декодирования хеш-строки.

Например, вы можете использовать запятые для разделения ключа / значений и точки с запятой для разделения пар;просто убедитесь, что любые управляющие символы могут быть экранированы, если они являются частью содержимого (например, используйте «\» для экранирования запятых, точек с запятой и обратной косой черты, которые фактически являются частью ключа / значения).Например:

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"}

Производительность во многом будет зависеть от вашей реализации, но, конечно, собственные модули просты в написании и могут дать отличные результаты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...