0

誰かがacts_as_xapian_jobsテーブルの内部の仕組みを説明できますか?

最近、プラグインで問題がacts_as_xapian発生しました。xapian インデックス付きフィールドを使用してオブジェクトを作成すると、次のエラーが発生し続けました。

Mysql::Error: Duplicate entry 'String-2147483647' for key 2: 
INSERT INTO `acts_as_xapian_jobs` (`action`, `model`, `model_id`) 
VALUES ('update', 'String', 23730251831560)

model_id2147483647 の最大 int 値を超えていることが判明しました。回避策は、 model_idbigint を使用するように更新することでした。なぜmodel_idそんなに巨大になるのでしょうか?のコンテンツを見るとacts_as_xapian_jobs、インデックスが作成されているすべてのフィールドに対して行が作成されているようです。テーブルでジョブが作成される方法を理解すると、非常に役立ちます。

テーブルのサンプルは次のとおりです。

mysql> select * from acts_as_xapian_jobs limit 5\G
*************************** 1. row ***************************
      id: 19
   model: String
model_id: 23804037900560
  action: update
*************************** 2. row ***************************
      id: 49
   model: String
model_id: 23804037191200
  action: update
*************************** 3. row ***************************
      id: 79
   model: String
model_id: 23804037932180
  action: update
*************************** 4. row ***************************
      id: 109
   model: String
model_id: 23804037101700
  action: update
*************************** 5. row ***************************
      id: 139
   model: String
model_id: 23804037722160
  action: update

前もって感謝します、

アミエ

4

1 に答える 1

1

最近acts_as_xapianを発見し、少し遊んでいます。acts_as_xapian_jobsモデルが変更されるたびにテーブルが更新されるようです。次に、Xapianインデックスは、次にrake xapian:update_index実行されるときに実際に更新されます。

したがって、acts_as_xapian_jobsテーブルには基本的に、インデックスを再作成する必要があるモデル内のレコードのIDが含まれています。私の知る限り、レコードはモデルが変更されたときにのみテーブルに追加されるので、データベース内の多くのエントリを変更/更新していますか?これが、最大int値をオーバーフローさせた理由である可能性があります。

お役に立てれば!

于 2010-03-12T08:22:03.463 に答える