Управление многими компаниями с Oracle
Моя компания хранит свои данные в базе данных Oracle. Он предлагает услуги нескольким другим компаниям, каждая из которых имеет тысячи клиентов, размещающих заказы. По историческим причинам все данные находятся в одной схеме, и, например, все заказы находятся в одной таблице, скажем, ORDERS
,
Сейчас у него проблемы с производительностью, и я хотел бы воспользоваться этой возможностью, чтобы решить две задачи:
- устранить проблемы с производительностью
- данные отдельных компаний по соображениям безопасности.
Первоначально я думал использовать одну схему для каждой компании, которую мы обслуживаем:
- схема
A
с таблицей по имениORDERS
содержащий все заказы клиентов компании А - схема
B
с таблицей по имениORDERS
содержащий все заказы клиентов компании B - так далее. ...
но у нас есть другая проблема: у нас также есть несколько "суперкомпаний", которые также могут управлять данными для многих компаний. Например: "Суперкомпания", управляющая заказами для компаний A и B.
При таком подходе есть ли способ управлять этими "суперкомпаниями"? Я думал, объявив другую схему (скажем, SUPERCOMPANY
) имеющий синоним, который относится к объединению ORDERS
таблицы из A
а также B
но:
- Есть ли какие-либо проблемы с производительностью, если синоним ссылается на объединение? Используются ли индексы таблиц?
- Как насчет INSERT? Как настроить таргетинг на соответствующую таблицу, если "Суперкомпания" хочет добавить заказ для клиента, принадлежащего компании А?
Должны ли мы лучше использовать другое решение, например, иметь одну большую базу данных и схемы, ссылающиеся на соответствующий раздел большой таблицы? ORDERS
? (Я даже не знаю, возможно ли это)
- схема
DB
содержащие данные с огромнымORDERS
стол, разделенный компанией. - схема
A
имеющий ссылку на синонимDB.ORDERS#partitionA
- схема
B
имеющий ссылку на синонимDB.ORDERS#partitionB
- схема
SUPERCOMPANY
имеющий ссылку на синонимDB.ORDERS
или жеDB.ORDERS#partitionA and ORDERS#partitionB
Это не звучит хорошо для меня, потому что мы не должны нацеливаться непосредственно на разделы, не так ли?
У меня все еще есть надежда, и я уверен, что у Oracle есть решения для таких проблем, поскольку она является основным игроком для реляционных баз данных.
Каков будет ваш подход?
Спасибо за ваше чтение.
1 ответ
Звучит так, как будто разбиение подойдет для вашей проблемы с производительностью.
По вопросу безопасности вы можете обратиться к виртуальной частной базе данных, которая предназначена именно для этого типа сценария. Я не думаю, что вам даже понадобятся синонимы (вам, вероятно, понадобятся представления, если вы пойдете по этому пути), так как вы настроите политику так, чтобы в зависимости от учетной записи пользователя, к которой вы подключились, Oracle автоматически применял соответствующий фильтр ко всем затронутые запросы.
Вы также можете посмотреть на использование сервисов, чтобы предоставить больше возможностей для мониторинга производительности по компаниям.