0

約 10,000 個のアプリのリストがあり、特定の列で並べ替えたいのですが、特定の列に他の列よりも「重み」を付けたいと考えています。

たとえば、各アプリにはoverall_ratingsとがありcurrent_ratingsます。アプリに がたくさんある場合overall_ratings、それは 1.5 の価値がありますが、アプリがアクティブで現在人気のある番組のcurrent_ratings数から、 の数は 2 などの価値があります。current_ratings

現在、考慮したいこれらの変数はおそらく 4 ~ 6 個あります。

それで、どうすればそれをやってのけることができますか?クエリ自体で?Ruby だけを使用した後で (ここで処理する必要がある行が 10,000 行以上あることを思い出してください)? 他の何か?

これは Rails 3.2 アプリです。

4

2 に答える 2

1

10000 個のオブジェクトを単純な Ruby でソートすることは、特に最初の 10 個程度が必要な場合は、良い考えとは思えません。

数式をクエリに入れてみることができます (Active Record の order メソッドを使用)。

ただし、私のお気に入りのアプローチは、float 属性を作成してスコアを保存し、その値を before_save メソッドで更新することです。

ダーティ属性について読むと、基準の一部が更新されたときにのみこのスコアリングを実行できます。

現在のオブジェクトを再スコアリングするレーキ タスクを作成することもできます。

このようにして、スコアリング機能を Ruby に保持し (簡単にテストできます)、float 属性にインデックスを追加して、データベース クエリのパフォーマンスを向上させることができます。

于 2013-05-15T23:14:19.623 に答える