Esページングソリューション:(from+size)ページングと深さページング
1954 ワード
from+sizeページング
一般的なクエリー・プロセスでは、最初の10のデータをクエリーしたい場合は、次のようになります.クライアントは、あるノード に要求する.2ノードは各スライスに転送され、各スライス上の最初の10個の を問い合わせる.3結果はノードに戻り、データを統合し、上位10本の を抽出する.4は、要求クライアント に戻る.
このページング方式はfrom+size方式で実現できる.fromはターゲットデータのオフセット値を定義し、sizeは現在返されるイベントの数を定義します.
このページング方式は、fromが大きくなるにつれてクエリーの時間が大きくなり、データ量が大きくなるほどクエリーの効率指数が低下するため、少量のデータにのみ適しています.
利点:from+sizeデータ量が少ない場合、効率が高いという欠点:データ量が非常に大きい場合、from+sizeページングはすべての記録をメモリにロードし、実行速達が特に遅いだけでなく、esにメモリ不足が発生しやすく、削除しやすい
例えば、5001ページ目のデータを取得するには、ページング時にelasticsearchは、まず各ノードから50020のデータを取り出し、その後、各ノードのすべてのデータと並べ替え、並べ替え後の50010から50020のデータを取り出し、戻ってくる必要があります.これにより、データ量が増加するにつれて、ページごとにソートするコストが増加します.
scroll深さページング
上記の問題を解決するためにelasticsearchはscrollスクロール方式を提案し、このスクロール方式の原理はクエリーのたびにscroll_を返すことである.id.このscroll_によるとidは次ページのクエリーを行います.これをscroll_idは、通常のリレーショナル・データベース内のカーソルとして理解されます.
scrollとは、現在のインデックス・セグメントのスナップショット情報を維持するキャッシュです(このスナップショット情報は、このscrollクエリーを実行するときのスナップショットです).
scrollを初期化と遍歴の2つのステップに分けることができます.
1、初期化時に検索条件に合致するすべての検索結果をキャッシュし、スナップショットとして想像することができる.
初期化時は通常のsearchのようにscroll=3 mが現在のクエリを表すデータキャッシュ3分Size:3が現在のクエリを表す3つのデータ
2、遍歴して、このスナップショットからデータを取ります.遍歴中に前回遍歴中のscroll_idは、scrollパラメータを使用して、前回のループステップを繰り返し、返されたデータが空になるまでループが完了したことを示します.毎回パラメータscrollを転送し、検索結果のキャッシュ時間をリフレッシュし、indexとtypeを指定する必要はありません(キャッシュ時間を長く設定せず、メモリを消費しないでください).
コントラスト
from+sizeページングでは、クエリーのたびにインデックスライブラリ(ローカルフォルダ)でpageNum*pageバーのデータをクエリーし、前のデータを切り取り、最後のデータを残します.このような操作は各スライスで実行され、最後に複数のスライスのデータが統合され、再びソートされ、必要なものが切り取られます.一般的に冷たい言葉はこのようにページを分けます.
クエリー条件を満たすすべてのデータを一度にメモリに格納できる深さのページ.ページング時に、メモリでクエリーします.比較的浅いページングでは、ディスクの複数回の読み取りを回避できます.一般的なホットワードはscrollで深くページを分けます.
一般的なクエリー・プロセスでは、最初の10のデータをクエリーしたい場合は、次のようになります.
このページング方式はfrom+size方式で実現できる.fromはターゲットデータのオフセット値を定義し、sizeは現在返されるイベントの数を定義します.
GET /fs/_search?pretty
{
"from" : 0 , "size" : 10
}
GET /fs/_search?pretty
{
"from" : 10 , "size" : 10
}
このページング方式は、fromが大きくなるにつれてクエリーの時間が大きくなり、データ量が大きくなるほどクエリーの効率指数が低下するため、少量のデータにのみ適しています.
利点:from+sizeデータ量が少ない場合、効率が高いという欠点:データ量が非常に大きい場合、from+sizeページングはすべての記録をメモリにロードし、実行速達が特に遅いだけでなく、esにメモリ不足が発生しやすく、削除しやすい
例えば、5001ページ目のデータを取得するには、ページング時にelasticsearchは、まず各ノードから50020のデータを取り出し、その後、各ノードのすべてのデータと並べ替え、並べ替え後の50010から50020のデータを取り出し、戻ってくる必要があります.これにより、データ量が増加するにつれて、ページごとにソートするコストが増加します.
scroll深さページング
上記の問題を解決するためにelasticsearchはscrollスクロール方式を提案し、このスクロール方式の原理はクエリーのたびにscroll_を返すことである.id.このscroll_によるとidは次ページのクエリーを行います.これをscroll_idは、通常のリレーショナル・データベース内のカーソルとして理解されます.
scrollとは、現在のインデックス・セグメントのスナップショット情報を維持するキャッシュです(このスナップショット情報は、このscrollクエリーを実行するときのスナップショットです).
scrollを初期化と遍歴の2つのステップに分けることができます.
1、初期化時に検索条件に合致するすべての検索結果をキャッシュし、スナップショットとして想像することができる.
GET fs/_search?scroll=3m
{
"query": {"match_all": {}},
"size": 3
}
初期化時は通常のsearchのようにscroll=3 mが現在のクエリを表すデータキャッシュ3分Size:3が現在のクエリを表す3つのデータ
2、遍歴して、このスナップショットからデータを取ります.遍歴中に前回遍歴中のscroll_idは、scrollパラメータを使用して、前回のループステップを繰り返し、返されたデータが空になるまでループが完了したことを示します.毎回パラメータscrollを転送し、検索結果のキャッシュ時間をリフレッシュし、indexとtypeを指定する必要はありません(キャッシュ時間を長く設定せず、メモリを消費しないでください).
コントラスト
from+sizeページングでは、クエリーのたびにインデックスライブラリ(ローカルフォルダ)でpageNum*pageバーのデータをクエリーし、前のデータを切り取り、最後のデータを残します.このような操作は各スライスで実行され、最後に複数のスライスのデータが統合され、再びソートされ、必要なものが切り取られます.一般的に冷たい言葉はこのようにページを分けます.
クエリー条件を満たすすべてのデータを一度にメモリに格納できる深さのページ.ページング時に、メモリでクエリーします.比較的浅いページングでは、ディスクの複数回の読み取りを回避できます.一般的なホットワードはscrollで深くページを分けます.