私は現在、数十億のエントリを持つデータベースを中心に展開するプロジェクトの小さなフレームワークを意図したコードを Java で書いています。私はそれを高レベルに保ちたいと思っており、データベースから取得したデータを統計的推論に簡単に使用できるようにする必要があります。このプロジェクトでは Map インターフェイスを使用することにしました。
核となる概念は、読み取り可能なコードのために単一のデータセット (データベース内の列を意味します) を処理するときに、属性 (「データベース内の列」) を値 (「セル」) にマッピングすることです: 私は列挙型オブジェクト (「属性」という名前) を使用します。 ) 属性タイプの場合、これは mapping を意味します。これは<Attribute, String>
、データ要素がすべて文字列 (あまり大きくなく、最大 40 文字程度) であるためです。15 の列があるため、15 の列挙型があり、マップには非常に多くのエントリしかありません。
そのため、非常に多数の Map オブジェクトが時々浮かんでいるように見えますが、ペイロードは比較的わずかです (15-)。私の目標は、実際のペイロードと比較して、実装メモリのオーバーヘッドが原因でメモリが爆発しないようにすることです。(目標を伸ばす: CPU 使用率についても同じことを行います ;] )
私はこれまで Java Collections のさまざまな実装すべてに精通していたわけではありませんでした。今日問題が発生したとき、私はこれまでずっとお気に入りだった 'HashMap' を調べましたが、そこにあるメモリ オーバーヘッドの量に満足していませんでした。宣言されました。標準の実装に加えて、Java に同梱されていない実装が多数あることは確かです。私のケースをグーグルで検索しても、あまり結果が得られませんでした。
私のユースケース (エントリ数が少ない、値のサイズが小さい、列挙可能なキーなど) の Map の適切な実装を知っていますか?
ユースケースを明確にしたことを願っています。また、ご意見をお待ちしております =) どうもありがとうございました!
絶対にオプションで、時間と知識がある場合にのみ、答えの目標を広げてください: コレクションの他のどのような実装が適していますか:
- 属性(文字列のもの)ベクトル、および推論データの行列(カウント/確率)の処理(行列:ここでは、今のところ本当に無知です。これまで、Javaで深刻な数学の作業は本当にありませんでした)
- 統計的推論のための数学ライブラリ、上記を参照