PaulGrahamがHackerNewsのランキングアルゴリズムを説明する方法は次のとおりです。
News.YCはただ
(p-1)/(t + 2)^ 1.5
ここで、p =ポイント、t=時間単位の年齢
次の表を前提として、純粋なmySQLでこれを実行したいと思います。
- フィールドpostID(インデックス)およびpostTime(タイムスタンプ)を持つテーブル投稿。
- テーブルvoteid(インデックス)、postID、およびvote(整数、0または1)のフィールドを持つ投票。
投票フィールドの考え方は、投票を取り消すことができるということです。ランキングの目的では、vote=0は投票がまったくないことと同じです。(すべての投票は賛成票であり、反対票などはありません。)
問題は、PaulGrahamの式でソートされた上位N個のpostIDを返すクエリを作成する方法です。全部で約10万件の投稿があるので、スコアのキャッシュなどが必要になると思われる場合は、そのアドバイスをお聞かせください。
(明らかにこれはロケット科学ではなく、確かに理解できますが、朝食、昼食、夕食にSQLを食べる人は、それをガタガタ鳴らすことができると思いました。StackOverflowで利用できることは価値があるようです。)
関連する質問: