一般に、sphinx や lucence などの検索システムを使用して処理する場合、複雑で多様なビジネスの検索など、プロジェクトには必ず処理が困難な業務が含まれます。 , データソースが変更された場合データが速い場合(いいね数、嫌い数、閲覧数など)、最初にデータをプッシュする頻度を測定することが難しく、検索や検索ができなくなります。正確に並べ替えます。そのため、DBを検索するのが一般的で、業務を可能な限りプログラムレベルに分解することに加えて、DBの前にキャッシュの層を追加します。ただし、これには多くの既知の欠点があります。
1. 実際、通常の PHP で実装すると、より複雑なソートやフィルタリングなど、多くのビジネスを処理できません。まだ MYSQL ほどではありません。
2. キャッシュ ヒット率は保証されません。特にキーワードを使用してクエリを実行する一部の企業では、キーワードが過度に変化します。
悪意のあるブラッシングに遭遇した場合、DB サーバーは簡単に直接ハングアップするため、プログラム レベルでリミッターの層を追加して同時実行数を制限できます。リミッターには次の機能があります:
1. 効率が高い (ナンセンスです。そうでないと、ただ磨くだけでリミッターが最大になります)。現在、memcache はアトミック操作のカウントに使用されていますが、他のメソッドを使用するように拡張できます。
2. アクション層まで正確に。個々のページを個別に制限できます。
3. 便利。人によって意見は異なります
4. 低コスト。研究開発費とハードウェア費用を含みます。
ストレス テストによると、検索機能の同時実行数は当初 100 に制限されていましたが、ストレス テストの結果は 800 で正常でした。
使用方法は以下のとおりです。
/**
*
で検索します */
public function search(){
//カウンター関数を増やします。数値がその数値を超えるとシステムがビジーになります。
$viewlimiter = Library::load('viewlimiter') ;
//アクセス リミッターの名前。コントローラー + アクションを使用して、単一ページを一意に保つようにしてください
$limitName = 'search_search' ;
//最大同時アクセス番号
}
/ *----複雑で倒錯したビジネス ロジック-----*/
$xxxModel->search($ params);
}
//end func