1

約 300,000 人のユーザーがいる Web サイトを持っています。私たちがやりたいことは、A、B、または C で始まるすべての人の名前を含むページを作成することです。

課題はスピードです。

データベースをどのようにセットアップしますか。キャッシュ コレクションを作成しますか。正規表現などを使用していますか。

私がやったことは次のとおりです。

 $letter = 'A';

$where  = array();
$where['name']  = new MongoRegex("/^" . $letter . "/i");
$sort   = array('name' => 1);

if($hasImage){
    $where['images.profiles.0'] = array('$exists' => true);
}

$fields = array('name' => 1, 'images.profiles' => 1);

 $this->mdb->data_people->ensureIndex(array('name' => 1, 'images.profiles' => 1), array('background' => true) );
 $people = $this->mdb->data_people->find( $where, $fields );

$people = $people->sort( $sort );
$page['total']      = 100;
$page['current']    = 1;
$page['perPage']    = 20;

if(isset($this->domain->getQuery['_page']) && $this->domain->getQuery['_page'] > 1){
   $page['current'] = $this->domain->getQuery['_page'];
}

$data['pages'] = $this->pageNavigation->setNavigation((int) $page['total'], (int) $page['perPage'], (int) $page['current'] );
$data['pages']['page'] = $this->domain->menu_reverse[0];
$data['pages']['path'] = $this->domain->path;

$data['data'] = $people->limit($page['perPage'])->skip( ($page['perPage']*($page['current']-1)) );
4

1 に答える 1