我有一个如下课程:
public class Person { public String name; public String age; }
我对将Perons Map保存到Redis的方法感到困惑:
我应该使用java序列化/反序列化对象方法,还是应该尝试转换为JSON然后存储,反之亦然。
对下面提到的观点有任何想法:
压缩:流与数据
我们应该采用哪种压缩方式 虽然DATA压缩看起来有点困难(不太有用),因为我们正在使用Redish Hash
一些假设是:
答案 0 :(得分:3)
您应该考虑使用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。
答案 1 :(得分:1)
答案是您应该针对您的使用案例和环境进行衡量。我首先尝试JSON,因为它更通用,更少问题 - 即更容易调试和恢复损坏的数据。
性能。 JSON序列化速度很快,因此在许多情况下它不会成为您的瓶颈。最有可能是磁盘或网络IO:java serialization benchmarking。避免使用默认的Java序列化,因为它很慢。 Kryo是二进制输出的选项。如果您需要二进制格式的多个平台,请考虑DB的内部格式或Google Protobuffers。
压缩。在Google中,他们使用Snappy来减少对cpu的压缩。 Snappy也用于Cassandra,Hadoop和Hypertable。 JVM压缩器的一些基准:Compression test using Calgary corpus data set。