act_as_xapian таблица заданий - PullRequest
0 голосов
/ 04 июня 2009

Может кто-нибудь объяснить мне внутреннюю работу таблицы act_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_id превысил максимальное значение int 2147483647. Обходной путь должен был обновить model_id для использования bigint. Почему 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

Заранее спасибо,

Amie

1 Ответ

1 голос
/ 12 марта 2010

Я недавно обнаружил acts_as_xapian , и я немного поиграл с этим. Кажется, таблица acts_as_xapian_jobs обновляется каждый раз, когда меняется модель. Затем индекс Xapian фактически обновляется при следующем запуске rake xapian:update_index.

Итак, таблица acts_as_xapian_jobs в основном просто содержит идентификаторы записей в модели, которые необходимо переиндексировать. Насколько я могу судить, записи добавляются в таблицу только тогда, когда ваша модель изменилась, так что вы меняете / обновляете много записей в вашей базе данных? Это может быть причиной того, что вы переполнили значение max int.

Надеюсь, это поможет!

...