2010-03-19 39 views
3

我有一個用ruby編寫的應用程序(運行在JRuby VM中)。分析時,我意識到它花費了很多(實際上幾乎全部)時間將一些哈希轉換爲JSON比JSON更快的簡單序列化? (在Ruby中)

這些散列具有符號鍵,其他類似哈希值,數組,字符串和數字的值。

是否有適合這種輸入的序列化方法,並且運行速度通常比JSON快?如果它有一個Java或JRuby兼容的寶石,它會更好。

我目前使用的是jruby-json gem,這是JRuby中最快的JSON實現(因爲我被告知),所以此舉很可能是不同的序列化方法,而不僅僅是一個不同的庫。

任何幫助表示讚賞!謝謝。

回答

3

我不知道JRuby的性能可能有多不同,但在MRI中我相信Marshal通常是最快的。

One article I found發現元帥大約比JSON快3倍(本身類似於YAML的速度),而another one引用了大約2倍的差異(請參閱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 2010-03-24 13:51:02

+0

記錄的實際格式,還是某些公司擁有的某些專有數據格式?使用開放格式的一個好處是沒有供應商鎖定。另外:如何驗證性能?它只是它的創造者說速度快,還是有獨立評估? – StaxMan 2010-10-29 16:00:53

3

編輯:我現在意識到,這個答案可能不符合你的要求 - 我不認爲YAJL是可用於Java或JRuby的我在這裏但是離開這個,因爲YAJL本身岩石,這可能會有助於一些未來的Google員工。)

如果你喜歡JSON(並且已經有實現它的代碼),我強烈建議你看看YAJL。還有Ruby綁定可用:YAJL-Ruby

根據我的經驗,它比Ruby的內置JSON引擎快得多。