2009-07-16 4 views

答えて

6

Here'sに関する情報です。

すべてのアーティクルには、作成時に0から1までの乱数が割り当てられます(これらはSQLで索引付けされるため、選択が高速になります)。ランダムアーティクルをクリックすると、ターゲット乱数が生成され、記録された乱数がこのターゲットに最も近いアーティクルが返されます。

興味がある場合は、実際のコードhereを読むことができます。

+0

記録された乱数がこのターゲットに最も近い記事はどのように返されますか?最初にテーブル全体をソートすると思いますか? –

+1

テーブルがソートされていると思います。この方法では、バイナリ検索を使用してアイテムを非常に高速に挿入して検索することができます(O(log(N))。 – schnaader

+1

ソートされたテーブルは保存され、新しい記事が何らかの形で統合されます。 – weiqure

2

MediaWikiはウィキペディア上で使用するためにPHP、もともと で書かれたフリーソフトウェアのウィキ パッケージです。 非営利団体のウィキメディア財団の他のプロジェクトや、 他の多くのウィキによって、この ウェブサイト、MediaWikiのホームを含む多くのウィキが使用されています。

MediaWikiはオープンソースなので、コードをダウンロードして検査して、この機能の実装方法を確認できます。

3

Something along this lines

"SELECT cur_id,cur_title 
     FROM cur USE INDEX (cur_random) 
     WHERE cur_namespace=0 AND cur_is_redirect=0 
     AND cur_random>RAND() 
     ORDER BY cur_random 
     LIMIT 1" 
1

あなたはthe sourceを見れば、彼らはそれらにインデックスを持つ事前生成のランダムな値(page_random列)でソートやフィルタページPHP/MySQLを使用します。

関連する問題