0

私は、約 100 万件の大量のレコードを含む大規模な中央データベースを持っています。私のアプリでは、すべてのユーザーに対して、中央テーブルからの行のサブセットが非常に小さくなります (おそらくそれぞれ 100 レコード)。特定のユーザーがログインしたときに、このデータ セットのみを検索したいと思います。例:

世界中のすべての車の中央データベースがあるとします。General Motors(GM)、Ferrari などのユーザー プロファイルを持っています。GM がログインしているときに、GM によって製造された車を検索 (SQL クエリではなく全文検索) したいだけです。また、GM はモデルを起動/撤回する場合があり、その場合、中央データベースが更新され、GM に関連付けられた行セットが更新されます。買収の場合、特定のプロファイルのデータベースは、新しい車の発売/削除なしで変更される場合があります。したがって、中央データベースは変更されませんが、行セットは変更される場合があります。

そのようなデザインを実装する最良の方法は何ですか? これらの小さな行セットは、ユーザーのアクティビティに応じて動的にする必要があります。

Rails 2.3.5 を使用しており、コネクタとして thinking_sphinx を使用し、検索とリレーショナル アソシエーションには Sphinx/MySQL を使用しています。

4

2 に答える 2

0

has_many :through を使用するのはどうですか

class Manufacturer
class Car
class ManufacturerCarRelation

Manufacturer
 has_many :manufacturer_car_relations
 has_many :cars through => manufacturer_car_relations

ManufacturerCarRelation
 belongs_to :manufacturer
 belongs_to :car
于 2010-06-01T10:24:54.020 に答える
0

たぶん、次のようなものでインデックスを定義したいでしょう:

class Car
  define_index do
    indexes description
    has 'cars.manufacturer_id', :as => :manufacturer_id, :type => :integer
  end
end

次に、次のようなフィールド条件を使用します。

Car.search "red", :conditions => {:manufacturer_id => gm.id}

または属性フィルター:

Car.search "red", :with => {:manufacturer_id => gm.id}
于 2010-06-01T13:10:35.600 に答える