MySQL обновление MySAM
Мы используем MySQL с движком MyIsam, и у нас возникает ситуация, когда нам необходимо ежедневно обновлять огромное количество строк (миллионов), пока пользователи по-прежнему могут получать доступ к базе данных.
У нас есть пользователи из разных часовых поясов из США, Великобритании, Индии, Китая. Данные загружаются из стороннего источника, когда пользователь впервые регистрируется. Все пользователи используют один и тот же набор таблиц, но их данные не перекрываются, т. Е. Ни один пользователь никогда не будет иметь доступ к тем же строкам, что и другой пользователь.
Сторонняя система изменяет данные, поэтому, чтобы поддерживать актуальность нашей базы данных, мы каждую ночь загружаем новый снимок данных пользователя. Данные пользователя обновляются в полночь относительно этого часового пояса пользователя.
Поскольку все пользователи используют одни и те же таблицы, это означает, что процесс обновления данных может обновлять данные пользователя в американском часовом поясе, в то время как пользователи в Великобритании активно просматривают свои данные. Вот в чем проблема. У нас есть миллионы данных для обновления, но мы не можем это сделать.
Пожалуйста, предложите, как лучше всего обновлять данные пользователей, не влияя на доступ других пользователей к базе данных. Данные, хранящиеся в базе данных, являются числами, и все столбцы являются целыми числами.
1 ответ
Я вижу два решения:
- Переключитесь на ядро базы данных InnoDB - это даст вам блокировку уровня строки вместо уровня таблицы. Просто знайте, что вставки, как правило, медленнее.
- Разбейте свои таблицы по регионам. Исходя из вашей ситуации, если ваши таблицы сегментированы по регионам, вы никогда не будете одновременно читать и писать какие-либо таблицы.