これは一般的な使用例だとかなり確信していましたが、グーグルで半日経過した後、質問に答える必要があります。
データコーパスで実行して(データ構造として)辞書を決定し、その辞書を使用して、その辞書を使用して、新しく到着したデータを非常に高速かつ効率的に圧縮するアルゴリズムが本当に必要です。
たとえば、合計10MBのメッセージ10,000に対してそれを実行してディクショナリデータ構造を決定し、すべてのパーティ間でこのディクショナリを共有してから、非常に高速で強力な圧縮を楽しみながらメッセージを交換します。
そのようなものはありますか?IBM DB2 はまさにそれを行いますが、彼らがアプローチをオープンソース化したのではないかと思います。zlib はdictionaryを渡すことを許可しますが、すべてのメッセージに対して処理される必要がある生のバイト配列であり、上記のバイト配列を生成する方法はありません。
データ構造をメモリに保持するという考え方は、メッセージごとの処理のオーバーヘッドを回避することです。
Java実装のボーナスポイント。
最終的に私は、独自の(共有)辞書を提供できるZstd圧縮を指摘されました。サンプルに基づいた辞書トレーニングの機能を持つJavaバインディングがあります。
512バイト程度の小さな共有辞書で、独自のアルゴリズムよりも優れたパフォーマンスを発揮します。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加