我有一个应用程序,它从我们的其他服务器获取JSON格式的数据。我面临的问题是,在请求此信息时存在显着延迟。由于传递了大量数据(每个请求大约1000条记录,每条记录非常庞大),压缩有助于降低速度。如果是这样,你会推荐哪种压缩方案。
我在另一个thread上读到,他们的数据模式对于需要使用的压缩类型也很重要。数据模式是一致的,类似于以下
:desc=>some_description
:url=>some_url
:content=>some_content
:score=>some_score
:more_attributes=>more_data
有人可以推荐一种解决方法来减少这种延迟。它们延迟约6-8秒。我正在使用Ruby on Rails来开发这个应用程序,提供数据的服务器大部分都使用Python。
答案 0 :(得分:3)
我先看看这8s延迟有多少与:
有关服务器端处理(生成数据需要多少) 有很多技术可以改善这段时间,包括:
数据库索引
缓存
更快的to_json库
一些优秀的资源是关于Rails可伸缩性http://railslab.newrelic.com/2009/02/09/episode-7-fragment-caching
的NewRelic播客传输延迟(在服务器和客户端之间传输数据所花费的时间)
如果键几乎相同,您可以从Compression algorithm for JSON encoded packets?实现sollution;您可能需要查看http://wiki.github.com/WebReflection/json.hpack/specs-details和http://www.nwhite.net/?p=242
除此之外,您还可以从前端服务器压缩(gzip)它 http://httpd.apache.org/docs/2.0/mod/mod_deflate.html http://wiki.nginx.org/NginxHttpGzipModule
如果数据结构是常量并且您也可以尝试实现二进制服务,那么速度要快得多,包括压缩,但也更难以保持,例如thrift: http://www.igvita.com/2007/11/30/ruby-web-services-with-facebooks-thrift/
如果这适合您的需求,也许您可以在服务器端创建某种版本控制/缓存系统,并仅发送已修改的记录(但实现起来相当繁重)
答案 1 :(得分:2)