4

I am working on developing a key value store using redis. I proposed using a hashmap of type String(key)-->Object(value). I am advised to serilaize the object using protobuf.

If we are going to populate as well as read this data using Java (which is platform independent), is there any advantage of using protobuf? Will just putting the object directly into redis and getting it back and casting it lead to any problems?

A lot of emphasis is there on efficiency in this product so we dont want to do any unnecessary processing.

4

1 に答える 1

11

redis で protobuf を使用する必要はまったくありません。鍵となるのは、通常、今日、明日、来年にデータを確実に取得できるシリアル化フレームワークを選択することです。json、xml などを使用することもできます。多くの場合、単一の文字列値で十分であり、シリアライゼーションを完全にバイパスします (「エンコーディング」をシリアライゼーションとして数えない限り)。

数年後にデータを (たとえば) C++ に戻す必要がある場合に役に立たない可能性があり、通常はバージョン管理に関して柔軟性が低いため、私は通常、プラットフォーム独自のシリアル化に反対することをお勧めします。

Protobuf は、次の主要な機能を備えているため、妥当な選択です。

  • 小さな出力 (アプリと redis 間の帯域幅、およびストレージ要件を減らします)
  • CPU 効率の高い処理 (アプリでの処理を削減)
  • バージョントレランス用に設計されています
  • クロスプラットフォーム

ただし、他のシリアライザーも機能します。プレーン テキストと redis ハッシュ、つまりオブジェクト プロパティごとのハッシュ プロパティを使用することもできます。ただし、ほとんどの場合、オブジェクト全体を取得する必要があるため、通常は単純な「取得」を行い、データを適切なシリアル化 API に渡す方が適切です。

私たち自身のredisの使用では、たまたまprotobufを使用してますが、「protobufの出力はgzipで圧縮されていますか?」という推測も行います。- 存在する場合は、gzip データを送信します (または、小さい場合は元の非圧縮データを保存し、明らかにそれがどれであるかを示すマーカーを保存します)。

于 2012-06-06T10:16:11.417 に答える