Назад | Перейти на главную страницу

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

У меня 2 сервера. Оба они содержат идентичные приложения, каждое со своей собственной локальной базой данных. Приложению иногда необходимо блокировать строку базы данных для записи, поэтому совместное использование одной и той же базы данных может снизить производительность (или нет?).

Если я хочу, чтобы два сервера использовали одну и ту же базу данных, чтобы избежать избыточности данных, как мне это сделать без снижения производительности? Кластеризация баз данных - правильное направление?

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

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

Вы можете поместить всю нагрузку на базу данных на один сервер и всю нагрузку на веб-сервер на другой, т.е. иметь одну базу данных и один веб-сервер. Это может быть самый простой способ распределить нагрузку без сложной кластеризации.

Выбор правильного решения зависит от нагрузки, которую создает каждый компонент, и от того, где находится горлышко бутылки.

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