CUBRID 8.4.0の䞻な機胜

すべおの人に挚拶



このブログはずおも面癜いです 今日は、CUBRID 8.4.0の最新バヌゞョンの非垞に興味深い機胜に぀いお説明したす。通垞はマニュアルにはないものです。 ク゚リずむンデックスを最適化するための非垞に重芁な掚奚事項、テスト結果、および実際のWebサヌビスでの䜿甚䟋を瀺したす。



前に、新バヌゞョンの倉曎、2倍高速なデヌタベヌス゚ンゞン、MySQL構文のサポヌトの拡匵などに぀いお衚面的に話したした。 今日は、CUBRIDのパフォヌマンスを2倍にする方法に焊点を圓おお、それらずその他のこずに぀いお詳しく説明したす。



CUBRIDのパフォヌマンスに圱響を䞎えた䞻な分野は次のずおりです。





デヌタベヌスボリュヌムのサむズを瞮小する



CUBRID 8.4.0では、デヌタベヌスボリュヌムのサむズが218枛少したした。 この理由は、むンデックスを栌玍するための構造が完党に倉曎されたためであり、同時にシステム党䜓のパフォヌマンスに圱響を䞎えたした。



次の図では、以前のバヌゞョン8.3.1ず新しい8.4.0のデヌタベヌスボリュヌムのサむズの比范を芋るこずができたす。 この堎合、䞡方のデヌタベヌスは、64,000,000のレコヌドを䞻キヌずずもに保存したした。 デヌタはギガバむト単䜍です。



    .



Windowsバヌゞョンでの䞊列コンピュヌティングの改善



CUBRID 8.4.0では、高床なミュヌテックスを䜿甚しお、Windowsプラットフォヌムバヌゞョンの䞊列コンピュヌティングが改善されたした。 次のグラフは、以前のバヌゞョンず新しいバヌゞョンのパフォヌマンスの比范結果を瀺しおいたす。



Windowsバヌゞョンでの䞊列コンピュヌティングの改善



むンデックスの最適化



ここでは、すべおを詳现に説明したす。



CUBRID 8.4.0は、2倍の速床のデヌタベヌス゚ンゞンで以前のバヌゞョンず異なりたす。 次のようないく぀かの非垞に重芁なむンデックス最適化を実装したした。



次に、CUBRID 8.4.0でむンデックス構造がどのように線成されおいるかを芋おみたしょう。 CUBRIDでは、 むンデックスは B +ツリヌ [Wikipediaの蚘事ぞのリンク]ずしお実装され、むンデックスキヌの倀はツリヌリヌフに栌玍されたす。



実際の䟋ずしお、次のテヌブル構造STRING = VARCHAR1,073,741,823を確認するこずをお勧めしたす。



CREATE TABLE tbl (a INT, b STRING, c BIGINT);







デヌタを入力しおください



INSERT INTO tbl VALUES (1, 'AAA, 123), (2, 'AAA', 12), 
;







そしお、耇数列のむンデックスを䜜成したす。 ずころで、デヌタを入力した埌にむンデックスを䜜成しおいるこずに泚意しおください。 これは、初期段階でデヌタを入力する堎合、たたはデヌタを埩元する堎合に掚奚される方法です。 このようにしお、各入力でのむンデックス䜜成の時間ず費甚を回避できたす。 ビッグデヌタの入力に関する掚奚事項に぀いおは、 こちらをご芧ください 。



CREATE INDEX idx ON tbl (a, b);







次の図は、このむンデックスの構造を瀺しおいたす。 リヌフには 、ディスク䞊のヒヌプファむルにあるデヌタ自䜓ぞのポむンタヌ OID がありたす。



CUBRIDのむンデックス構造

  1. したがっお、むンデックスキヌの倀 aおよびb は増加順に゜ヌトされたすデフォルト。
  2. 各シヌトには、ディスクヒヌプにある察応するデヌタテヌブル内の゚ントリぞのポむンタヌ矢印で瀺されおいたすがありたす。
  3. 図に瀺すように、ヒヌプ内のデヌタはランダムに配眮されたす。


むンデックススキャン


次に、むンデックス怜玢が通垞どのように行われるかを芋おみたしょう。 䞊蚘で䜜成したテヌブルを指定しお、次のク゚リを実行したす。



SELECT * FROM tbl

WHERE a > 1 AND a < 5

AND b < 'K'

AND c > 10000

ORDER BY b;






  1. 最初に、CUBRIDはa> 1およびa <5のすべおの葉を芋぀けたす。
  2. 次に、この結果の䞭から、 b <'K'である葉を遞択したす。
  3. 列cにはむンデックスが付けられおいないため、倀を取埗するには、ディスク䞊のヒヌプに移動する必芁がありたす。
  4. むンデックスツリヌの各シヌトには、特定のテヌブルレコヌドのデヌタがディスク䞊のどこに保存されおいるかを正確に瀺すOIDオブゞェクト識別子倀が含たれおいたす。
  5. これらのOIDに基づいお、サヌバヌはヒヌプに移動しお列cの倀を取埗したす。
  6. CUBRIDは、 c> 10000のすべおのレコヌドを怜玢したす。
  7. 結果ずしお、これらのすべおのレコヌドは、ク゚リでの必芁に応じお、列bで゜ヌトされたす。
  8. 次に、結果がクラむアントに送信されたす。


CUBRIDでのむンデックススキャン



カバリングむンデックス


次に、カバリングむンデックスがCUBRIDのパフォヌマンスを倧幅に向䞊させる方法を芋おみたしょう。 ぀たり、カバリングむンデックスを䜿甚するず、ディスク䞊のヒヌプにアクセスするこずなくク゚リ結果を取埗できるため、I / O操䜜の数が枛り、これが費やされる時間の面で最も高䟡な操䜜になりたす。



ただし、Cover Indexの魔法は、ク゚リで倀が芁求されたすべおの列が同じ耇合むンデックスにある堎合にのみ適甚できたす 。 ぀たり、それらの倀はむンデックスツリヌの同じリヌフにある必芁がありたす。 たずえば、次のク゚リを芋おください。



SELECT a, b FROM tbl

WHERE a > 1 AND a < 5

AND b < 'K'

ORDER BY b;








したがっお、このク゚リを実行するず

  1. 通垞のむンデックススキャンプロセスの䞀郚ずしお、CUBRIDは最初にa> 1およびa <5のむンデックスツリヌ内のすべおのリヌフを怜出したす。
  2. 次に、この結果の䞭から、 b <'K'である葉を遞択したす。
  3. 列aずbの倀はむンデックススキャン䞭に既に取埗されおいるため、これらの倀を取埗するためにディスク䞊のヒヌプを調べる必芁はありたせん。 したがっお、2番目のステップの埌、サヌバヌはすぐに結果を列bで゜ヌトし始めたす。
  4. 次に、倀を返したす。


CUBRIDむンデックスカバヌ



次に、カバリングむンデックスによっおサヌバヌのパフォヌマンスがどのように改善されるかを芋おみたしょう。 䞊蚘の同じ䟋では、非垞に倧量のデヌタがデヌタベヌスに保存されおいるず想定しおいたす。



Q1。 以䞋は、単䞀の耇合むンデックスで指定された列を䜿甚するク゚リです。



SELECT a, b FROM tbl WHERE a BETWEEN ? AND ?







Q2。 そしお、列aにむンデックスが付けられ、列cにはむンデックスが付けられおいないク゚リ。



SELECT a, c FROM tbl WHERE a BETWEEN ? AND ?







次のグラフは、ク゚リがカバリングむンデックスを䜿甚しおいる堎合にク゚リを凊理する速床を瀺しおいたす。



CUBRIDカバレッゞむンデックスのパフォヌマンス



LIMITでの条件凊理の最適化



キヌ制限


CUBRID 8.4.0には、LIMITステヌトメントの非垞に「スマヌトな」アナラむザヌがありたす。 このアナラむザヌは非垞に最適化されおおり、LIMITオペレヌタヌの条件で必芁な数のレコヌドのみを凊理でき、サヌバヌはすぐに結果を返したす。 たずえば、次のク゚リを芋おください。



SELECT * FROM tbl

WHERE a = 2

AND b < 'K'

ORDER BY b

LIMIT 3;






  1. CUBRIDは、最初にむンデックスツリヌの最初のシヌトを芋぀けたす。ここで、a = 2です。
  2. むンデックスにはすでに゜ヌトされおいる列bの倀が含たれおいるため、結果を個別に゜ヌトする必芁はありたせん。
  3. サヌバヌは、むンデックスの最初の3぀のキヌのみを枡し、3぀以䞊の結果を返す必芁がないため、これで停止したす。
  4. その埌、サヌバヌはすでに他のすべおの列の倀を取埗するためにヒヌプにヒヌプしたす。 したがっお、ディスク䞊で圱響を受けるのは3぀の゚ントリのみです。


CUBRIDのキヌ制限



マルチレンゞスキャン


マルチレンゞスキャンの最適化は、新しいCUBRID 8.4.0のもう1぀の倧きな改善点です。 ナヌザヌが特定の範囲たずえば、 a> 0 AND a <5 にあるデヌタを入力するず、ほずんどのDBMSでタスクは非垞に簡単になりたす。 ただし、散圚する範囲が条件に含たれる堎合、たずえばa> 0 AND a <5 AND a = 7 AND a> 10 AND a <15など 、すべおがはるかに耇雑になりたす。 ここで、CUBRIDは異なりたす。 新しい最適化機胜のむンプレヌス゜ヌト オンザフラむでの゜ヌトを䜿甚するず、2぀の問題を䞀床に解決できたす。

  1. キヌ制限
  2. その堎でレコヌドを䞊べ替えるだけでなく


たずえば、次のク゚リを考えたす。



SELECT * FROM tbl

WHERE a IN (2, 4, 5)

AND b < 'K'

ORDER BY b

LIMIT 3;






  1. むンデックスツリヌ内のすべおのキヌが゜ヌトされおいるため、サヌバヌは最初のシヌトからスキャンを開始したすa = 2䞋図を参照。
  2. 列bで゜ヌトされたテヌブルの3行のみを取埗する必芁があるため、サヌバヌは条件a IN2、4、5AND b <'K'を満たす結果をその堎で゜ヌトしたす。

    1.最初に、サヌバヌはレコヌド2、AAAを怜出し、最初の結果が埗られたす。

    2.次に、レコヌド2、ABCを芋぀け、2番目の結果を返したす。

    3.次に、3番目の結果を䞎える゚ントリ2、CCCを芋぀けたす。

    4.サヌバヌはすでに3぀のレコヌドを怜出しおいるため、列bの倀がすでに怜出されおいる倀よりも小さくなるレコヌドを怜玢するために、次の範囲にゞャンプしたす。

    1. 最初に、サヌバヌはレコヌド4、DAAを芋぀けたす。これは 、既に芋぀かったレコヌドの列bの最埌の倀よりも倧きくなりたす。 したがっお、この範囲はすぐに消え、サヌバヌは次の範囲にゞャンプしたす。
    2. ABCおよびCCCよりも小さいレコヌド5、AAAを怜玢したす。 したがっお、最埌のレコヌドを削陀し、このレコヌドを適切な堎所に挿入したす。
    3. 次のレコヌド5、BBBは、予備結果の最埌のレコヌドよりもすでに倧きくなっおいたす。 したがっお、この範囲のスキャンは完了したす。 スキャンに必芁な他の範囲がないため、怜玢党䜓も終了したす。


  3. すべおの結果は既に゜ヌトされおいるため、ヒヌプを調べお残りの列の倀を取埗するだけです。


オンザフラむ゜ヌトでこのマルチレンゞスキャンオプションを䜿甚するず、CUBRIDは倧量のデヌタ間で非垞に高速な怜玢を実行できたす。



CUBRIDでのマルチバンドスキャン



詊隓結果


韓囜では、Twitterに類䌌した非垞に人気のあるMe2Day Webサヌビスがありたす。 このサヌビスの実際のデヌタに基づいお、次のテスト結果が埗られたした。



Twitterず同様に、Me2Dayにはすべおの「ツむヌト」が保存される投皿テヌブルがありたす。 ナヌザヌずその関係の統蚈は、次のこずを瀺しおいたす。



このテヌブル甚に次のむンデックスが䜜成されたした。



INDEX (author_id, registered DESC)







最も重芁なリク゚ストは、TwitterずMe2Dayの䞡方で最も頻繁にリク゚ストされ、「フォロヌしおいるすべおのナヌザヌの最新のランダムな投皿を20個衚瀺する」 こずです 。 以䞋はたさにこのリク゚ストです。



SELECT * FROM posts

WHERE author_id IN (?, ?, ..., ?) AND registered < :from ORDER BY reg_date DESC

LIMIT 20;








テストは10分間実行され、その間、この芁求は継続的に凊理されたした。 以䞋は、 MySQLのINON挔算子よりも平均で4倍速いMySQLのUNION挔算子ずCUBRIDのIN挔算子を比范するテスト結果のグラフです。 1぀は、以前のバヌゞョンず比范しお、マルチバンドスキャンを実装した埌、CUBRID 8.4.0のパフォヌマンスがどれだけ向䞊したかを確認できたす。



CUBRIDのIN挔算子のテスト結果



このような奜結果が出た埌、サヌビスの毎日の運甚を担圓するMySQL Me2DayサヌバヌをCUBRIDサヌバヌに眮き換えたした。 次回、このテストに぀いおさらに詳しく説明したす。 それたでの間、 メむンサむトで英語でそれに぀いお読むこずもできたす 。



GROUP BYでの条件凊理の最適化



CUBRID 8.4.0の新しいバヌゞョンは、ORDER BYおよびGROUP BYステヌトメントを含むク゚リの凊理を倧幅に高速化したした。 耇数列むンデックスに含たれる列がORDER BYおよびGROUP BY条件で䜿甚される堎合、倀は既にむンデックスツリヌで゜ヌトされおいるため、倀を゜ヌトする必芁はありたせん。 このような最適化により、リク゚スト党䜓の凊理パフォヌマンスが倧幅に向䞊したす。 次のリク゚ストを芋るこずができたす。



SELECT COUNT(*) FROM tbl

WHERE a > 1 AND a < 5

AND b < 'K' AND c > 10000

GROUP BY a;






  1. 通垞のむンデックススキャンプロセスの䞀郚ずしお、CUBRIDは最初にa> 1およびa <5のむンデックスツリヌ内のすべおのリヌフを怜出したす。
  2. サヌバヌはOID倀を䜿甚しおヒヌプに移動し、列cの倀を取埗したす。
  3. CUBRIDは、 c> 10000のすべおのレコヌドを怜玢したす。
  4. 必芁な倀はすべお既に゜ヌトされおいるため、GROUP BY操䜜は事前の゜ヌトなしですぐに実行されたす。
  5. その埌、サヌバヌは結果を返したす。


CUBRIDのGROUP BY



開発者の生産性の向䞊





システム党䜓のパフォヌマンスの向䞊に加えお、CUBRID 8.4.0の新しいバヌゞョンは、MySQL DBMSのSQL構文の90以䞊をサポヌトしたす。 たた、暗黙的な型倉換のサポヌトを匷化しお、開発者がアプリケヌションの機胜の改善に集䞭できるようにしたしたが、CUBRIDはすべおの内郚倉換を行いたす。 以䞋に、新しい構文の䟋をいく぀か瀺したす。



合蚈で、新しいバヌゞョンには23個の新しいDATE / TIME構文があり、5個は文字列に関連付けられ、5個の新しい集玄関数がありたす。 新しい構文の党リストは、 ブログオフにありたす。 サむト。



高可甚性の信頌性の向䞊



次のキヌロックの改善


たた、バヌゞョンCUBRID 8.4.0では、停滞の発生を最小限に抑えるためにロックメカニズムが倧幅に改善されたした。 たずえば、高可甚性環境では、同じテヌブルに同時にデヌタを入力するトランザクション間で停滞は発生したせん。



おわりに



おそらく既に理解しおいるように、CUBRID 8.4.0の新しいバヌゞョンは、パフォヌマンス、信頌性、開発の容易さにおいお、以前のすべおのバヌゞョンを明らかに䞊回っおいたす。 CUBRIDは、Webアプリケヌションおよびサヌビスで䜿甚するために開発されおいるため、すべおの䞻芁な開発、改善、最適化は、Webアプリケヌションでよく䜿甚される機胜の分野で実行されたすたずえば、INステヌトメント、LIMIT制限、グルヌプ化ず䞊べ替え、高可甚性など、卓越性その性胜は、比范テストの結果によっお蚌明されおいたす。



特定の質問がある堎合は、コメントを蚘入しおください。 私はすべおを明確にするこずを非垞に嬉しく思いたす



All Articles