2016-04-22 17 views
1

各範囲に対してバッチスキャンを使用して最初のn行全体を取得する方法はありますか?範囲ごとの制限があるバッチスキャナ

複数のユーザーに対して最新のユーザー操作をプルして、1人のユーザーあたり100行全体を表示したいと考えています。行キーは、ユーザーIDとタイムスタンプの後に始まります。

おかげで、

デヤン

答えて

1

デヤンは - WholeRowIteratorを見てみましょう。どのように使用するかのコード例をいくつか示します。かなり近いですが、あなたは最初のN行をしたい場合は、あなたの代わりにスキャナをお勧めします

Connector conn = getConnector(); 
BatchScanner bs = conn.createBatchScanner("mytable", new Authorizations(), 4); 
IteratorSetting iterator = new IteratorSetting(100, WholeRowIterator.class); 
bs.addScanIterator(iterator); 

for (Entry<Key,Value> entry : bs) { 
    SortedMap<Key,Value> row = WholeRowIterator.decodeRow(entry.getKey(), entry.getValue()); 
} 
+0

:スキャナBS = conn.createScanner()、「mytableは」新しい権限(); N行だけが必要な場合は、bs.setBatchSize(N)を使用することもできます。 – billie

+0

ああ、良い点! BatchScannerを使用して問題が発生する可能性は考えていませんでした。 BatchScannerの代わりにScannerを使用すると、最新の100個のレコードが確定します(最新の行が最初にソートされるテーブルの一部) – elserj

+0

パフォーマンス上の理由からBatchScannerを使用したいと考えています。私は複数のユーザーのために最初の100の結果を得る必要があります。スキャナでは、その時点で1人のユーザーが収集されます。もちろん、Scannerを使用してデータを収集するためにいくつかのスレッドを作成できます。 BatchScannerを使用することでさらに複雑さを避けることを望んでいました。 – dejan

関連する問題