import json import zlib import lz4 import msgpack def compress_gzip(data): return zlib.compress(data) def compress_lz4(data): return lz4.dumps(data) class CompJSONDB(object): size = 0 def save(self, dct, compressor): compressed = compressor(json.dumps(dct).encode()) self.size = self.size + len(compressed) return len(compressed) class MsgPackDB(object): size = 0 def save(self, dct): l = len(msgpack.packb(dct)) self.size = self.size + l return l class CompMsgPackDB(object): size = 0 def save(self, dct, compressor): l = len(compressor(msgpack.packb(dct))) self.size = self.size + l return l if __name__ == "__main__": msgpackdb = MsgPackDB() gzMsgpackdb = CompMsgPackDB() gzJsondb = CompJSONDB() lzMsgpackdb = CompMsgPackDB() lzJsondb = CompJSONDB() with open('./public_timeline.json') as fp: public_timeline_buf = fp.read() public_timeline = json.loads(public_timeline_buf) public_timeline_size = len(json.dumps(public_timeline)) msgpackdb.save(public_timeline) gzJsondb.save(public_timeline, compress_gzip) gzMsgpackdb.save(public_timeline, compress_gzip) lzJsondb.save(public_timeline, compress_lz4) lzMsgpackdb.save(public_timeline, compress_lz4) print("---------- RAW ----------") print("JSON %05d byte(s)" % public_timeline_size) print("MsgPack %05d byte(s)" % msgpackdb.size) print("---------- GZIP ---------") print("JSON %05d byte(s)" % gzJsondb.size) print("MsgPack %05d byte(s)" % gzMsgpackdb.size) print("---------- LZ4 ----------") print("JSON %05d byte(s)" % lzJsondb.size) print("MsgPack %05d byte(s)" % lzMsgpackdb.size)