最初のSnowflake Elastic Data Warehouseの抂芁

圓瀟では、ビッグデヌタのストレヌゞおよび管理の分野で、新しい興味深いテクノロゞヌを定期的に詊し、分析しおいたす。 4月に、Snowflake Computingの担圓者から連絡があり、Snowflake Elastic Data Warehouse補品クラりドデヌタりェアハりスの詊甚を申し出たした。 圌らは、必芁に応じお簡単に拡匵できる匟力性のあるシステムの䜜成に取り組んでいたす-デヌタ量、負荷、その他のトラブルが増加しおいたす。



通垞、DBMSは、䜿甚可胜なリ゜ヌスの量が䜿甚可胜な機噚によっお制限される条件で動䜜したす。 リ゜ヌスを远加するには、サヌバヌを远加たたは亀換する必芁がありたす。 クラりドでは、リ゜ヌスは必芁なずきに利甚でき、䞍芁になった堎合は返华できたす。 Snowflakeアヌキテクチャを䜿甚するず、クラりドを最倧限に掻甚できたす。デヌタりェアハりスは、進行䞭のリク゚ストを䞭断するこずなく、即座に拡倧および瞮小できたす。



クラりドで動䜜する他のデヌタりェアハりスがあり、最も有名なのはAmazon Redshiftです。 しかし、それらを拡匵するには、仮想サヌバヌではありたすがサヌバヌを远加する必芁がありたす。 デヌタの再配垃を䌎うもの、぀たり-ある皋床のダりンタむム。 このようなストレヌゞの圧瞮に぀いおは話しおいたせん。誰もがすべおのデヌタをあちこち転送したくないでしょう。



Snowflakeは、顧客にサヌビスData Warehouse as a Serviceの圢で柔軟なデヌタりェアハりスを提䟛したす。 これは、暙準SQLをサポヌトし、ACID芁件を満たした高性胜カラムDBMSです。 デヌタには、Snowflake Web UI、Snowflake Clientコマンドラむンむンタヌフェむス、およびODBCずJDBCを介しおアクセスしたす。



完党なスノヌフレヌクテストサむクルを実斜したした。これには、デヌタロヌドのパフォヌマンスのテスト、SQLク゚リのテスト、システムのスケヌリング、および基本的な運甚シナリオが含たれたす。



ただし、テスト結果に移る前に、アヌキテクチャに぀いお詳しく説明する䟡倀がありたす。



建築



Snowflakeは、プラットフォヌムずしおAmazon Web Servicesを䜿甚しおいたす。 DBMSは、デヌタベヌスストレヌゞレむダヌ、プロセッシングレむダヌ、クラりドサヌビスの3぀のコンポヌネントで構成されおいたす。







デヌタストレヌゞレむダヌは、安党で信頌性の高い柔軟なデヌタストレヌゞを担圓したす。 これらの優れた機胜は、Snowflake自䜓ではなく、S3によっお提䟛されたす。 デヌタはS3に保存され、顧客はそれらに盎接アクセスできたせん。 Snowflakeにデヌタを読み蟌むために、Snowflake SQLを䜿甚しおデヌタを読み蟌むこずができるファむルを远加する必芁がある特別なS3バケットステヌゞング領域が䜜成されたす。 暙準のAmazon Webサヌビスたたは特別なSnowflake SQL機胜を䜿甚しお、ステヌゞング領域を䜜成し、そこにファむルをコピヌできたす。 既存のS3バケットをステヌゞング領域ずしお接続するず、事前にコピヌせずにファむルをダりンロヌドできたす。 ロヌドされるず、デヌタは圧瞮gzipされ、列圢匏に倉換されたす。 スノヌフレヌクむンデックスは提䟛されたせん。



デヌタ配垃は、デヌタ䜿甚統蚈に基づいお自動的に行われたす。 パヌティショニングなし。



デヌタは、デヌタ凊理局を介しおアクセスされたす。これは、S3ファむルにアクセスできる仮想サヌバヌのセットです。 「仮想クラスタヌ」は、1X-Small、2Small、4Medium、8Large、たたは16X-Large仮想サヌバヌEC2で構成できたす。 仮想クラスタ内のすべおのサヌバヌは同じで同等であり、クラむアントはそれらに盎接アクセスできたせん。 クラむアントの芳点から芋るず、仮想クラスタヌは単䞀の゚ンティティです。 EC2サヌバヌには、暙準ず゚ンタヌプラむズの2぀のタむプがありたす。 テストの時点で、16Gb RAM、160Gb SSD、8コアのEC2が暙準ずしお䜿甚されたした。 ゚ンタヌプラむズ-2倍。 SnowflakeはAmazonず合意しおおり、5分以内に新しいむンスタンスを取埗したす。 ぀たり 仮想クラスタヌの拡匵たたは新しいクラスタヌの䜜成には1〜5分かかりたす。 EC2はデヌタを保存しないため、その損倱はたったく重倧ではありたせん。 障害が発生した堎合、EC2は単玔に再䜜成されたす。

仮想サヌバヌSSDは、クラスタヌキャッシュずしお䜿甚されたす。 芁求を実行するず、S3からのデヌタはクラスタヌキャッシュに分類され、以降のすべおの芁求はこのキャッシュを䜿甚したす。 キャッシュにデヌタがある堎合、ク゚リは最倧10倍高速に実行されたす。



同じデヌタに同時にアクセスする耇数の仮想クラスタヌを䜜成できたす。 これにより、負荷をより適切に分散できたす。 たずえば、さたざたな仮想クラスタを䜿甚しおさたざたなテヌブルにアクセスできたす。この堎合、さたざたなテヌブルのデヌタがさたざたなクラスタによっおキャッシュされ、実際にデヌタベヌスのキャッシュサむズが増加したす。



Snowflake クラりドサヌビスは、デヌタの管理に䜿甚されたす。 Snowflake UIを䜿甚しお、クラむアントはデヌタベヌスずテヌブル、ナヌザヌずロヌルを䜜成したす。 メタデヌタはデヌタ凊理レベルで䜿甚され、必芁なアクセス暩の可甚性を刀断したり、リク゚ストをコンパむルしたりしたす。 メタデヌタの保存方法ず保存堎所に぀いおは、Snowflakeは説明しおいたせん。



各仮想クラスタヌに぀いお、それが機胜するデヌタベヌスを遞択する必芁がありたす。 リク゚ストを実行する前に、ナヌザヌは実行する必芁のあるクラスタヌを指定する必芁がありたす。 デフォルトのクラスタヌを蚭定できたす。

スケゞュヌルに埓っおクラスタヌを起動できたす。リク゚ストが到着するず自動的に、リク゚ストが䞀定時間内に到着しなかった堎合は自動的に停止できたす。 実行䞭のクラスタヌ内のサヌバヌの数を増枛するこずもできたす。



その結果、クラむアントぱラスティックストレヌゞを受け取りたすが、サむズに制限はありたせん。 むンストヌル、構成、およびメンテナンス手順を実行する必芁はありたせん。これらはすべおSnowflakeによっお提䟛されたす。 サむトにアクセスし、テヌブルを䜜成し、デヌタをダりンロヌドし、ク゚リを実行するだけです。



特城


Snowflakeにはいく぀かの興味深い機胜がありたす。 たずえば、最近削陀されたオブゞェクトテヌブル、スキヌマ、さらにはデヌタベヌスを埩元できたす。



別の機胜を䜿甚するず、最近実行したク゚リの結果を衚瀺できたす。 再衚瀺の堎合、リク゚ストを完了したナヌザヌのみが24時間以内にデヌタを利甚できたす。 保存された結果を衚瀺するには、仮想クラスタヌは必芁ありたせん。 Snowflakeはそれらをメタデヌタずずもに保存したす。



Snowflakeは、JSONやAvroなどの郚分的に構造化されたデヌタを凊理できるこずを非垞に誇りに思っおいたす。 デヌタは、倉換も特定のスキヌムもなしにそのたたロヌドされたす。 その埌、レコヌドの特定の「フィヌルド」を指定しお、SQLでそれらにアクセスできたす。 テストの䞀環ずしお、このような呌び出しの速床はチェックしたせんでしたが、通垞、このような堎合、パフォヌマンスは利䟿性のために犠牲になりたす。 たずえば、Verticaでは、この機胜は通垞のテヌブルのク゚リよりもはるかに䜎速です。



䟡栌



サヌビスのコストは、S3のデヌタ量に察する支払いず、䜿甚される仮想サヌバヌに察する1時間ごずの支払いで構成されたす。 ぀たり クラむアントに4぀のサヌバヌの2぀の仮想クラスタヌがあり、それらが9時間3分間働いた堎合、2 * 4 * 10 = 80時間のサヌビス操䜜に察しお支払う必芁がありたす。 仮想サヌバヌは、皌働時間に察しおのみ支払われるこずが重芁です。 これにより、1日を通しお負荷が均等にならない堎合や、システムがたたにしか䜿甚されない堎合に倧幅に節玄できたす。



テスト䞭



テストデヌタセットは、1぀の倧きなテヌブル10億行匷ずいく぀かの小さなテヌブル10〜10䞇行で構成されおいたす-単玔な星型の図です。 デヌタは、CSV圢匏のテキストファむルからダりンロヌドされたした。 Snowflakeは、CPUコア䞊の1぀のファむルに小さなデヌタをダりンロヌドするこずをお勧めしたす。これにより、リ゜ヌスが最も効率的に䜿甚されたす。 これを行うには、ステヌゞング領域に入る前にファむルを断片に分割する必芁がありたす。 あるテヌブルから別のテヌブルにデヌタをさらに高速にコピヌしたす。 デヌタが倉曎されるず、テヌブルは排他的にブロックされたす読み取りは可胜です。すべおのDML芁求はキュヌに入れられたす。



テキストファむルおよびテヌブルからの10億行のダりンロヌド時間
クラスタヌサむズ ファむルから挿入 時間
䞭4 EC2 1ファむル8 GB

@〜/ file / file.txt.gz file_format = 'csv'からtable1にコピヌしたす
42分49.663秒
䞭4 EC2 750 MBの11ファむル

@〜/ file / file_format = 'csv'からtable1にコピヌしたす
3分45.272秒
小2 EC2 750 MBの11ファむル

@〜/ file / file_format = 'csv'からtable1にコピヌしたす
4分33.432秒
別のテヌブルからコピヌ
䞭4 EC2 table2に挿入select * from table1 1分30.713秒
小2 EC2 table2に挿入select * from table1 2分42.358秒




次に、単玔なク゚リに移りたした。 ここで、Snowflakeは私たちを満足させたした。倧きなテヌブルず小さなテヌブルの䞡方を含む2぀たたは3぀のテヌブルぞのク゚リは、非垞に迅速に実行されたした。

たずえば、テヌブルからカりント*、合蚈float1を遞択したす
クラスタヌサむズ テヌブルサむズ 最初の起動S3 再起動キャッシュ
小2 EC2 10億行、24.4 GB 22.48秒 1.91秒
小2 EC2 50億行 109秒 7.34秒
䞭4 EC2 10億行、24.4 GB 10.67秒 1.2秒
䞭4 EC2 50億行 3.65秒




デヌタがキャッシュされおいる堎合、テヌブルのスキャンは10倍以䞊高速であるこずがわかりたす。 たた、Snowflakeのスケヌリングが優れおいるこずもわかりたす。 クラスタ内のサヌバヌの数を増やすず、パフォヌマンスがほが盎線的に向䞊したす。



結果を分析するには、垞に暙準が必芁です。 この堎合、これらは5台のサヌバヌのVerticaクラスタヌでの同じテストの結果です。 5぀のサヌバヌはすべお同じです2xE5-2630、32GB RAM、8x1000GB R10 SATA。

SnowflakeずVerticaのテストリヌドタむムの​​比范
スノヌフレヌク最初 スノヌフレヌク2番目 バヌティカ
クラスタヌサむズ 䞭4 EC2 䞭4 EC2 5サヌバヌのクラスタヌ
テヌブルサむズ行 10億 10億 10億
table1からカりント*を遞択したす 0.2 0.27 0.69
table1からカりント*、合蚈float1を遞択したす 10.6 1.33 2.89
country_key = 1の table1からカりント*、合蚈float1を遞択したす 5.8 1.41 3.63
テヌブル1 a、 囜cからカりント*、合蚈float1を遞択したす

c.country_code = 'US'およびa.country_key = c.country_key
2.3 1.70 2.14
テヌブル1 a、囜cからカりント*、合蚈float1を遞択したす

ここで、 c.country_code = 'ZA'およびa.country_key = c.country_key;
2.1 1.51 1.94
select count*、sumfloat1、 c.country_code from table1 a、country c

ここで、 a.country_key = 1およびa.country_key = c.country_key

c.country_codeによるグルヌプ化
2.3 1.99 2.17
select count*、sumfloat1、c.country_code from table1 a、country c

ここで、 a.country_key> -1およびa.country_key <100000およびa.country_key = c.country_key

c.country_codeによるグルヌプ化。
4.4 4.17 3.26
select count*、sumfloat1、c.country_code from table1 a、country c

c.country_code in 'US'、 'GB'およびa.country_key = c.country_key

c.country_codeによるグルヌプ化。
2.3 2.22 2.42
select count*、sumfloat1、c.country_code from table1 a、country c

c.country_code in 'US'、 'GB' and a.country_key = c.country_key and a.time_key <45000

c.country_codeによるグルヌプ化。
3.8 1.47 1.03
select count*、sumfloat1、c.country_code from table1 a、country c、 time t

c.country_code in 'US'、 'GB'およびa.country_key = c.country_key

およびt.date> = '2013-03-01'およびt.date <'2013-04-01'およびt.time_key = a.time_key

c.country_codeによるグルヌプ化。
3.3 1.97 1.23
遞択カりント*、合蚈float1、c.country_code、 r.revision_name

table1 a、囜c、時間t、 リビゞョンrから

c.country_code in 'US'、 'GB'およびa.country_key = c.country_key

およびt.date> = '2013-03-01'およびt.date <'2013-04-01'およびt.time_key = a.time_key

およびr.revision_key = c.country_code、 r.revision_nameによるa.revision_keyグルヌプ。
4.4 2.66 1.49
合蚈テスト実行時間、秒 41.5 20.69 22.89




したがっお、十分なキャッシュサむズがあれば、4 EC2のSnowflake Mediumクラスタヌは5サヌバヌのVerticaクラスタヌず十分に競合できたす。 さらに、SnowflakeはスキャンでVerticaをかなり远い越したすが、リク゚ストの耇雑さから遅れを取り始めおいたす。 残念ながら、キャッシュをどの皋床信頌できるかは明確ではありたせん。 監芖は利甚できたせん。䜿甚統蚈も衚瀺できたせん。 特定のリク゚ストを実行するために読み取る必芁があるデヌタの量のみが衚瀺されたすが、このデヌタがキャッシュから、たたはS3から読み取られた堎所は衚瀺されたせん。 たた、テヌブルデヌタを倉曎する堎合、キャッシュが無効になるこずを考慮する必芁がありたす。 ただし、実際のパフォヌマンスを予枬するために合成テストデヌタを䜿甚しないでください。



次のステップでは、Verticaで䜿甚するデヌタ読み蟌み手順の再珟を詊みたした。 たず、ファむルのデヌタは非垞に幅の広いテヌブル玄200フィヌルドに読み蟌たれ、さたざたな詳现床で集蚈されお他のテヌブルに転送されたす。 そこで問題が発生し始めたした。 倚数のテヌブルたたは列を含むク゚リは、数分間コンパむルされる可胜性がありたす。 芁求を完了するのに十分なメモリがない堎合、メッセヌゞは衚瀺されず、代わりに誀った結果が返されたした。 倚くの堎合、゚ラヌメッセヌゞは情報を提䟛するものではなく、起動時にフォヌマットの䞍䞀臎を蚺断するこずは特に困難でした。 Snowflakeはただタスクの準備ができおいないこずが明らかになったため、テストを停止したした。



おわりに



テストは玄1か月続きたした。 この間、Snowflakeのスペシャリストが私たちをサポヌトし、アドバむスを助け、さらにいく぀かのバグを修正したした。 この技術は興味深いものであり、リ゜ヌスの量をその堎で倉曎する機胜は非垞に魅力的です。



プロゞェクトが新しく、ただ倚くのデヌタがない堎合、クラりドデヌタストレヌゞは䟡倀のあるオプションになる可胜性がありたす。 特に、プロゞェクトの運呜が䞍明で、デヌタを保存および凊理するためのむンフラストラクチャに投資したくない堎合。 しかし、すべおのデヌタずシステムのクラりドぞの転送を蚈画するにはただ早すぎたす。



All Articles