Webフォーム上のデータベースから3億5000万行を表示する方法

この記事のタイトルは、顧客が要求した内容の簡単な要約です。 当時私は休暇中だったので、私のマネージャーは詳細に立ち入ることなく、実装に青信号を出しました。 よく休んで仕事に行くと、ある有名な漫画で霧の中に落ちたハリネズミの靴に身を感じました。 そして状況は、エメラルドシティの魔法使いを要求しました。



だから、順番にすべて:



ステージング



顧客は問題のある債務を処理する部門でした。 彼らが必要とする問題をうまく解決するために

  1. 問題のあるローンの履歴を追跡します。延滞が発生した時期と返済状況を確認します。 また、遅れて行った借り手が他のローンを持っているかどうかを確認してください。
  2. ローンポートフォリオに関する情報を受け取り、任意の期間のポートフォリオの傾向と変化を追跡します。
  3. 「ローン発行日」、「発行地域」、「期限切れローン」などの集計された指標から「失敗」する能力 ローン契約そのものに直接。
  4. 信用管理者の仕事を追跡します。彼らがどのくらい成功した融資を提供するかを確認します。


顧客はソリューションをWebフォームの形で必ず見ました。これは、部門がメインの部門であり、その部門が広大な国の異なる都市にあり、すべての従業員がアクセス権で区別された同じ絵を見るべきだったという事実によるものです。

このタスクは、ローンポートフォリオの毎日のレビューが過去3か月間のみ必要であったという事実により、わずかに促進されました。 後の情報は、過去1か月の最初の日にあるはずです。

この条件に加えて、別の問題がありました。ローンとは、クレジットカードを含むすべての種類の貸付を意味すると理解されていました。



解決策



実装時には、Oracleデータベース上にレポジトリがあり、カードとローンに関するすべての情報が運用ソースからの形式で保存されていました。 情報は1日遅れで受信されました。 平均して、毎日300万の新しいエントリが表示され、その一部はカードの一部であるローンでした。

この問題を解決するために、次のアルゴリズムが選択されました。

  1. ローンとカードを組み合わせたデータショーケースが作成されました。 ショーケースは「スター」スキームに従って構築されました。
  2. 毎日、タスクスケジューラの助けを借りて、昨日それを「注いだ」。
  3. ボールは、集計を計算するためのOLAPキューブを作成しました。
  4. ショーケースの更新の最後に、OLAPキューブの更新が開始されました。
  5. OLAPは、OLAPビューアーを介してWebフォームにデータを送信しました。


アルゴリズムの実装に加えて、このシステムの動作を無効にする可能性のあるすべてのリスクと障害を最小化または排除する必要がありました。



準備作業:



  1. ローンとカードを組み合わせるためのウィンドウに共通のキーが作成され、クレジットとカードの両方が一意に識別されました。 キーはテーブルに保存され、その各行はクレジットまたはカードを一意に識別しました。
  2. 毎日の塗りつぶしに、昨日の日付だけでなく、昨日から始まる過去の任意の期間のすべてのデータの操作テーブルの変更を追跡するメカニズムが追加されました。 これは、昨日のデータベースに変更またはエラーが発生した場合に行われました。 ローンとカードに関する情報がデータベースに一定の遅延を持って存在する状況が発生し、それに対処する必要がありました。 昨日から最後の15日間を確認しました。
  3. キューブは、Webアプリケーションの機能用に作成されました。 合計約300万のローンとカードがあり、それらを一度にブラウザに表示することは非常に困難または不可能でした。 この問題を解決するために、管理者によって発行された開始日、参照領域などによるローンとカードの標準的な分離に加えて 追加の寸法が発明されました。 記載されているケースでは、ローンのグラデーションは、金額、遅延の量、遅延の日数、記号によって追加されました-遅延に少なくとも1回存在していました。 また、ローンの開始日と終了日に従って、年-四半期-月-日タイプの階層が構築されました。 その結果、すべてのローンがグループ化され、そのうち最大のものは10,000行以下でした。 顧客は遅延にのみ関心があったため、期限内に返済されたローンについては、追加の測定値は発明されませんでした。 それらへのアクセスはViewerによって制限されており、いつでも開くことができます。 現在のバージョンでは、ユーザーは標準測定によって集計された情報のみを表示していました。 しかし、これらのローンのいくつかはまだ見ることができました-これらは債務者のローンであり、1つのローンだけが期限切れでしたが、いくつかは引き取られました。
  4. キューブの更新は、ウィンドウが更新された直後に開始されるはずでした。 このために、Oracleタスクスケジューラのステータスをチェックするサービスが作成されました。 彼のためにユーティリティも作成され、その助けにより、キューブの更新を緊急に開始/中断したり、現在のステータスを監視したりすることができました。
  5. 必要な機能、通常の外観、設定の柔軟性をすべて提供できるOLAPビューアーを見つける必要がありました。 このタスクは簡単ではありませんでした。 それらの多くはあまりユーザーフレンドリーではなく、それらを操作することはあまり便利ではありません。 見つかったものでさえ、私は苦しめなければなりませんでした。


実装自体は、その時点で所有していた知識と技術、および会社のソフトウェアポリシーに基づいていました。 したがって、実装で突然、子猫の形をしたボールを膨らませたように思える場合は、すべてが私に依存しているわけではなく、寛大であることをお願いします。



実装:



システムは、Windows Server 2008 64ビット、IIS上のWebフォーム、ASP.NETテクノロジに展開されました。

  1. データショーケース-Oracle Database
  2. タスクスケジューラ-Oracleデータベース
  3. OLAPキューブ-Microsoft Analysis Services
  4. キューブのストアフロント更新の追跡と更新の起動-Windowsサービス
  5. OLAPビューアー-DevExpres AspxPivotGrid


このシステムの開発に適用された技術的な微妙さとトリックについて少し。



技術的なコツ:







重要なことについて!



この記事では、利用可能な既存のテクノロジーを使用して、大量のデータに関連する問題を解決する方法を示したいと思いました。 OLAPを実装する前に、私のリーダーシップは、「黄金の弾丸」を探して、大手メーカーと中小企業の両方からの多数の箱入りソリューションを検討しました。 多くの場合、すぐに使用できるソリューションのサポートには多大な労力と費用が必要であることを確認しました。 場合によっては、箱入り製品は、そのアーキテクチャのために、望んでいたことを実行できませんでした。 おそらく、私が働いている会社は適切な場所を探していなかったので、そのような「黄金の」または少なくとも「銀の」弾丸があります。 しかし、何でしたか。 一方、この記事は、誰かが追加の集約テーブル、いくつかの複雑なアーキテクチャ、および巨大なサイトを構築するという形で「自転車」を発明するのを止めるかもしれません。

しかし、これほど多くの人がどれだけ多くの意見を持っているのか、このスコアでは、ボールペンの発明の架空の物語が好きです:



NASAは無重力で書くことができるペンを発明するために数百万ドルを費やしました。

ロシア人は単に鉛筆で書いた。



しかし、今どこに鉛筆があり、どこにペンがあります。 したがって、非常に複雑で扱いにくいソリューションであっても、単純なソリューションと同じように、ユーザーを見つけることができます。

上に書いたすべてを読むことができたすべての人に感謝します!




All Articles