0
ヘイゼルキャスト3.8.6を使用します。 次の設定でIMAP {キー、値}がある:ヘーゼルキャストIMapの性能
mapConfig.setBackupCount(5);
mapConfig.setReadBackupData(true);
キーが
long userId;
long contentId;
では、データは5つのノードがあります。私の知る限り、各ノードにはすべてのデータが設定されます。このように私は分散マップを複製マップに変えて、取得操作の速度を上げ、ネットワーク呼び出しをしません。
let's image私はidでユーザーのすべてのデータを取得する必要があります。通常モードでは、私は次のようなコードを記述します
EntryObject eo = new PredicateBuilder().getEntryObject();
Predicate predicate = eo.key().get("this.userId").equal(userId);
map.values(predicate).stream().map(.....)
呼び出しを行いいるこのコードは、すべてのノード上で実行され、結果がノードに返されます。 "setReadBackupData(true)"の場合、要求は他のノードに送信されず、すべてのデータはこの要求を行うノード上で検出されます。その場合はネットワーキングコールを避けるために、次のようなものを使用してください:
map.entrySet().stream()
.filter(entry->entry.getKey().getUserId().equals(userId))
.map(.....)
ありがとう。
5のバックアップカウントは、6つのコピー(マスター+ 5)を意味します。あなたが5つのノードしか持っていないなら、あなたは1つのコピーをあまりにも多く要求しました。 –
バックアップからの読み取りは、キーベースのアクセスでのみ使用でき、クエリでは使用できません。 – noctarius
'IMAP'が通常大きくなっているので、' entrySet() 'は一般的に危険です。どのような問題を解決しようとしていますか?部分キーですべてのキーを検索しますか?あなたの 'map(....)は、 –