2

全部,

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

问题

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

暂定解决方案

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

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

有没有人对如何提供数据的聚合和排序视图有其他建议?

4

3 回答 3

1

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

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

如果性能成为问题,那么这是一个大话题……优化查询计划、索引和您的数据库连接方法都可以发挥作用。想到的一件事是,如果它不必是实时的,那么您可以使用物化视图(又名“快照”)将数据缓存在一个地方。然后你可以以合理的性能查询它。

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

于 2009-06-18T15:33:21.720 回答
0

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

如果有一组有限的标准(即,将以有限的方式查看数据)每隔几天就会更改一次并且会被疯狂地查询,那么您可能应该查看物化视图。

如果标准几乎是无限的,那么创建物化视图就没有意义了,因为它们不太可能被重用。如果标准本身变化非常频繁,情况也是如此,在这种情况下,物化视图中的数据也无济于事。

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

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

于 2009-08-19T22:32:57.187 回答
0

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

如果没有更多的业务需求细节和良好的数据模型,总是很难提供好的性能想法。它通常归结为提出一个理论,然后针对您的数据库尝试它并访问它是否“足够快”。

您可能还需要退后一步,问问自己结果需要多准确。企业是否真的需要此查询的准确值或可以接受的良好估计

Tom Kyte(Ask Tom 成名)在这些领域总是有一些有趣的想法(和实际事实)。本文描述了生成正确的动态搜索查询 - 但 Tom 指出,当您查询 Google 时,它​​从不会尝试获取查询的准确命中数 - 它会给您一个猜测。如果您可以应用良好的估计,那么您可以真正提高查询性能时间

于 2009-08-20T08:47:04.067 回答