問題タブ [chronicle-map]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - 値のサイズが大きく変動する ChronicleMap を設定するときの IllegalArgumentException
しばらく前に、ChronicleMap が として使用されていることについて、この質問Map<String,Set<Integer>>
をしました。基本的に、平均Set<Integer>
が 400 のコレクションがありますが、最大長は 20,000 です。ChronicleMap 2 では、これにより悪質な JVM クラッシュが発生していました。ChronicleMap 3.9.1 に移行したところ、例外が発生し始めました (少なくとも JVM クラッシュではありません)。
これは、平均値よりもはるかに外れている値を持っているためだと思います。ビルダーに与えた平均値に基づいて ChronicleMap が最大チャンク数を 6328 と判断したと思いますが、23045 チャンクを必要とする巨大な値があるとは予想していませんでした。
だから私の質問は、これを解決するための最良の方法は何ですか? 私が検討しているいくつかのアプローチですが、まだ確信が持てません:
ChronicleMapBuilder.maxChunksPerEntry
またはを使用しChronicleMapBuilder.actualChunkSize
ます。とはいえ、それらを何に設定する必要があるかを決定論的に把握するにはどうすればよいですか? また、設定が高すぎると、断片化が多くなり、パフォーマンスが低下する可能性がありますよね?- 「最大コレクション サイズ」を設定し、非常に大きなコレクションを多くの小さなコレクションに分割し、それに応じてキーを設定します。たとえば、私のキーがサイズ 10000 の
XYZ
を生成する場合、おそらくそれをサイズ 2000 のセットを持つ5 つのキー、などSet<Integer>
に分割できます。その結果、不要なコードが大量に作成されます。他の質問にも同じ計画がありました。XYZ:1
XYZ:2
他の考え/アイデアは大歓迎です!
chronicle - クロニクルマップはメモリより大きいデータを処理できますか?
オフヒープメモリの仕組みに少し混乱しています。32 GB の RAM を搭載したサーバーと、サイズが約 1 TB のキーと値のマッピングのデータ セットがあります。この 1 TB のデータセットに従ってキーを値にマップできる、シンプルで高速な組み込み Java データベースを探しています。これは主にディスクから読み取る必要があります。このデータ セットの各エントリは小さいため (<500 バイト)、ファイル システムを使用するのは効率が悪いと思います。
これにはクロニクル マップを使用したいと思います。オフ ヒープ メモリの使用量が RAM サイズを超える可能性があり、何らかの方法でファイルシステムと対話することを読みましたが、同時に、Chronicle Map はメモリ内データベースとして説明されています。Chronicle Map はサーバーの 1 TB のデータ セットを処理できますか? それとも、32 GB 以下のデータ セットしか使用できないのですか?
java - ChronicleMap.put の使用時にバイト可能なデータの新しいインスタンスを作成しないようにする方法
Byteable のキーと値のクラスを使用して、ChronicleMap 3.12 の使用方法を学習しています。コール スタックに基づいて ChronicleMap.put 操作のループを使用してコードを実行すると、ChronicleMap.put が呼び出されるたびに値オブジェクトが作成されるようです。Byteable 値クラスを使用すると、オブジェクトの作成が妨げられると思います。私が何か間違ったことをした可能性があるかどうか、誰か教えてもらえますか?
ChronicleMap を作成するコード (TestDataKeyForChronicleMap と TestDataForChronicleMap の両方が Byteable):
ChronicleMap.put を実行しているときのコール スタック
ありがとう。
TestDataKeyForChronicleMap を含めるように更新します。
TestDataForChronicleMap のコード:
put ループのコード:
TestDataMap のインターフェース
そして TestDataMapForChronicleMap
TestData コード