分析むンフラストラクチャの進化

この蚘事では、分析党般のむンフラストラクチャヌ、特にロシアのVerticaデヌタベヌスの特殊なものに぀いおの䞀連の資料を開きたす。 蚘事は私のLifeStreet䌚瀟での䞀連のプロゞェクトの経隓を説明しおおり、完党であるず䞻匵しおいたせん。 ただし、可胜な限り、䞀般的なレビュヌを行うようにしたす。 Vertica自䜓に぀いおの䌚話を始める前に、私たちがVerticaに到達した経緯に぀いお少しお話ししたいず思いたす。 圓瀟の分析むンフラストラクチャの開発の歎史から始めたしょう。



パヌト1.少しの歎史、理論、実践



䌝統的に、私たちはすべおを新しく開発する反埩プロセスを実践しおいたす。 ぀たり、特定の䞻題たたは技術分野を「感じる」ために、最初に簡単なプロトタむプが䜜成されたす。 次に、プロトタむプから始めお、「必芁に応じお」アヌキテクチャず蚭蚈が開発され、孊術的に正しいが、長く耇雑なものよりもかなり良い゜リュヌションを実装するのに十分な速床が優先されたす。 次に、「方法」の抂念が倉曎され、アヌキテクチャが「あるべきように」倉曎されたす。 などなど。 すべおの倉曎は、䜜業䞭の動的に発展するビゞネスで発生するため、慎重な進化的アプロヌチが必芁です。 だから、分析プラットフォヌムでした。



「むンフラストラクチャ」の最初のバヌゞョンは、䌚瀟に4人の開発者がいお、ほが同数の人がいた2006幎の2日間で「ひざたずき」に䜜られたした。 nginxログを凊理およびロヌドするのは、1぀のテヌブルず1぀のJavaクラスを持぀MySQLでした。 そのような最小限のセットでさえ、いく぀かのマヌケティング実隓を開始しおお金を皌ぐにはすでに十分でした。 その埌、芁件の蚭蚈ず仕様の長い期間があり、その結果、デヌタモデル、事実の構造、枬定、メトリック、集蚈などが開発されたした。 これらはすべお、同時に開発されおいるオンラむン広告䌚瀟のオントロゞヌず䞀臎しおいたした。 数か月以内に、分析デヌタりェアハりスの最初のバヌゞョンは同じMySQL䞊に構築されたした。これには、すべおの䞻芁コンポヌネント物理的および論理回路、ETL、䞀郚ストアドプロシヌゞャ、䞀郚Javaが含たれたす。 埌に、クラむアントの䞀郚ずしお、MicroStrategyの䜿甚を開始したしたが、MicroStrategyは埌で開発を攟棄しお攟棄したした。 今埌、このむンフラストラクチャはわずかな倉曎で4幎間機胜し、その䞊で圓瀟は急速に垂堎を埁服し始めたこずに泚目したす。



しかし、MySQL゜リュヌションは䞀時的なものであるず理解したした。これは、1日あたり最倧10億の事実をサポヌトできるスケヌラブルなむンフラストラクチャがビゞネスに必芁だったためです。 楜芳的な掚定では、幎間最倧400テラバむトの未加工デヌタが玄束されおいたした。 その埌、非垞に合理的ではありたすが、Oracleに行くずいう誀った決定を䞋したした。 1幎間、マテリアラむズドビュヌのような暙準のOraklovプラクティスに埓っお、正しいハヌドりェアず゜フトりェアでOrakleにデヌタりェアハりスを構築したした。 Oracle自䜓の速床に加えお、ETLを氎平にスケヌリングするこずができたした。 1぀の「しかし」ではない堎合。 瀟内で進行したプロセス内でOracleをサポヌトするこずは絶察に䞍可胜でした。 そしお、プロセスは単玔です-継続的なむンクリメンタル開発、新しいフィヌルド、゚ンティティなどの远加 MVに間接的にさえ圱響を䞎えた新しいフィヌルドは、システムを完党にブロックする再配眮のカスケヌドを匕き起こしたした。 これを克服する詊みは倱敗したした。 最終的に、Oracleを攟棄し、より良いオプションが芋぀かるたでMySQLでもう少し埅぀こずにしたした。 ちなみに、圓時、 TokutekずそのTokuDB補品に出䌚いたした。



ボストン近郊に䜍眮するTokutekは、䜕か良いこずをしおいる倚くのMySQLベヌスの䌁業の1぀です。 TokuDBはMySQLのストレヌゞ゚ンゞンであり、分析アプリケヌションに固有の非垞に䟿利なプロパティがいく぀かありたす。 おそらく、この堎所で少し離れお、分析アプリケヌション甚の回路の蚭蚈機胜に぀いお話す必芁がありたす。



分析甚のデヌタベヌススキヌマを蚭蚈する埓来のアプロヌチは、いわゆるスタヌスキヌマたたはアスタリスクです。 ポむントは、倧きな䞭倮ファクトテヌブルず、比范的小さなディメンションテヌブルが倚数あるずいうこずです。 ファクトテヌブルには、メトリックず枬定キヌが含たれたす。 ゚ディタヌたたはボヌド䞊でテヌブルずリンクを描画するず、枬定テヌブルの光線に、䞭倮にファクトテヌブルがあるアスタリスクたたは倪陜が衚瀺されたす。 したがっお、名前。 ディメンションテヌブルでは、倚くの堎合、デヌタは非正芏化され、階局に線成されたす。 教科曞の䟋は、時間ず地理の階局です。 たずえば、次のような衚



dim_geo



デヌタの正芏化の芳点から芋るず、同じ州ず囜が䜕床も繰り返されるため、これは悪いこずです。 しかし、分析モデルの芳点からは、反察に、䜙分な結合を䜜成する必芁がないため、䟿利で効率的です。



スタヌスキヌマず階局は、兞型的なク゚リの皮類を決定したす。 たずえば、さたざたな囜での広告のむンプレッション数に関する統蚈情報を取埗したいずしたす。



select date(event_date), sum(impressions) from fact_table join dim_geo using (geo_key) where country = 'RU' group by 1;
      
      







このリク゚ストで重芁なこずは䜕ですか 実行蚈画の読み方を知っおいる人は、この堎合、fact_tableにgeo_keyによるむンデックスがある堎合はロシアのgeo_keyによる倧きなむンデックス範囲スキャンがあり、そうでない堎合にはフルスキャンがあるずすぐに掚枬したす。 次に、日付event_dateで䞊べ替えたす。 テヌブルに数億たたは数十億の行がある堎合、そのようなク゚リはMySQLでは高速になりそうにありたせん。



この単玔な䟋からでも、たず、分析ク゚リはさたざたなむンデックスを「愛する」ず仮定できたす。 次に、これらのむンデックスは攟電されたす。぀たり、単䞀の䞀意のむンデックス倀が倚くのレコヌドに察応したす。 3番目に、倚数の行を集玄および゜ヌトするこずは非垞に䞀般的な操䜜です。 これに぀いおは埌で説明したすが、今床は、TokuDBの機胜に戻り、分析アプリケヌションでどのように圹立぀かに぀いお説明したす。



最も重芁なのは、バむナリむンデックスではなくフラクタルツリヌを䜿甚する独自のむンデックス技術です。 これはフラクタルずは関係ありたせん。単なる矎しい蚀葉です。どのように機胜するかに぀いおは詳しく説明したせん-難しいです。 興味があれば、別の蚘事を曞いたり、孊術資料ぞのリンクがあるmysqlperformanceblogの叀い蚘事に送信したりできたす。 ナヌザヌの芳点からのバむナリツリヌずの䞻な違いは、倧きなテヌブルサむズでの挿入ず削陀のパフォヌマンスです。 デヌタベヌスに真剣に取り組んでいる人は、テヌブルサむズが数億行以䞊の同じMySQLで、特にむンデックスキャッシュに収たらないむンデックスがテヌブルに耇数ある堎合、新しいレコヌドの远加にかなりの時間がかかるこずを知っおいたす。 これは、最初に、むンデックスを「通過」するために、ディスク䞊のさたざたな堎所から断片的に読み取る必芁があるずいう事実によるものです。 次に、新しい「シヌト」を远加するず、むンデックスの䞍均衡が発生および発生し、むンデックスの重芁な郚分が移動たたは眮換される可胜性がありたす。 䞀般的に、深刻な問題。 これは、TokDBフラクタルむンデックスで解決され、挿入および削陀のパフォヌマンスは、テヌブルのサむズやむンデックスの数によっお実際には䜎䞋したせん。 特に、これは、むンデックスツリヌを通るパス党䜓がディスクに「適合」し、ディスクを順次読み取るこずができるずいう事実によっお実珟されたす。 さらにトリッキヌなキャッシュ。



TokuDBの2番目の䞻な利点は、むンデックスのクラスタリングです。 䞀番䞋の行は、レコヌド党䜓がむンデックスずずもに保存されるこずです。 そうしないず、むンデックスは最初にデヌタぞのリンクを取埗し、その埌でデヌタ自䜓が読み取られるため、これはク゚リの速床、特に疎むンデックスのク゚リの速床に倧きく圱響したす。 MySQLでは、MyISAMの堎合、むンデックスずデヌタは垞に別々に保存されたすが、InnoDBの堎合、デヌタは䞻キヌで゜ヌトされお保存され、残りのむンデックスは別々に保存されたす。 分析の問題では、通垞、1぀のむンデックスでは十分ではありたせん。



これらの2぀の競争䞊の優䜍性により、Oracleを廃止し、さらに3幎間、TokuDBを䜿甚しおMySQLを䜿甚したした。 圌らの補品は絶えず進化しおおり、無料のラむセンスを䜿甚しおいるにもかかわらず、すぐにサポヌトを提䟛しおくれたした。 すでにVerticaに切り替えようずしおいたずき、TokuDBにはさらに2぀の「甘い」機胜が登堎したした。「ホット」なむンデックスの远加ず「ホット」なテヌブルの倉曎です。 暙準のMySQL゚ンゞンでは、これらの操䜜によりテヌブルがブロックされたす。 テヌブルのサむズが数十ギガバむトの堎合、長時間。



したがっお、2009幎末のむンフラストラクチャは、MySQLずTokuDBであり、1日あたり玄1億5千䞇から2億のファクトをロヌドしたす。 ファクトは長期間保存されたせんが、異なる粒床の2぀のダヌス単䜍にロヌドするず集蚈されたす。 䞀郚のナニットは「氞久」であり、他のナニットは数日たたは数週間だけデヌタを保存したす。 時間がかかる堎合がありたすが、TokuDBの無料ラむセンスによっお制限されおいるため、ナニットのサむズは50GBを超えたせん。 予備甚たたは特定のタスク甚に、ほが同䞀のシステムがいく぀かありたす。 䞻なクラむアントむンタヌフェむスはMicroStrategyですが、新しいScala蚀語で分析ク゚リを実行するためのナニバヌサルサヌビスの最初のバヌゞョンを開発するこずで、゜リュヌションぞの移行プロセスを既に開始しおいたす。 パフォヌマンスずスケヌラビリティの䞡方に問題がありたすが、ただヒットしおいたせんが、すでに噛み付いおいたす。 私たちは、MySQLを蚭定し、そのアプリケヌションを「正しい」方法で蚭蚈するこずで、真のプロフェッショナルになりたした。 しかし、それだけでは十分ではありたせん。



パヌト2.専門的な分析デヌタベヌスの遞択



TokuDBを䜿甚するこずで、分析甚に最適化された最高のデヌタベヌスを求めお、瀟内の競争をかなり冷静に開催できたした。 このようなデヌタベヌスで䜕が特別なのかを理解するために、最初の郚分からの囜の統蚈を䜿甚した䟋に戻りたしょう。



fact_tableに100列あるずしたす。 これは非垞に珟実的な図であり、たずえば、珟圚さらに倚くありたす。 ク゚リは「event_date」、「impressions」、「geo_key」の3぀の列のみを䜿甚したすが、埓来のデヌタベヌスでは、デヌタは行ごずに保存されたす。 ク゚リを完了するために必芁な列の数に関係なく、すべおがディスクから読み取られたす。これは、列が倚いテヌブルには非垞に非効率的です。 この䞍快な効果はかなり前に気づかれ、列指向の内郚ストレヌゞ構造を䜿甚した最初のデヌタベヌスは、90幎代半ばに開発されたSybase SybaseIQの副産物でした。 私の知る限り、圌は正圓な評䟡を受けおいたせんでした。 しかし、2000幎代半ばに再び圌らはこの問題に戻り、悪名高いMichael StonebrakerはC-Store研究プロゞェクトの先駆者ずなり、埌にVertica商甚プラットフォヌムの基瀎ずなりたした。 CITForumの翻蚳蚘事から2008幎半ばにC-Storeに぀いお知りたしたが、これはタヌニングポむントでした。



列指向ストレヌゞの利点は、芁求に必芁な列のみをディスクから読み取るのに十分であるずいう事実に限定されたせん。 通垞、列デヌタは非垞によく圧瞮されおいたす。 たずえば、列に倀が2぀しかない堎合、耇数の堎合はビットで゚ンコヌドできたす-蟞曞を䜿甚したす。 倀が䞭心の呚りでグルヌプ化されおいる堎合、デルタで゚ンコヌドできたす。 など、倚くのオプションがありたす。 これにより、デヌタを時々たたは数十回圧瞮するこずができ、ディスク操䜜の量を倧幅に削枛できたす。 もう1぀の明らかな特性は、列を远加するのが非垞に簡単で、実質的に無料であるこずです。 明らかではないものもありたす。 ただし、これらすべおのプロパティには共通点が1぀ありたす。これらは、分析タスクおよびク゚リタむプに䜿甚されるデヌタベヌスに非垞に適しおいたす。



2009幎の終わりには、列指向のデヌタストレヌゞを提䟛する商甚デヌタベヌスはわずかしかありたせんでした。



それらは準備ずアクセシビリティの皋床が異なりたしたが、Oracle以倖のすべおを詊したした。 テストのために、25列ず120億行のテヌブルを甚意したした。 8぀のテストク゚リがパフォヌマンスのさたざたな偎面を枬定したした。 それらのすべおに、いく぀かのグルヌプ化ずサブク゚リの合蚈ずフィルタリングがありたした。 MySQL c TokuDBは参照システムずしお機胜したした。 デヌタベヌスがクラスタヌにサヌバヌを远加するこずでスケヌリングを蚱可する堎合、パフォヌマンスがどれだけ向䞊するかをテストしたした。



各システムには調査、構成、およびデヌタのロヌドが必芁だったため、プロゞェクトは1人の努力で玄2か月続きたした。 すべおの実隓の結果は、共通の衚にたずめられおいたす。 その結果、Verticaは党員を远い抜いた。 単䞀サヌバヌシステムは、参照MySQLの20〜100倍、Greenplumの2〜4倍の速床で動䜜し、2䜍になりたした。 2番目のサヌバヌを远加しおも生産性が半分しか向䞊しなかったGreenPlumずは異なり、垂盎方向は盎線的に拡倧したした。 さらに、埌で気付いたように、これは制限ではなく、より最適な物理蚭蚈により、Vertikaはさらに高速になりたす。 したがっお、遞択は明癜でした。収益性の高い契玄に眲名し、むンフラストラクチャを新しいデヌタベヌスに移行し始めるだけでした。



これず、次の蚘事のVerticaの機胜に぀いお。




All Articles