約 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)) );