我有一个应用程序,可以从其他服务器之一获取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.
解决方法:
我首先来看一下这8s延迟中有多少与以下内容有关:
>服务器端处理(生成数据要花费多少)
有很多技术可以改善这一时间,包括:
>数据库索引
>缓存
>更快的to_json库
一些出色的资源是Rails可扩展性http://railslab.newrelic.com/2009/02/09/episode-7-fragment-caching上的NewRelic播客
>传输延迟(服务器和客户端之间发送数据要花费多少时间)
>如果密钥几乎相同,则可以从Compression algorithm for JSON encoded packets?开始实施解决方案;您可能需要查看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
>如果数据结构是恒定的,并且您还可以尝试实现二进制服务,则二进制服务的速度要快得多,包括压缩,但维护起来也更困难,例如节俭:
http://www.igvita.com/2007/11/30/ruby-web-services-with-facebooks-thrift/
>如果这适合您的需求,也许您可以在服务器端进行某种版本控制/缓存系统,并仅发送已修改的记录(但实现起来很繁重)