2

全て、

私が現在評価しようとしているOracleの設計上の決定に関するガイダンスを探しています。

問題

同じ oracle db サーバー上の 3 つの個別のスキーマにデータがあります。3 つすべてのスキーマからのデータを表示するアプリケーションを構築しようとしていますが、表示されるデータは、データにグローバルに適用されるリアルタイムの並べ替えと優先順位付けのルールに基づいています (つまり、適用される優先度の重み付けに基づいています)。 3 つのスキーマのいずれかからデータを取得します)。

暫定的な解決策

3 つのスキーマの関連する列への論理リンクを維持する VIEW を DB に作成し、パラメーター化された優先順位の重み付けを受け入れるストアド プロシージャを記述します。その後、アプリケーションはストアド プロシージャを呼び出して、ビューから「優先順位が付けられた」行を選択し、返された行に基づいて、関連するスキーマに直接クエリを実行して追加のデータを取得します。

クエリが実行されるたびにデータが並べ替えられたり優先順位が付けられたりするパフォーマンスに懸念がありますが、優先順位付けのルールが頻繁に変更されるため、これを回避する方法がわかりません。スキーマごとに 200 万から 300 万行の領域のデータ セットについて話しています。

データを集約して並べ替えたビューを提供する方法について、別の提案がある人はいますか?

4

3 に答える 3

1

複数のスキーマ (または複数のデータベース) からのクエリは、同じクエリ内であっても、実際には大したことではありません。次のように、関心のあるスキーマをテーブル名の先頭に追加するだけです。

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

パフォーマンスが問題になる場合、それは大きなトピックです...最適なクエリ プラン、インデックス、およびデータベース接続の方法がすべて影響を与える可能性があります。心に浮かぶことの 1 つは、リアルタイムである必要がない場合は、マテリアライズド ビュー (別名「スナップショット」)を使用してデータを 1 か所にキャッシュできることです。次に、妥当なパフォーマンスでクエリを実行できます。

必要に応じて適切な間隔でスナップショットを更新するように設定するだけです。

于 2009-06-18T15:33:21.720 に答える
0

実際、データが3つのスキーマからのものであるかどうかは関係ありません。知っておくべき重要なことは、データが変更される頻度、基準が変更される頻度、およびデータが照会される頻度です。

数日ごとに変更されるだけの有限の基準セットがある場合(つまり、データは限られた数の方法で表示されます)、狂ったように照会される場合は、マテリアライズドビューを確認する必要があります。

基準がほぼ無限である場合、それらは再利用されない可能性が高いため、マテリアライズドビューを作成しても意味がありません。基準自体が非常に頻繁に変更される場合も同じことが当てはまります。この場合も、マテリアライズドビューのデータは役に立ちません。

答えられていないもう1つの質問は、ソースデータが更新される頻度と、最新の情報を入手することがどれほど重要かということです。ソース日が頻繁に更新されるということは、マテリアライズド・ビューが一定期間「古くなる」ことを意味する場合もあれば、データを「最新」に保つためにマテリアライズド・ビューを不必要に更新することに多くの時間を費やす場合もあります。

正直なところ、十分なハードウェアがあれば、Oracleにとって2〜300万レコードはもう多くありません。ファンシーな(マテリアライズド)ビューを試す前に、最初に単純な動的クエリのベンチマークを行うと思います。

于 2009-08-19T22:32:57.187 に答える
0

他の人が言ったように、Oracle で数百万行をクエリすることは実際には問題ではありませんが、それは実行頻度によって異なります。10 分の 1 秒ごとに db サーバーに負荷がかかる場合があります。

ビジネス要件の詳細とデータの優れたモデルがなければ、優れたパフォーマンスのアイデアを提供することは常に困難です。通常、理論を考え出し、それをデータベースに対して試して、「十分に高速」である場合にアクセスします。

一歩下がって、結果がどれほど正確である必要があるかを自問することも価値があるかもしれません. ビジネスはこのクエリの正確な値を本当に必要としていますか、それとも適切な見積もりは受け入れられますか?

Tom Kyte (Ask Tom で有名) は、常にこれらの分野でいくつかの興味深いアイデア (および実際の事実) を持っています。この記事では、適切な動的検索クエリを生成する方法について説明しますが、Tom は、Google にクエリを実行すると、クエリの正確なヒット数を取得しようとはしないと指摘しています。適切な見積もりを適用できれば、クエリのパフォーマンス時間を大幅に改善できます

于 2009-08-20T08:47:04.067 に答える