2017-10-18 14 views
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(.....) 

ありがとう。

+1

5のバックアップカウントは、6つのコピー(マスター+ 5)を意味します。あなたが5つのノードしか持っていないなら、あなたは1つのコピーをあまりにも多く要求しました。 –

+1

バックアップからの読み取りは、キーベースのアクセスでのみ使用でき、クエリでは使用できません。 – noctarius

+1

'IMAP'が通常大きくなっているので、' entrySet() 'は一般的に危険です。どのような問題を解決しようとしていますか?部分キーですべてのキーを検索しますか?あなたの 'map(....)は、 –

答えて

0

readBackupDataフラグは、メンバー内からクエリを実行する場合にのみ機能するため、HazelcastClientを使用している場合は、バックアップから読み取られません。