問題タブ [data-warehouse]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
sql - 非正規化テーブルでの非スカラー集計のパフォーマンスを向上させる方法
約 80 列の非正規化テーブルがあり、1 か月あたり約 1,000 万行 (約 5GB) の割合で増加するとします。現在、3 年半分のデータ (~4 億行、~200 GB) があります。
主キーとして機能する次の列のテーブルからデータを取得するのに最適なクラスター化インデックスを作成します...
...テーブルをクエリすると、常に主キー全体が得られるためです。
そのため、これらのクエリは常にクラスター化されたインデックス シークになるため、非常に高速であり、断片化は最小限に抑えられます。ただし、通常はレポートのために、すべてのリージョンの最新の FileDate を取得したい状況があります。
これに思いつく「最善の」解決策は、リージョンに非クラスター化インデックスを作成することです。これは、ロード中にテーブルに追加の挿入が行われることを意味しますが、ヒットは最小ではありません (1 日に 4 回ロードするため、ロードごとの追加のインデックス挿入は 100,000 未満です)。テーブルも FileDate によって分割されているため、クエリの結果は十分に速く (200 ミリ秒程度) 返され、その結果セットは次の読み込みまでキャッシュされます。
ただし、データ ウェアハウジングの経験が豊富な人は、より最適なソリューションを持っている可能性があると推測しています。
sql - SQLServer2008のユーザー定義のランキング/分析関数
SQL Server 2008へのデータウェアハウスの移行を計画しており、SQL Server 2008でOracleからLAG、LEAD、FIRST_VALUE、およびLAST_VALUE分析関数を複製する方法を考えています。これらはSQL Server 2008には含まれていませんが、基本的なものです。ウィンドウ化された分析関数の機構は次のとおりです(たとえば、ROW_NUMBER、RANK、およびDENSE_RANKがすべて存在します)。
これらの関数の場合、ROW_NUMBERを使用して各行に番号を割り当てるサブクエリを作成し、そのクエリの自己結合を実行して、近くの行番号(LAGおよびLEADの場合)に関連する行を見つけることで、同じ機能を実現できます。行番号1(FIRST_VALUEの場合)。
自己結合を行うと、操作の効率が低下すると思いますが、これをテストするSQLServerはまだありません。したがって、実際にパフォーマンスを評価していなくても、自己結合を回避するより良い回避策があるかどうか疑問に思っています。
ユーザー定義の集計関数のドキュメントを見ると、同じコード構造を使用してユーザー定義の分析関数を提供できると考えられます。
だから私の質問は:ユーザー定義の集計関数の後にOVER()句を追加して、分析関数として呼び出すことができますか?
その場合、Terminate()メソッドは行ごとに1回呼び出されますか?OVER()句で指定された順序で行がUDFに送信されるようにするために、特別に必要なものはありますか?
database-design - データベース設計の提案が必要
医薬品の日次売上高のテーブルを設計する必要があります。
{Name, code} には数百種類の製品があります。
これらの製品{名前、コード}を販売するために、何千人もの営業担当者が雇用されています。
さまざまなデポ{名前、コード}から製品を収集します。
それらはさまざまなエリアで機能します -> ゾーン -> マーケット -> アウトレットなど {すべてに名前とコードがあります}
各商品には、さまざまな種類の価格{製造価格、取引価格、業務価格、割引価格など}があります。そして、販売員はそれらの組み合わせから自由に選択して販売価格を見積もることができます。
問題は、毎日の売上高が膨大な量のデータ入力を必要とすることです。数年以内に (テラバイトではないにしても) ギガバイトのデータが存在する可能性があります。日次、週次、月次、四半期、および年次の売上レポートを表示する必要がある場合は、さまざまな種類の SQL クエリが必要になります。
これは私の最初のデザインです:
さて、インデックス作成とは別に、DailySalesテーブルを正規化して、今後何年も変更する必要のないきめ細かい設計を行うにはどうすればよいでしょうか?
上記の情報に基づいて、(すべてのタイプのレポートが照会される) データ入力テーブルのみのサンプル デザインを示してください。DailySales
詳細な設計アドバイスは必要ありません。DailySalesテーブルについてのみアドバイスが必要です。この特定のテーブルを分割して粒度を実現する方法はありますか?
database-design - データ ウェアハウス用のファクト テーブルの設計
これをデータ ウェアハウスでどのようにモデル化しますか。
地域 (ミネソタ州などの州)、地域 (中西部など) などの地理的階層に存在する地理的領域である自治体があります。
これらの地方自治体の業績評価は、「完成した住宅の受注残高の割合」、「支出された予算の割合」、「インフラに割り当てられた予算の割合」、「債務者の補償範囲」などの指標を計算することによって行われます。
これらのパフォーマンス指標は約 100 あります。
これらの指標は「パフォーマンス グループ」にグループ化され、それ自体が「重要なパフォーマンス領域」にグループ化されます。
計算がパフォーマンス指標に適用され (計算は、自治体の種類、規模、地域などの特定の要因に基づいて異なります)、「パフォーマンス スコア」が生成されます。
次に、重み付けがスコアに適用され、「最終的な重み付けスコア」が作成されます。(つまり、いくつかの指標は、「重要なパフォーマンス領域」に集約されると、他の指標よりも重み付けされます)
時間の次元があります (評価は毎年行われます) が、現時点では 1 つのデータ セットのみです。
注意: ユーザーは、指標の任意の組み合わせでデータを簡単にクエリできる必要があります。すなわち、誰かが見たいと思うかもしれません: (i) (ii) 「債務者補償範囲」対 (iii) 「% 予算支出」対 (iv) 「債務者日数」 (v) 州レベル。
「IndicatorType」をディメンションとして使用し、そのテーブルに [インジケーター / パフォーマンス グループ / パフォーマンス エリア] 階層を配置してこれを試しましたが、同じ行に複数のインジケーターを簡単に取得する方法がわかりません。ファクト テーブルのエイリアス (?) が必要です。そこで、100 項目すべてを (非常に広い!) ファクト テーブルの列として配置することを考えましたが、そうすると、インジケーターの [グループ/領域] 階層が失われてしまいます...?
何か案は?
ありがとう
oracle - Oracle でマテリアライズド ビューを部分的に更新することはできますか?
他の具体化されたビュー、通常のビュー、およびいくつかのテーブルに基づく非常に複雑な Oracle ビューがあります (「高速更新」できません)。ほとんどの場合、このビューの既存のレコードは日付に基づいており、「安定」しており、新しいレコード セットには新しい日付が含まれています。
時折、私はバックデートを受け取ります。それらが何であるか、およびテーブルを維持している場合の対処方法は知っていますが、これを「ビュー」に保ちたいと思います。完全な更新には約 30 分かかりますが、特定の日付では 25 秒しかかかりません。
マテリアライズド ビューの一部 (影響を受ける日付など) のみを更新するように指定できますか?
ビューを破棄し、テーブルとプロシージャを使用して、そのテーブルの特定の日付を入力または更新する必要がありますか?
sql-server - Multi Dimension OLAP CUBE とは何か、3 つ以上のディメンションを持つキューブの例を挙げてください
私は SSAS を初めて使用するので、多次元 OLAP キューブに関する記事を読み、キューブの概念を理解するのに苦労しています。「キューブ」という用語は 3 つの次元を示唆していますが、キューブには最大 64 の次元を含めることができます。立方体でこれがどのように可能であるかを説明していただけますか (3 次元の例の x、y、z 平面以外)? 研究へのリンクだけを提供するのではなく、何らかの説明を期待してください。
database-design - 生産スキーマ
プロダクションスキーマとデータウェアハウススキーマの違いを理解するのに誰か助けてもらえますか?
sql - クロス データベース ユニオン
私のウェアハウス データマート データは、同じサーバー上の 3 つのデータベースに分割されています。これは、個々のデータベースにロードされた 3 つの抽出物を含む概念実証プロジェクトです。
立方体に引っ張っている間、私は基本的にこれをやっています:
実際にデータを 1 つのテーブルに統合する必要がありますか? それによって処理が速くなりますか?
ディスク容量に問題はありません。最適なソリューションを実装したいと考えています。
どちらの場合でも、あなたが提案する方法が最適である理由を理解するのを手伝ってもらえますか?
c# - WCFを介したサイト間データ同期
Webサイトと企業アプリケーション管理を使用して分散ソリューションを開発しています。
アーキテクチャは次のとおりです。
Webサイト :
データベース(SQL Server)
Webサイト:ASP.NET MVC
データ同期サービス(WCF)
-
企業経営アプリケーション:
データベース(SQL Server)
WinFormアプリケーション
データ同期サービス(WCF)
サイト間データ同期を実行したい。
注:Corporate Management Application Databaseは、Warehouseデータストアです。
通常、私は企業側がWebサイトにデータ同期を要求することを望んでいます。
だからここにシナリオがあります:
- (Webサイト側)一部のデータが変更されました=>ローカルデータストア
- (企業側)Webサイトに変更を依頼する=>Webサイトデータストアからウェアハウスデータストアにデータを同期する
- (企業側)一部のデータが変更されました=>ウェアハウスストア=>Webサイトローカルデータストアに同期
どうすればこれを達成できますか?また、最善のアプローチは何ですか?
sql-server - データベースを分割するためのヒント
SQL Server 2005 に関する本を何冊か読みましたが、探しているものに対する適切な答えが見つかりませんでした。
問題は次のようなものです:- 顧客の注文を予約するために、一度に 5 ~ 20 人のユーザーが使用するデータベースがあります。彼らは電話で 1 日に多くの注文を受けるため、注文の発注と製品の検索、または古い注文を迅速に行う必要があります。
時間の経過とともに多くの注文が寄せられました。この注文の詳細を含む多くのテーブルがあり、このデータを使用する多くのレポートがあります。問題は、レポートが非常に遅いことです。インデックス作成は少し役に立ちましたが、期待したほどではありませんでした。
少し読んだ後、データベースを 2 つに分割してみます。1 つはオンライン トランザクション用で、もう 1 つはレポート専用です。
迅速な報告のためのデータベースの設計方法と、2 つのデータベース (1 つはオンライン トランザクション用、もう 1 つは迅速な報告用) を分離する方法を教えてくれる本やサイトを提案してくれれば、非常にありがたいです (これは迅速なレポートのためのデータ ウェアハウスの設計でしょうか?)
私の主な目標は、非常に高速なレポートを作成することです (一部のレポートは実行に 5 分かかり、データが増えると遅くなります)。私を正しい方向に向ける助けがあれば、深く感謝します。