Используя комбинацию MySQL и MongoDB
Имеет ли смысл использовать комбинацию MySQL и MongoDB. Что я пытаюсь сделать, так это использовать MySQl в качестве типа "резервного копирования необработанных данных", где все данные хранятся там, но не читаются оттуда.
Данные также хранятся одновременно в MongoDB, и чтение происходит только из mongoDB, потому что мне не нужно делать соединения и прочее.
Например, предположим, в построении NetFlix
В MySQL у меня есть таблица для комментариев и фильмов. Затем, когда делается комментарий В MySQL я просто добавляю его в таблицу, а в MongoDB я обновляю документальный фильм, чтобы он содержал этот новый комментарий.
А потом, когда я хочу получить фильмы и комментарии, я просто беру документ с mongoDb.
Моя главная проблема связана с тем, как "новый" mongodb сравнивается с MySQL. В случае, когда в Mongo происходит что-то неожиданное, у нас есть резервная копия MySQL, где мы можем быстро получить откат приложения к mysql и memcached.
1 ответ
На бумаге это может звучать как хорошая идея, но есть много вещей, которые вы должны будете принять во внимание. Это сделает ваше приложение более сложным, чем вы думаете. Я приведу несколько примеров.
Две разные системы
Вы будете иметь дело с двумя разными системами, каждая со своим поведением. Это различное поведение затруднит синхронизацию всего.
- Что произойдет, если запись в MongoDB завершится неудачно, но в MySQL будет успешной?
- Или наоборот, когда ограничение столбца в MySQL нарушается, например?
- Что делать, если в MySQL возникает тупик?
- Что если ваша схема изменится? Одна миграция болезненна, но вам придется сделать две миграции.
Вам придется иметь дело с некоторыми из этих сценариев в коде приложения. Что подводит меня к следующему пункту.
Два уровня доступа к данным
Ваше приложение должно взаимодействовать с двумя внешними системами, поэтому вам нужно написать два слоя доступа к данным.
- Оба слоя должны быть проверены.
- Оба должны быть сохранены.
- Остальная часть вашего приложения должна взаимодействовать с обоими уровнями.
- Абстрагирование обоих слоев приведет к появлению еще одного слоя, что еще больше увеличит сложность.
Возможен каскадный сбой
В случае сбоя MongoDB приложение вернется к MySQL и запустит memcached. Но в этот момент memcached будет пустым. Таким образом, каждый запрос сразу после сбоя MongoDB попадет в базу данных. Если у вас есть сайт с большим трафиком, это может легко снять MySQL.
Слово совета
Определите все возможные способы, как вы думаете, "что-то неожиданное" может произойти с MongoDB. Тогда используйте самое простое решение для каждого отдельного случая. Например, если вас беспокоит потеря данных, используйте репликацию. Если это повреждение данных, используйте отложенную репликацию.