1

キューを使用して互いに通信する 2 つのアプリケーションがあります。現在、それらはまったく同じバージョンの Ruby (1.8.7) を実行しているため、オブジェクトをマーシャリングしてやり取りしているだけです。標準ライブラリのオブジェクトのみ、ほとんどがハッシュ、文字列、時刻および日付オブジェクトです。

現在、私は一度に 1 つのアプリを Ruby 1.9.1 に移行しています。つまり、しばらくの間、1 つのアプリを 1.8.7 で実行し、もう 1 つのアプリを 1.9.1 で実行することになります。テストを実行することで、Marshal がバージョン間で信頼できないことがわかりました。YAML を使用できましたが、はるかに遅く、JSON の方が高速に見えますが、日付/時刻オブジェクトを直接処理しません。

異なるバージョン間で Ruby オブジェクトをシリアル化するための信頼できる高速な方法はありますか?

4

3 に答える 3

0

Rubyで試したことはありませんが、プロトコルバッファを見ていただけますか? 高速でポータブルなバイナリ形式として設計されており、ここに ruby​​ ポートがあります。ただし、生成された型を別の DTO レイヤーとして扱う必要があるでしょう (つまり、既存のオブジェクトをシリアル化するのではなく、既存のデータを新しい型にマップします)。組み込みの日時サポートはありませんが、エポックなどでティックを使用できます。

于 2010-02-18T20:39:31.933 に答える
0

ここで重要なのは、Ruby のバージョン間で同じように表現されることがわかっている共通のデータ型を見つけることです。ここでの明らかな選択肢は、データを外部データベースに保存するか (DB インターフェイス ライブラリがすべての変換を処理します)、構造化テキスト形式でデータを書き出すことです。処理するデータが大量にない場合 (そしてデータのほとんどが標準型である場合)、通常はテキストとして保存します。エクスポート/インポートには時間がかかりますが、通常は書き込みの方が高速です。

于 2010-02-19T00:19:24.550 に答える
0

Protobufs は優れていますが、思い出すと、データ構造を事前に定義する必要があります。Thrift は protobufs に似ていますが、適切なコード生成機能がいくつかあります。

Apple のバイナリ プロパティ リスト形式は、必要なものに近いように思えます。動作は JSON に似ていますが、よりコンパクトで、datetime やエンコードされていないバイナリなど、いくつかの追加の型をサポートしています。github にはいくつかの Ruby 実装があります。

あなたの最善の策はBERTかもしれません。BERT は、Erlang のバイナリ項シリアル化形式に基づいています。コンパクトで、データタイムのシリアライゼーションが含まれており、Ruby を含む 12 ほどの言語で実装されています。

于 2010-06-15T09:33:16.693 に答える