キャッシュとして gemfire を使用しています。キャッシュ ヒープ サイズは 100GB をはるかに超えています。クライアントから gemfire キャッシュにデータを入れると、データがシリアル化されてサーバーに送信され、サーバーではデータがシリアル化された形式で保存されることがわかりました。問題:
- サーバー上の関数呼び出しを実行しようとすると、データの逆シリアル化が開始され、実際には時間がかかります。キャッシュ内のオブジェクトを反復処理するだけで 1 時間以上かかる場合もあります。(オブジェクトの数は 600 万に近い)。
- gemfire カスタム シリアライゼーション (DataSerializer クラス) を使用してみました。また、すべてのデータがキャッシュに格納された後に必要なメモリの量は約 60 GB で、これは Java のデフォルトのシリアル化を使用した場合と同じです。
- Kryo https://github.com/EsotericSoftware/kryoというライブラリを使用してみましたが、これは非常に役立ちますが、クラスの各属性を個別にシリアル化しているため、gemfire のシリアル化が役に立たない理由はまだわかりません。そのため、クラス ヘッダーやその他のメタ データを記述する負担はありません。
どんな助けでも本当に感謝しています。