Кеш Yii в MySQL

Предварительное обсуждение найденных ошибок перед отправкой их авторам фреймворка, а также внесение новых предложений.
Ответить
Аватара пользователя
Антон Смирнов
Сообщения: 284
Зарегистрирован: 2011.07.08, 10:37
Контактная информация:

Кеш Yii в MySQL

Сообщение Антон Смирнов »

Коллеги, столкнулся вот с чем.

В БД (MySQL) хранится кеш. Всего элементов в таблице не более 10 000. Кеш обновляется редко, в основном, рассчитан на длительное хранение.

Все было хорошо долгое время, пока не получил ошибку:

Не удалось выполнить CDbCommand::execute(): SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '0d4b0f6e114dd2cda162a64e74757b22' for key 'PRIMARY'. Выполнявшийся SQL-запрос: INSERT INTO cache_1 (id,expire,value) VALUES ('0d4b0f6e114dd2cda162a64e74757b22',1355213827,:value).

Правильно ли я понимаю, что механизм случайных ключ подлежит переработке?
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: Кеш Yii в MySQL

Сообщение samdark »

Коллизии возможны, да.
Аватара пользователя
Антон Смирнов
Сообщения: 284
Зарегистрирован: 2011.07.08, 10:37
Контактная информация:

Re: Кеш Yii в MySQL

Сообщение Антон Смирнов »

Sam Dark писал(а):Коллизии возможны, да.
Никогда не думал, что так произойдет :)
Может увеличить длину ключа?
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: Кеш Yii в MySQL

Сообщение samdark »

Там md5, можно попробовать перекрыть метод generateUniqueKey. Хотя…
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: Кеш Yii в MySQL

Сообщение samdark »

Такого вроде не должно быть. По идее, должен быть не INSERT, а UPDATE.
Аватара пользователя
Антон Смирнов
Сообщения: 284
Зарегистрирован: 2011.07.08, 10:37
Контактная информация:

Re: Кеш Yii в MySQL

Сообщение Антон Смирнов »

Sam Dark писал(а):Такого вроде не должно быть. По идее, должен быть не INSERT, а UPDATE.
В CDbCache нет "Update", только "Insert". Глюк?
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: Кеш Yii в MySQL

Сообщение samdark »

Я в том смысле, что:

Код: Выделить всё

protected function setValue($key,$value,$expire)
{
    $this->deleteValue($key);
    return $this->addValue($key,$value,$expire);
}
 
То есть, по идее, это всё-таки коллизия.
Аватара пользователя
Антон Смирнов
Сообщения: 284
Зарегистрирован: 2011.07.08, 10:37
Контактная информация:

Re: Кеш Yii в MySQL

Сообщение Антон Смирнов »

Сегодня опять возникли коллизии, при этом кеш обновляется не часто. Мне кажется проблема не в md5, а в самой длине ключа.
Hett
Сообщения: 127
Зарегистрирован: 2011.04.25, 07:18

Re: Кеш Yii в MySQL

Сообщение Hett »

Какая разница какая длина у ключа, если

Код: Выделить всё

    $this->deleteValue($key);
    return $this->addValue($key,$value,$expire); 
по идее должен избавить от коллизий.

Как вариант, могу предположить что 2 процесса одновременно выполняют это действие. Попробуйте заключить в транзакцию.
Аватара пользователя
Антон Смирнов
Сообщения: 284
Зарегистрирован: 2011.07.08, 10:37
Контактная информация:

Re: Кеш Yii в MySQL

Сообщение Антон Смирнов »

Hett писал(а):Какая разница какая длина у ключа, если

Код: Выделить всё

    $this->deleteValue($key);
    return $this->addValue($key,$value,$expire);
по идее должен избавить от коллизий.

Как вариант, могу предположить что 2 процесса одновременно выполняют это действие. Попробуйте заключить в транзакцию.
Имелся ввиду уход от md5.

Как вариант, могу предположить что 2 процесса одновременно выполняют это действие
Видимо это причина проблемы, спасибо.
Ответить