「準リアルタイムデータウェアハウス」デザイン

         位置の現在の数がおおよそオフラインおよびリアルタイム倉庫いくつかの位置の数に分割されます。通常、オフラインデータウェアハウスETL Tの数+実施例1;リアルタイムデータは、典型的には、ETLレベル分以内プログラムまたはそれ以下の時間をカートリッジ。ビンの実際の数は、一般カフカ、リアルタイムのETLへのリアルタイム抽出の他の形態により、上流のデータサービスデータベースのbinlogです。しかし、現在主流のリアルタイムデータは、1つの後続の、標準位置の実数、リアルタイム計算を介してすべてのETLプロセスやカフカへのデータバイナリログから抽出されるようなスパークFLINK、床、ある2つの位置に細分されます全てカフカETLが連結カフカの形で書かれて、読み込ま計算され、完全の定義を満たすビンの数は、バイナリログに限定ETL層に還元簡略化されるリアルタイム・データ・ウェアハウスのカテゴリ、接地ありますカフカ後、メトリックを算出した後、リード又はFLINKカフカのSpark外部メモリはもちろん、またはドルイド麒麟指標算出することによって達成され、リンク先の分析と同様のHBase。

         そして、「準リアルタイムデータウェアハウス」それはどのような種類のプログラムのでしょうか?

         実際には、「準リアルタイムデータウェアハウスは、」半分の時間または時間レベルにまで低減簡単なアップグレード、それをオフライン、日レベルのETLプロセスの位置のオフライン数であるが、同時に外部のリアルタイムデータのクエリODS層を提供しています。比較的単純な演算周波数の数を短縮するビンオフは、毎時または半時間単位抽出データの正確ODS層、ETLプロセスとそれに続くオフラインビン番号にMERGEあります。

         シナリオの使用は何である「外国ODS層は、リアルタイムデータのクエリを提供して」?

         インターネット企業は、一般的にMySQLのデータベース事業は、大量のデータの場合は、サブライブラリーのサブテーブルとなり、各事業データベースのMySQLインスタンスごとに異なるがあるでしょう。あなたは、その後、クロス積のクエリデータ、それは非常に面倒になり、製品全体のクエリデータにしたい場合は?カスタマーサービスシステム。利用者の情報が異なるMySQLインスタンス、異なるライブラリ、異なるテーブル、クエリで配布されている場合、各製品のシャーディングフィールドが異なるアルゴリズムであれば、顧客サービスシステムは、一般的に、それは、シャーディング-JDBCが参加する、ユーザーに関するすべての情報を確認することができます異なる、クエリは確かに非常に遅く、複雑になります。この時点では、ODS層の位置の数は、この仕事に適している一方で、1にこのデータを要約するためのデータベースを持っている必要があります。

         ; 2)リアルタイムクエリインターフェースを提供する1つのデルタ)データ抽出及び増分MERGE:「準リアルタイムデータウェアハウス」二つの特徴は、二つの技術的困難を伴います。これら二つのため、以下の技術的な問題が解決策を、対応する導入されました。

         インクリメンタルデータの抽出およびMERGE。

         実際には、増分抽出は非常に簡単です、それはデータの増分抽出に基づくフィールドで、これは成長分野のIDや更新時刻からのものであってもよいです。二人は何異なっていますか?

         IDデータは、一般的に単に追加され、更新されていないテーブルに従って抽出することができます。これは、全体のIDができるから次のスタート抽出、最大レコードIDが最後の時間を抽出していないだけでしょうか?もちろんありません。

         次のシナリオがあります。USER_LOGIN_HISTORYテーブルがAUTO_INCREMENTタイプであるなどの10個のパーツテーブル、IDがインクリメントされ、それぞれUSER_LOGIN_HISTORY_0〜USER_LOGIN_HISTORY_9を有しています。しかし、そのような1/2/3など3つの値が、割り当てられた3つの並行トランザクションIDが存在する場合。3つの同時トランザクションの場合は、再び3つの同時トランザクションを提出していない。しかし、彼らのIDは4/5/6でなければなりません。トランザクション・バック3は、提出した場合、事前に、ポンプデータの間の時間増分は、電流IDの最大値は、一度に、非常に残念ながら,, 6とき1/2/3の増分抽出データ、IDデータを抽出することは付属していません。そして、これらの3つのトランザクションのデータは、もはや描かれていないが、上に来ます!次回抽出するので、最大のIDは6、7は、抽出から開始する必要があります!

         この時点で、重複するデータがあるが、それは、最後の抽出データ抽出IDの最小値から開始する必要があり、それは、抽出されたデータが失われないことを保証することができます。現在のバッチが3である場合には、抽出は、最小バッチ1識別データ抽出から開始すべきれます。これはなぜでしょうか?下記を参照してください。

 

 

         Batch1 / BATCH2 / batch3抽出、MySQLのテーブルは、現在の最大のID 1001/2001/4002あります。ときBATCH2抽出2001にデータ1001を抽出しなければならないが、残念ながらそれはまだ1999年まで、1990年にこの範囲データ10のIDを提出していない、それは抽出時に欠場します。Batch3を抽出する際どこ我々はそれを抽出し始める必要がありますか?1001,1990、または2001?

         それだけで1990〜1999のデータが欠落しているので、理想的には、1990年の初めから抽出されなければなりません。しかし、どのようにそれが欠けているもののデータを判断するには?答えは知られていません。あなたは、トランザクションがコミットされていないポンプの番号がわからないので。1001年には最初から引き出されるべきであることは明らかです。実際には、すべての時間は、取引の影響を避けるために、2回分のデータを抽出するだけです。特定のその2つのバッチそれについては?実際に、ここでは、トランザクションは、各バッチのインターバル時間の最大持続時間未満であると仮定すると、実際には二つのバッチに設定されています。ほぼリアルタイムの倉庫のために、各バッチは、一般的に時間又は半時間二つのバッチが十分にあるので、トランザクションの最大持続時間よりも大きくなります。バッチは小さな時間間隔がある場合は、その長いライン上のいくつかのバッチよりも前方より押しました。

         インクリメンタルデータ抽出後、MERGE比較的単純な、実際には、FULLがオンラインに勝つために増分データテーブルとODS全体の規模、増分データを結合すること。しかし、また、検討する必要がありFULLがライン上に登録しようように、テーブル・ビジネス・データベースが物理的に削除できるようにするかどうかで、例えば、我々は、物理的に削除することはできません。物理的にはより多くのトラブルを削除し、増分抽出が削除されたデータを見つけることができません!どのようにそれを行うには?その後、総規模がきれい十分にそれをODS、サービスデータベースが別のテーブルに抽出したデータを削除BINLOG使用することができます。

         上記スキームに類似するが、1つの警告と更新データ抽出に記載の方法。抽出された場合、最低限の時間の限界ではなく、最大を制限します。たとえば、ときバッチ抽出、現在の時刻は次のとおりです。現在の時刻はまだ数ミリ秒または数秒の違いがあり、実際の抽出から計算されるので、「2019年2月22日18:00で、00.153」、その後、更新されたデータは、かもしれない間、たびに、データがこの間隔オフ内で更新することができるので、彼らは、失われました!

         リアルタイムクエリインターフェイス。

         リアルタイムクロス積、クロスデータベース、クロステーブルのクエリシステムはバックオフィスシステムでは、一般的に、これらのシステムの特徴は、マルチクエリデータソース、データのクエリ結果の少量です。クエリは、一般的に、1つまたはユーザデータの一部です。これは、シャーディング-JDBCやElasticSearch全文検索することによって達成することができます。、それに書かれたSQLが問題かもしれないが、単純に実装するためには、configureシャーディング規則が-JDBCをシャーディング。

完璧なSQL ESインターフェイスがないためElasticSearch全文は、より多くのトラブルを検索し、それだけで順番にマルチテーブルリアルタイム準要約の問題を含んで良い最初に必要なデータの収集、することができます。データは、他の2つのテーブルにはないテーブルは、ストレージに置くことができない場合は、上流の3つのテーブル、彼らとリアルタイムの要約で異なる条件との関連付けを含むクエリ結果を仮定し、最初のキャッシュデータすべてのデータを再度要約を到着したときに、難易度の実装は非常に大きいです。

         もちろん、あなたはまた、特定のMySQLデータベースクエリに描かれた、すべてのビジネスライブラリを必要とすることができます。場合は、大量のデータは、このプログラムは非常に悪いとなります。

         それは何より良い計画ですか?私たちは、フェニックスのJDBCインタフェースによって、バイナリログによりフォアグラウンド業務システムのリアルタイムクエリをリアルタイムフェニックスを抽出するために、論理テーブルに(サブサブライブラリーの統合の表の後に表)のデータを置くことができます。フェニックスインデックスのサポートとして、我々は、MySQLのように、当然のSQLの最適化が必要になることがあり、フェニックスのようなクエリを使用することができます。

         フェニックスHBaseのベース下地が作られているので、あなたは、膨大な量のデータを運ぶことができる読み書き、およびフェニックスHIVEオフラインクエリをマッピングすることができます。オフラインリアルタイムクエリと分析が統一を必要と置く我々はそう!そして、このプログラムは、任意の問題があるのでしょうか?考慮すべきことの一つは、次のとおりです。どのようにそれをリアルタイムで抽出の精度を確保するために?ログはどのようにそれを行うに不足している場合は、他の言葉では、アップデート中にフェニックスにBINLOG?

         明らかにあなたはフェニックスに追加されたデータの増分抽出を、使用することができます。上記の増分抽出によると、補数ロジックは、それがすべての権利ではないでしょうか?

         しかし、それは問題では、問題は依然として問題で、まだですが、これは問題のトランザクション補完するものです。より多くの時間がかかり、長い時間のために、3分を想定し、時間のこの時期ですので、インクリメンタルデータは、一般的に大きく、リアルタイムの更新されたデータは、それが上書きされますか?もちろん、我々はなります。補数が最大の時である方主キー私自身、同じデータを更新するかを決定するとき、今ではカバーされます。フェニックスは、増分データが最新であるかを決定するためにデフォルトの情勢、によってオンにされていないので、これは、問題があるが、フェニックスへの更新は、増分データは、必ずしも最新でない時間差ので、リアルタイムにデータが入力されました。

         そして、この問題を解決することができるはずオープン、フェニックスのトランザクション聖歌を開くが、フェニックスのトランザクション機構やベータ版が、それはまた、パフォーマンスの問題やデッドロックの問題が発生することがあります。

         リアルタイムデータと増分データ隠蔽互いにオフという問題を解決するには?その後、両方の世界の何の最高はありませんか?

         おなじみのHBaseの学生は、タイムスタンプのHBaseのコンセプトを知っているし、タイムスタンプにより、クエリの複数のバージョンをサポートしている必要があります。フェニックスは、HBaseの通って挿入され、タイムスタンプ列は、同じIDが挿入されたとき、タイムスタンプは、最新のデータクエリにのみクエリを増加しているある現在の時間、すべてのリージョンサーバーです。上記の問題を行うには、この何それ?

         我々は、更新時刻データはフェニックスは、HBaseのテーブルの基礎となるタイムスタンプにマッピングされている場合は、その問題の業務に最適なソリューションではないのですか?非常に単純な、HBaseのタイムスタンプ、リアルタイムデータとインクリメンタルデータへの更新地図データを、単純に、最新のデータフェニックス問い合わせを確認し、フェニックスのように挿入!

         しかし、理想的には、フェニックスは、現在、さまざまなフィールドがHBaseのタイムスタンプにマッピングされているサポートされていない、現実は残酷で、完璧です!

まさか、唯一のソースコードを自分で変更することはできません。ソースコードを変更することによって、フェニックス、我々はフェニックスをサポートし、この特殊なフィールドタイプをROW_TSタイムスタンプのこの型の値はHBaseの書き込まれたデータは、フェニックスに挿入されたとき、あなたは自由にタイムスタンプを指定することができます!ここでは、変換後の結果であるが、それは予想通りで、それをクリアしています。

 

 

これまでのところ、「準リアルタイムデータウェアハウス」アプローチを簡単にまとめたもの以下のアーキテクチャ図を通じて、オーバー紹介します。

 

 

1)フェニックスDebezium(または運河によって書かれたMySQLのバイナリログ)の上流、及びリアルタイム水路。新しいフィールドを追加する場合は、リアルタイムのフェニックスは、テーブル構造を変更します

2)データ更新時、増分データ抽出MySQLの時間、MERGEフェニックスの部分データのバッチ

3)自動的に外部テーブルハイブフェニックステーブル日作成する(表は、HBaseのハイブテーブルの下にあるフェニックスの外部に作成されてもよい)、後続のETLプロセス。

JDBC経由4)リアルタイムクエリフェニックスインターネット接続、リアルタイムクエリ内のマスターキーまたはインデックスデータに基づいて

 

おすすめ

転載: www.cnblogs.com/gabry/p/10422046.html