Какой из следующих вариантов дублирования данных рекомендуется использовать в шардах? - PullRequest
0 голосов
/ 11 февраля 2012

Высокопроизводительная книга mysql предполагает, что для разделения приложения блога может потребоваться поместить данные комментариев в 2 сегмента: во-первых, на фрагмент лица, отправляющего комментарий, и на фрагмент, где находится сообщение хранится.

Так что возникает вопрос, как надежно продублировать эти данные. Какой из следующих вариантов дублирования данных рекомендуется использовать в шардах?

Вариант 1: Сделать 2 отдельных вставки из скрипта PHP.
Плюсы: a) Логика находится на прикладном уровне.
Минусы: а) Пользователь удерживается за 2 вставки. б) Эту логику необходимо будет продублировать на каждом клиенте, пытающемся вставить похожие данные.
Вывод: кажется разумным.

Вариант 2: Формировать федеративные таблицы и использовать некоторый триггер для обработки вставки дубликата.
Плюсы: a) Слой приложения не должен беспокоиться о множественных вставках
Минусы: a) Каждый шард должен иметь федеративное соединение с каждым другим шардом; б) Федерация будет работать на машинах в локальной сети, но как на 2 разных сайтах. в) что если соединение с федеративным сервером не установлено.
Вывод: не похоже на здравую идею.

Вариант 3: Сообщения, такие как RabbitMQ
Плюсы: a) Разные клиенты могут вставлять данные в одном месте, и все подписчики могут использовать вставку.
Минусы: а) Комплекс; б) может наложить накладные расходы для размещения сервера обмена сообщениями и клиентов; c) не уверен, как он будет работать с поисковой службой для поиска соответствующих осколков
Вывод: Не уверен

Вариант 4: Ваше предложение?

Я буду очень признателен за вашу помощь.

1 Ответ

2 голосов
/ 12 февраля 2012

Как вы указали, иметь триггеры между различными осколками глупо; вся причина шардинга - независимая база данных операции. Таким образом, вы можете выбросить его прямо сейчас.

Обновление обеих таблиц одновременно - подход с наименьшим движущиеся части. В долгосрочной перспективе это будет наиболее ремонтопригодным. И это будет легче всего отладить, если что-то пойдет не так.

Но если время отклика важно, то вы можете подумать о каком-то подхода обмена сообщениями: обновите таблицу комментариев по записи и поставьте в очередь сообщение для обновления таблицы комментариев пользователя. Если это займет час для это сообщение, которое будет обработано - или, если оно потеряно при сбое системы - ничего страшного, вы всегда можете выздороветь. Ни в коем случае не следует использовать метод обмена сообщениями для обновления обеих таблиц.

Ответ: @ kdgregory Ссылка: https://softwareengineering.stackexchange.com/a/134607/41398

...