代码之家  ›  专栏  ›  技术社区  ›  mb.

memcached中对象的最佳序列化方法是什么?

  •  25
  • mb.  · 技术社区  · 16 年前

    我的Python应用程序目前使用 python-memcached API pickle module

    这个API使得将嵌套的Python列表、字典和元组存储在memcached中变得简单快捷,并且将这些对象读回应用程序是完全透明的——它只是起作用。

    但我不想仅限于使用Python,如果所有memcached对象都使用pickle序列化,那么用其他语言编写的客户端将无法工作。

    1. this post simplejson 此外,向JSON结构中添加元素似乎会破坏写入旧结构的代码

    2. Google Protocol Buffers -我对此非常感兴趣,因为它看起来非常快速和紧凑——至少比XML小10倍,速度更快;它不是人类可读的,但这对这个应用程序来说并不重要;它似乎旨在支持在不破坏旧代码的情况下扩展结构

    1. 跨平台支持(Python、Java、C#、C++、Ruby、Perl)

    2. 快速序列化/反序列化

    3. 最小内存占用

    4. 在不破坏旧代码的情况下灵活更改结构
    5 回复  |  直到 8 年前
        1
  •  7
  •   gahooa    16 年前

    1. Protocol Buffers - http://code.google.com/apis/protocolbuffers/docs/overview.html
    2. Thrift - http://developers.facebook.com/thrift/ (更倾向于服务)


    1. http://www.yaml.org/

    然而,我认为这两种方法在传输二进制内容方面都存在问题,这就是为什么它们被排除在我们使用之外的原因。 http://yaml.org/type/binary.html


    如果你在循环中有太多的迭代或必须查看每个字符,那么像PHP和Python这样的动态语言会变得非常慢。另一方面,C在这种操作中大放异彩。

    如果你想看看Extract的实施情况,请告诉我。(联系方式: http://blog.gahooa.com/

        2
  •  6
  •   mb.    16 年前

    我尝试了几种方法,并选择了压缩JSON作为速度和内存占用之间的最佳平衡。Python的原生Pickle函数稍微快一些,但生成的对象不能用于非Python客户端。

    我看到3:1的压缩,因此所有数据都适合memcache,应用程序的响应时间(包括页面渲染)低于10ms。

    http://bouncybouncy.net/ramblings/posts/more_on_json_vs_thrift_and_protocol_buffers/

        3
  •  3
  •   S.Lott    16 年前

    跨平台支持(Python、Java、C#、C++、Ruby、Perl)

    一个跨多种语言的良好表示通常是不可能的。在表示的丰富性、性能或模糊性方面都有妥协。

    JSON很好地满足了其余的标准。消息结构紧凑,解析速度快(与XML不同)。筑巢处理得很好。在不破坏代码的情况下改变结构总是不确定的——如果你删除了一些东西,旧代码就会崩溃。如果您更改了所需的内容,旧代码将崩溃。但是,如果你在添加东西,JSON也会处理这个问题。


    编辑性能。

    解析XML和JSON文档 http://developers.de/blogs/damir_dobric/archive/2008/12/27/performance-comparison-soap-vs-json-wcf-implementation.aspx

    jsonParse 0.255

        5
  •  1
  •   stickfigure    13 年前

    黑森符合您的所有要求。这里有一个python库:

    https://github.com/bgilmore/mustaine

    该协议的官方文件可以在这里找到:

    http://hessian.caucho.com/

    我经常在Java和Python中使用它。它有效,不需要编写协议定义文件。我无法告诉你Python序列化程序是如何执行的,但Java版本相当高效:

    https://github.com/eishay/jvm-serializers/wiki/