Подтвердить что ты не робот

Как я могу реализовать отдельные базы данных для операций чтения и записи?

Я заинтересован в реализации архитектуры, которая имеет две базы данных для операций чтения, а другая для записи. Я никогда не реализовал что-то подобное и всегда создавал единую базу данных, сильно нормированные системы, поэтому я не совсем уверен, с чего начать. У меня есть несколько частей к этому вопросу.

<Б > 1. Что было бы хорошим ресурсом, чтобы узнать больше об этой архитектуре?
2. Это просто вопрос репликации между двумя идентичными схемами, или ваши схемы будут отличаться в зависимости от операций, нормализация тоже будет меняться?
3. Как вы гарантируете, что данные, записанные в одну базу данных, сразу доступны для чтения со второго?


Любая дополнительная помощь, советы, ресурсы будут оценены. Спасибо.

ИЗМЕНИТЬ
После некоторых исследований я нашел эту статью, которую я нашел очень информативной для интересующихся.

http://www.codefutures.com/database-sharding/

Я нашел эту highscalability статью очень информативный

4b9b3361

Ответ 1

Я не специалист, но шаблон read/write master database и read-only slaves - это "общий" шаблон, особенно для больших приложений, занимающихся главным образом доступом для чтения или хранилищами данных:

  • он позволяет масштабировать (при необходимости вы добавляете дополнительные ведомые только для чтения)
  • позволяет настраивать базы данных по-разному (для эффективного чтения или эффективной записи).

Что было бы хорошим ресурсом, чтобы узнать больше об этой архитектуре?

В Интернете есть хорошие ресурсы. Например:

Это просто вопрос репликации между двумя идентичными схемами, или ваши схемы будут отличаться в зависимости от операций, нормализация тоже будет меняться?

Я не уверен - я очень хочу прочитать ответы экспертов, но я думаю, что схемы идентичны в традиционных сценариях репликации (настройка может быть другой). Возможно, люди делают больше экзотических вещей, но мне интересно, полагаются ли они на репликацию базы данных в этом случае, это больше похоже на "ETL реального времени".

Как вы гарантируете, что данные, записанные в одну базу данных, сразу доступны для чтения со второго?

Думаю, для этого вам понадобится синхронная репликация (что, конечно, медленнее асинхронного). Хотя некоторые базы данных поддерживают этот режим, не все AFAIK. Но посмотрите этот ответ или этот для SQL Server.

Ответ 2

Вы можете искать хранилища данных. Они служат как "нормализованные для баз данных типа отчетности", в то время как вы можете сохранить нормализованный экземпляр стиля OLTP для обслуживания данных.

Я не думаю, что идея "немедленной" эквивалентности будет реальностью. Будет некоторая задержка, в то время как новые данные и изменения будут перенесены в другую систему. График и область охвата будут вашими большими решениями здесь.

Ответ 3

В отношении вопросов 2:

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

Я работал над подобными системами, где была бы база данных чтения/записи, которая была бы легко использована административными пользователями. Затем эта база данных будет реплицирована в базу данных только для чтения во время ночного процесса.

Вопрос 3: Как мы тут говорим? Меньше секунды? 10 секунд? Минуты?