7

我有一个像下面这样的课程:

   公共类人
      {
         公共字符串名称;
         公共字符串年龄;
      }

我对将庇隆地图保存到 Redis 的方法有点困惑:

我应该采用 java 序列化/反序列化对象方法还是应该尝试转换为 JSON 然后存储,反之亦然。

关于以下几点的任何想法:

  • 序列化和反序列化成本 VS 映射到 Java 和 JSON 的成本
  • JSON 的内存要求和 Redis 的序列化对象
  • 压缩:流与数据

    我们应该采用哪种压缩方式虽然 DATA 压缩似乎有点困难(没有多大好处),因为我们使用的是 Redish Hash

一些假设是:

  • pojo 包含许多实例变量
  • 将使用 Redis 哈希存储对象
4

2 回答 2

4

您应该考虑使用 MessagePack,因为它与 Redis 和 Lua 完全兼容,它是对 JSON 的出色压缩:http: //msgpack.org/

它暗示了一些Lua代码来压缩和解压缩,但成本应该很小。这是一个例子: http: //gists.fritzy.io/2013/11/06/store-json-as-msgpack

有一个缺少数据的小基准:https ://gist.github.com/muga/1119814

它仍然对您来说应该是一个不错的选择,因为您可以在不同的语言中使用它,完全支持 redis,并且它基于 JSON。

于 2013-11-09T08:04:56.223 回答
2

答案是您应该针对您的用例和环境来衡量它。我会首先尝试 JSON,因为它更通用且问题更少 - 即更容易调试和恢复损坏的数据。

表现。 JSON 序列化速度很快,因此在许多情况下它不会成为您的瓶颈。很可能是磁盘或网络 IO:java serialization benchmarking。避免使用默认的 Java 序列化,因为它很慢。Kryo是二进制输出的一个选项。如果您需要二进制格式的多个平台,请考虑 DB 的内部格式或即 Google Protobuffers。

压缩。在 Google 中,他们使用Snappy进行对 CPU 要求较低的压缩。Snappy 也用于 Cassandra、Hadoop 和 Hypertable。JVM 压缩器的一些基准测试:使用卡尔加里语料库数据集的压缩测试

于 2013-11-09T06:55:12.710 回答