2010-03-19 1 views
3

У меня есть приложение, написанное в рубине (которое работает в JRuby VM). Профилируя его, я понял, что он тратит много (фактически почти все) свое время, превращая некоторые хеши в JSON.Простая сериализация быстрее, чем JSON? (в Ruby)

Эти хеши имеют ключи символов, значения других подобных хэшей, массивы, строки и числа.

Существует ли метод сериализации, подходящий для такого ввода, и обычно работает быстрее, чем JSON? Было бы предпочтительнее, если бы у него был Java или JRuby-совместимый камень.

В настоящее время я использую жемчужину jruby-json, которая является самой быстрой реализацией JSON в JRuby (как я сказал), поэтому переход скорее всего будет к другому методу сериализации, а не только к другой библиотеке.

Любая помощь приветствуется! Благодарю.

ответ

3

Я не знаю, насколько отличается работа на JRuby, но в МРТ я считаю, что Marshal, как правило, самый быстрый.

One article I found нашел Marshal быть около 3x быстрее, чем JSON (который сам был похож количество быстрее, чем YAML), в то время как another one ссылки о разнице 2x (см первый комментарий для JSON).

Ничего из того, что гарантирует что-либо для вашей конкретной ситуации, конечно. Не могли бы вы попробовать каждый вариант с Benchmark? Что-то вроде этого:

require 'benchmark' 
# other requires as necessary 
N = 100 # or whatever multiple is needed to get a sensible result 
Benchmark.bm(20) do |rpt| 
    rpt.report("YAML") do 
    N.times do 
     # perform your task using YAML 
    end 
    end 
    rpt.report("JSON") do 
    # as above for JSON 
    end 
    rpt.report("Marshal") do 
    # as above for JSON 
    end 
end 
6

Я только слышал об этом проекте 20 минут назад (отправил на новостях хакера), то есть реализация Ruby: http://msgpack.sourceforge.net/#GettingStarted

MessagePack является двоичным на основе эффективного объекта библиотека сериализации. Он позволяет обмениваться структурированными объектами между многими языками, такими как JSON. Но, в отличие от JSON, это очень быстро и мало.

+0

http://www.rubyinside.com/messagepack-binary-object-serialization-3150.html – clyfe

+0

Является ли фактический формат документированным, или только некоторыми собственными форматами данных, которыми владеет какая-либо компания? Одним из преимуществ использования открытого формата является отсутствие блокировки поставщика. Также: как проверяется производительность? Разве только его создатель говорит, что это быстро, или есть независимые оценки? – StaxMan

3

(Edit:. Теперь я понимаю, что этот ответ, вероятно, не соответствует вашим требованиям, - я не думаю, что YAJL доступна для Java или JRuby Я оставляю это здесь, однако, так как сам YAJL камни, и это может помочь будущему Googler.)

Если вам нравится JSON (и у него уже есть код, который его реализует), я настоятельно рекомендую вам взглянуть на YAJL. Имеются также рубиновые крепления: YAJL-Ruby.

Это значительно быстрее, чем встроенный двигатель JSON от Ruby.

 Смежные вопросы

  • Нет связанных вопросов^_^