私の Python アプリケーションは現在、python-memcached APIを使用して memcached 内のオブジェクトを設定および取得しています。この API は、Python のネイティブpickle モジュールを使用して、Python オブジェクトをシリアライズおよびデシリアライズします。
この API を使用すると、ネストされた Python リスト、辞書、およびタプルを memcached に簡単かつ迅速に格納できます。これらのオブジェクトをアプリケーションに読み込むことは完全に透過的であり、機能します。
しかし、私は Python だけを使用することに限定したくありません。また、すべての memcached オブジェクトが pickle でシリアル化されている場合、他の言語で記述されたクライアントは機能しません。
私が検討したクロスプラットフォームのシリアル化オプションは次のとおりです。
- XML - 主な利点は人間が判読できることですが、このアプリケーションではそれは重要ではありません。XML も多くのスペースを必要とし、解析にはコストがかかります。
- JSON - 優れたクロスプラットフォームの標準のように思えますが、memcached から読み戻されたときにオブジェクト タイプの特性が維持されるかどうかはわかりません。たとえば、この投稿によると、タプルはsimplejsonを使用するとリストに変換されます。また、JSON 構造に要素を追加すると、古い構造に記述されたコードが壊れる可能性があるようです
- Google Protocol Buffers - 非常に高速でコンパクトに見えるため、これに非常に興味があります。少なくとも XML よりも 10 倍小さく高速です。人間が読める形式ではありませんが、このアプリにとっては重要ではありません。古いコードを壊さずに構造の成長をサポートするように設計されているようです
このアプリの優先順位を考えると、memcached の理想的なオブジェクトのシリアル化方法は何ですか?
- クロスプラットフォームのサポート (Python、Java、C#、C++、Ruby、Perl)
- ネストされたデータ構造の処理
- 高速シリアライゼーション/デシリアライゼーション
- 最小メモリフットプリント
- 古いコードを壊さずに構造を変更できる柔軟性