Oracle多模式聚合实时视图

时间:2009-06-18 15:26:21

标签: database database-design architecture oracle-apex

所有

寻找关于我目前正在尝试评估的Oracle设计决策的一些指导:

问题

我在同一个oracle db服务器上有三个独立模式的数据。我正在寻找构建一个将显示来自所有三个模式的数据的应用程序,但是显示的数据将基于全局应用于数据的实时排序和优先级排序规则(即:基于我应用的优先级权重)从三个模式中的任何一个中拉回数据)。

暂定解决方案

在DB中创建一个VIEW,它维护与三个模式中相关列的逻辑链接,编写一个接受参数化优先级权重的存储过程。应用程序随后调用存储过程从视图中选择“优先级”行,然后根据返回的行直接查询关联的模式以获取其他数据。

我对执行每个查询时对数据进行排序/优先级排序的性能表示担忧,但由于优先级规则会经常更改,因此无法找到解决方法。我们讨论的是每个模式2-3百万行的数据集。

是否有人就如何提供数据的聚合和排序视图提出了其他建议?

3 个答案:

答案 0 :(得分:1)

即使在同一个查询中,从多个模式(甚至是multiple databases)查询也不是什么大问题。只需在表名前加上您感兴趣的模式,如

SELECT SOMETHING
FROM
  SCHEMA1.SOME_TABLE ST1, SCHEMA2.SOME_TABLE ST2
WHERE ST1.PK_FIELD = ST2.PK_FIELD

如果性能成为一个问题,那么这是一个很大的话题......最佳的查询计划,索引和数据库连接方法都可以发挥作用。我想到的一件事是,如果它不必是实时的,那么您可以使用materialized views (aka "snapshots")将数据缓存在一个地方。然后你可以用合理的性能查询它。

只需将快照设置为以适合您需要的间隔刷新。

答案 1 :(得分:0)

数据来自3个模式并不重要。重要的是要知道数据的变化频率,标准的变化频率以及查询的频率。

如果存在一组有限的标准(即数据将以有限的方式查看),这些标准每隔几天就会更改一次并且会像疯了一样被查询,那么您应该查看物化视图。 / p>

如果标准几乎是无限的,那么制作物化视图是没有意义的,因为它们不可能被重复使用。如果标准本身变化非常频繁,那么物化视图中的数据也不会有所帮助。

另一个未回答的问题是源数据的更新频率,以及获取最新信息的重要性。经常更新的源日可能意味着物化视图将在一段时间内“陈旧”,或者您可能花费大量时间不必要地刷新物化视图以保持数据“新鲜”。

老实说,如果有足够的硬件,那么对于Oracle来说已经有2-3百万条记录了。在尝试花哨(物化)视图之前,我可能会首先对简单的动态查询进行基准测试。

答案 2 :(得分:0)

正如其他人所说,在Oracle中查询几百万行并不是一个真正的问题,但那取决于你这样做的频率 - 每十分之一秒可能会导致数据库服务器出现一些负载!

如果没有更详细的业务要求和良好的数据模型,那么始终难以提供良好的绩效创意。它通常归结为提出一个理论,然后针对您的数据库进行尝试,并在“足够快”时进行访问。

您可能还值得退后一步,并问自己结果的准确程度。业务是否真的需要此查询的确切值,或者是可接受的良好估计值

汤姆凯特(问汤姆成名)总是在这些领域有一些有趣的想法(和实际事实)。 This article describes generating a proper dynamic search query - but Tom points out that when you query Google it never tries to get the exact number of hits for a query - it gives you a guess。如果您可以应用一个好的估计,那么您可以真正提高查询性能时间