масштабируемость неудачных транзакций mysql - PullRequest
0 голосов
/ 15 октября 2010

У меня есть таблица, в которой хранятся сообщения от одного пользователя другому. сообщения (user_id, friend_id, сообщение, created_date). Мой первичный ключ (friend_id, создал_дата). Это предотвращает дублирование сообщений (AFAIK), потому что их не удастся вставить.

Сейчас это нормально, потому что мой код генерирует около 20 таких запросов одновременно для каждого пользователя, и у меня есть только один пользователь. Но если бы были сотни или тысячи пользователей, это создало бы узкое место в моей базе данных со всеми неудачными транзакциями? И если что я могу сделать, чтобы улучшить ситуацию?

EDIT: Вопрос сводится к тому, должен ли я использовать ограничение первичного ключа, проверить вне mysql или использовать некоторые другие функции mysql, чтобы сохранить дубликаты в базе данных?

1 Ответ

1 голос
/ 15 октября 2010

Все должно быть в порядке, поскольку mysql просто выполнит внутренний поиск первичного ключа и проигнорирует запись (я предполагаю, что вы используете INSERT IGNORE). Если вы проверяли, существуют ли они перед вставкой, mysql все равно проверит снова, когда вы вставите. Это означает, что если большинство вставок будет успешным, то вы сохраняете дополнительную проверку. Если подавляющее большинство операций вставки не сработало (маловероятно), возможно, экономия от отказа от отправки ненужных данных перевесит случайную повторную проверку.

...