我的公司正在将其数据存储在Oracle数据库中。
它为其他几家公司提供服务,每个公司都有成千上万的客户下订单。
由于历史原因,所有数据都位于同一模式中,例如,所有订单位于同一表中,例如ORDERS
。
现在它存在性能问题,我想借此机会管理两个目标:
我最初的想法是为我们服务的每家公司使用一个架构:
A
和名为ORDERS
的表,其中包含公司A客户的所有订单B
和名为ORDERS
的表,其中包含公司B客户的所有订单但是我们还有一个问题:我们还有一些“超级公司”,它们也可以管理许多公司的数据。例如:“超级公司”管理公司A和B的订单。
采用这种方法,有什么办法可以管理这些“超级公司”?我以为是要声明另一个模式(假设为SUPERCOMPANY
),该模式的同义词是指ORDERS
和A
中的B
表的并集,但是:
我们是否应该更好地使用另一种解决方案,例如仍然拥有一个大数据库并具有引用大表ORDERS
的适当分区的架构? (我什至不知道这是否可能)
DB
包含具有庞大ORDERS
表的数据,并按公司分区。A
具有引用DB.ORDERS#partitionA
的同义词B
具有引用DB.ORDERS#partitionB
的同义词SUPERCOMPANY
的同义词,它引用了DB.ORDERS
或DB.ORDERS#partitionA and ORDERS#partitionB
这对我来说听起来不太好,因为我们不应该直接针对分区,是吗?
我仍然有希望,并且我相信Oracle对于此类问题有解决方案,因为它是关系数据库的主要参与者。
您的处理方式是什么?
感谢您的阅读。
答案 0 :(得分:0)
听起来分区很适合您的性能问题。
对于安全性问题,您可以查看Virtual Private Database,它正是针对这种情况而设计的。我认为您甚至不需要同义词(如果走这条路,可能就不需要视图),因为您可以设置策略,以便根据您所连接的用户帐户,Oracle会自动将适当的过滤器应用于所有受影响的查询。
您可能还会考虑使用服务,以提供更多选择来监视公司的绩效。