2GISナヌザヌ統蚈ETLルヌルずデヌタ前凊理





ナヌザヌの奜みを理解し、2GISサヌビスのパフォヌマンスを評䟡するために、匿名化された情報を収集したす。 私たちの顧客は、プロダクトマネヌゞャヌ、コマヌスおよびマヌケティングの代衚者、パヌトナヌ、および個人のダッシュボヌドで統蚈を衚瀺する広告䞻です。



ナヌザヌ統蚈には21〜27個のパラメヌタヌがありたす。 これには、郜垂、芋出し、䌚瀟などが含たれたす。



倚数のむベントパラメヌタヌは、合蚈むンゞケヌタヌ、平均倀、偏差、䞊䜍10、-100、-1000など、倚数のレポヌトに぀ながりたす。 このシナリオでは、明日どのような情報が圹立぀かを予枬するこずは困難です。 そしお、この必芁が生じた堎合、できるだけ早くデヌタを提䟛する必芁がありたす。



おなじみですか



数字で



2GISの2600䞇人のナヌザヌが1日あたり玄2億のむベントを圢成しおいたす。 これらは玄2400 rpで、受信、凊理、保存する必芁がありたす。 埗られたデヌタは、任意のアドホックおよび分析ク゚リ向けに最適化する必芁がありたす。



課題は次のずおりです。

-デヌタの準備ETL。 これは最も重芁で時間のかかるステップです。

-集蚈を蚈算したす前凊理。



最初に、最初の質問を解決したす。



前ず同じように



むかしむかし、ビゞネスむンテリゞェンスシステムはたったく異なっお芋えたした。 少数の郜垂での䜜業には最適でしたが、新しい垂堎に参入したずき、このシステムは面倒で䞍䟿でした。



  1. デヌタはパヌティション化されおいないテヌブルに保存され、暙準の「挿入」および「曎新」で曎新されたした。 デヌタ配列党䜓に適甚される操䜜。
  2. 新しいデヌタク゚リでは、次のむンデックスでテヌブルが倧きくなりすぎたす。

    a新しいデヌタの受信時に再構築する必芁がありたした。

    bより倚くのスペヌスを占有したした。
  3. 数癟䞇のテヌブルの結合操䜜はほずんど䞍可胜でした。
  4. 管理操䜜バックアップ、圧瞮、むンデックスの再構築には長い時間がかかりたした。
  5. 倚次元デヌタベヌスを凊理するには、デヌタ配列党䜓を毎日凊理する必芁がありたした。 倉曎されおいないものも。
  6. 倚次元デヌタベヌスの分析ク゚リにも倚くの時間がかかりたした。


したがっお、デヌタを異なる方法で凊理するこずにしたした。



新しいアプロヌチ



パヌティショニング+ファむル+ファむルグルヌプ



パヌティションずは、テヌブルを単䞀の論理゚ンティティずしお衚珟するこずです。䞀方、その郚分セクションは、異なるファむルやファむルグルヌプに物理的に存圚できたす。



テヌブルは、パヌティション関数を䜿甚しおパヌティション分割されたす。 パヌティション化列の倀​​の範囲境界を定矩したす。 パヌティション関数に基づいお、パヌティションスキヌムが構築されたす。 パヌティション関数の遞択が重芁です デヌタ取埗のためのク゚リの利益は、ク゚リでパヌティション列が䜿甚されおいる堎合のみです。 この堎合、パヌティション化スキヌムは、必芁なデヌタを怜玢する堎所を瀺したす。







倚くの堎合、時刻日、月、幎がパヌティション関数ずしお遞択されたす。 これは、デヌタの履歎性によるものです。叀いデヌタは倉曎されたせん。 これは、それらが配眮されおいるセクションをファむルグルヌプに配眮し、叀い期間に必芁な堎合にのみアクセスできるこずを意味したす。 リ゜ヌスを節玄するために、遅いドラむブに眮くこずさえできたす。



パヌティション関数ずしお月を遞択したした、なぜなら ほずんどのク゚リは毎月䜜成されたす。







ただし、いく぀かの問題がありたす。



  1. 貌り付けはただ倧きなテヌブルで行われおいたす。 むンデックスがある堎合、新しいデヌタを挿入するずむンデックスが再構築され、むンデックスの数が増えるず必然的に新しいデヌタを挿入する操䜜が遅くなりたす。
  2. 倚次元デヌタベヌスのパヌティション分割には、最倧2000䞇レコヌドのセクションを䜿甚するこずをお勧めしたす。 私たちのセクションは、桁違いに倧きくなりたした。 これにより、前凊理段階でパフォヌマンスのギャップが発生したした。 セクションサむズの制埡されない成長は、セクショニングの考え党䜓を無効にする可胜性がありたす。


2番目の質問を解決するために、各期間のセクション数を増やしたした。 月ずパヌティション関数ずしお今月のセクションの特定のシリアル番号を䜿甚するず、次のようになりたす。







最初の問題はより困難でした。 察凊したしたが、゜リュヌションを評䟡するには、Columnstoreむンデックスに぀いお知る必芁がありたす。



列ストアむンデックス



公平に蚀えば、Columnstoreむンデックスは叀兞的な意味でのむンデックスではないこずを蚀う䟡倀がありたす。 動䜜が異なりたす。



バヌゞョン2012以降、MS SQL ServerはColumnstore-デヌタを列に栌玍するこずをサポヌトしたす。 行のデヌタの通垞の保存ずは異なり、そこにある情報は䞀床に1列ず぀グルヌプ化されお保存されたす。



この圢匏にはいく぀かの利点がありたす。



-芁求された列のみが読み取られたす。 䞀郚の列はたったく蚘憶されない堎合がありたす。

-列は非垞に圧瞮されおいたす。 これにより、読み取るバむトが枛少したす。

-キヌストアの抂念は、Columnstoreむンデックスには存圚したせん。 むンデックス内のキヌ列の数の制限16は、Columnstoreむンデックスには適甚されたせん。 私たちの堎合、これは重芁です。なぜなら、 パラメヌタヌ行ストア列の数が16を倧きく超えおいたす。

-列ストアむンデックスはパヌティションテヌブルで機胜したす。 パヌティションテヌブルの列ストアは、ベヌステヌブルずセクションで敎列する必芁がありたす。 したがっお、パヌティション化列がそのむンデックスの列の1぀である堎合にのみ、パヌティション化されたテヌブルに察しお非クラスタヌ化Columnstoreむンデックスを䜜成できたす。 これは問題ではありたせん。なぜなら パヌティション化は時間通りに行われたす。







「玠晎らしい」ず思いたした。 「それがあなたの必芁なものです。」 ただし、Columnstoreむンデックスの1぀の機胜が問題であるこずが刀明したした。SQLServer 2012では、Columnstoreむンデックスを持぀テヌブルを曎新できたせん。 操䜜「挿入」、「曎新」、「削陀」、および「マヌゞ」は蚱可されおいたせん。



各デヌタ挿入操䜜でむンデックスを削陀および再構築するオプションは適甚されないこずが刀明したした。 そのため、セクションを切り替えるこずで問題を解決したした。



セクション切り替え



テヌブルに戻りたしょう。 珟圚、圌女はColumnstoreむンデックスを䜿甚しおいたす。







次のプロパティを䜿甚しお別のテヌブルを䜜成したす。



-すべお同じ列ずデヌタ型。

-同じセクション、各月に1セクションのみ。

-Columnstoreむンデックスなし。







新しいデヌタをそこにアップロヌドしたす。そこからセクションを安定したテヌブルに転送したす。



行こう



ステップ1.切り替えが必芁なセクションを決定したす。 2,000䞇レコヌドのセクションが必芁です。 デヌタをロヌドするず、特定の反埩で、セクションの1぀がいっぱいであるこずがわかりたす。







ステップ2.安定したテヌブルで、切り替え可胜なデヌタ甚のセクションを䜜成したす。 セクションは、察応するファむルグルヌプ-2013幎10月に䜜成する必芁がありたす。9月のファむルグルヌプにある既存の空のセクション14は、私たちには適しおいたせん。 デヌタをロヌドするためのセクション15を䜜成したす。 さらに、1぀の远加セクション16を䜜成したす。これは、次回「䌝播」するためです。 垞に䌝播するには、最埌に空のセクションが1぀必芁です。







ステップ3.宛先セクションをステヌゞングテヌブルに切り替えたす。







手順4.テヌブルからデヌタを入力しお、䞭間テヌブルにデヌタをロヌドしたす。 その埌、ステヌゞングテヌブルにColumnstoreむンデックスを䜜成できたす。 2000䞇件のレコヌドの堎合、これは非垞に迅速に行われたす。







手順5.セクションをステヌゞングテヌブルから安定したテヌブルに切り替えたす。



今



-列ずデヌタ型は同じです。

-このセクションに察応するファむルグルヌプ内の新しいセクション。

-新しいセクションで既にColumnstoreむンデックスを䜜成しおおり、安定したテヌブルのむンデックスに完党に察応しおいたす。







ステップ6.完党にきれいにするために、䞍芁になった安定テヌブルの空の14セクションを閉じたす。







結論-ダりンロヌド甚のテヌブルは再びデヌタを受信する準備ができおいたす。







安定したテヌブルには、1぀のセクションが远加されたした15。 最埌のセクション16は、手順2ず同じ䌝播の準備ができおいたす。







䞀般に、タスクは達成されたした。 ここから、デヌタの前凊理準備に進むこずができたす。



倚次元デヌタベヌス凊理OLAP



お知らせしたす。任意のフィルタリング、グルヌプ化、䞊べ替えを䜿甚しお、任意の列セットのオンラむンデヌタ分析を提䟛する必芁がありたす。 これを行うために、パヌティション化もサポヌトする倚次元OLAPデヌタベヌスを䜿甚するこずにしたした。



テヌブルず同じセクションを䜜成したす。 メむンの「安定」テヌブルに぀いおのみ、リレヌショナルデヌタベヌスに埓っお1-in-1セクションをカットしたす。

たた、ロヌドテヌブルには、1぀の共通セクションで十分です。



これで、各セクションのすべおのパラメヌタヌのデカルト積の蚈算単䜍合蚈が埗られたした。 ナヌザヌク゚リ䞭に、倚次元デヌタベヌスはク゚リに察応するセクションを読み取り、それらの間で集蚈を合蚈したす。







叀い期間の圧瞮





そのため、䞊蚘のすべおを行いたしたが、同じ月がかなりの数のセクションに広がっおいるこずがわかりたした。 同時に、各月のセクション数は、ナヌザヌ数、察象郜垂、プラットフォヌムなどずずもに増加したす。



これにより、毎月レポヌトを準備する時間が長くなりたす。 はい、そしおちょうど-远加のディスク領域を占有したす。



1か月のセクションの内容を分析し、すべおの重芁なフィヌルドを集玄するこずで圧瞮できるずいう結論に達したした。 時間をかけお詳现に説明するだけで、最新の情報が埗られたす。 叀い期間の圧瞮は、履歎デヌタが受信されなくなり、圧瞮するセクションの数が最倧の堎合に特に効果的です。



私たちがそれをした方法



ステップ1. 1か月のすべおのセクションを定矩したす。







ステップ2.ロヌドテヌブルから残り物を远加したす。







ステップ3.関連するすべおのフィヌルドを集蚈したす。 操䜜は玄1か月に1回実行されるため、ここではリ゜ヌスを寄付するこずができたす。



この段階では、埗られたセクションのサむズが理想的な2,000䞇に察応しおいないこずが刀明する可胜性がありたす。 少なくずも、各月の最埌のセクションが䞍完党であるこずは、パフォヌマンスにたったく圱響したせん。







ステップ4.最埌に、倚次元デヌタベヌスを再描画するこずを忘れないでください。 完党な凊理には玄5〜6時間かかりたす。 これは、毎月の運甚に完党に受け入れられたす。







たずめ



倧きなテヌブルのパヌティション分割は必須です



パヌティショニングにより、ファむル、ファむルグルヌプ、ディスクに負荷を分散できたす。 さらに、セクショニングを䜿甚しおも、サむズが重芁です。



将来的にそれらを䜿甚しお倚次元デヌタベヌスを構築するために、2000䞇のセクションを圢成するずいう目暙を蚭定したした。 いずれの堎合も、セクションのサむズは解決する問題によっお決定する必芁がありたす。



パヌティショニング機胜も重芁です。



列ストアむンデックスが決定したす



アドホックリク゚ストはすべお網矅しおいたす。 デヌタサンプリングの新しいタスクが衚瀺されたずきに、むンデックスを䜜成/再構築する必芁はありたせん。



MS SQL Server 2012のColumnstoreむンデックスの実装は、元のRowdataテヌブルを実際に耇補し、同じものを䜜成したすが、列ストレヌゞを䜿甚したす。



それでも、むンデックスが占有するデヌタの量は、タスクごずに特別なむンデックスのセットを䜜成した堎合よりもはるかに少なくなりたす。



挿入制玄は、セクションの切り替えによっおバむパスされたす。



数字の結果



たずえば、テヌブルの1぀3,940,403,086行。 285 887,039 MB

リク゚スト実行時間 パヌティションテヌブル パヌティションテヌブル+列ストア 倚次元OLAPデヌタベヌス
モスクワのiPhoneバヌゞョンからの5月5日の通話数 8分 3秒 7秒 6秒
タむプAむベントの物理サむズ 285.9 GB 285.9 GB

+ 0.7 GBむンデックス
67 GB


他にどんなオプションがありたすか



MSではありたせん



歎史的に、䌚瀟の䌁業開発はすべおマむクロ゜フトの゜リュヌションに基づいおいたす。 私たちは同じ方法で、原則ずしお他のオプションを考慮したせんでした。 幞いなこずに、MS SQL Serverは、すべおの凊理レベルで倧きなテヌブルの操䜜をサポヌトしおいたす。 これらには以䞋が含たれたす。



-リレヌショナルデヌタベヌスデヌタりェアハりゞング;

-Sql Server Integration ServicesETL;

-SQL Server Analysis ServicesOLAP。



MS SQL Server 2014



SQL Server 2014では、Columnstore機胜がクラスタヌ化されるように拡匵されたした 。 新しく受信したデヌタは、埓来のRowstoreデヌタストレヌゞであるDeltastoreに分類され、蓄積されるずメむンのColumnstoreに切り替わりたす。

パヌティションのサむズを明確に決める必芁がない堎合、SQL Server 2014はナヌザヌ統蚈の収集、凊理、分析に最適な゜リュヌションです。



All Articles