sql >> データベース >  >> RDS >> Mysql

MySQLの新しいHeatwaveを理解する

    データ分析は、過去に何が起こったかを確認して、既存のデータを使用して賢明な意思決定を行ったり、将来の行動を予測したりできるため、どの企業でも重要です。

    大量のデータを分析するのは難しい場合があり、OLTPおよびOLAPワークロードを処理するには、複数のデータベースエンジンを使用する必要があります。このブログでは、HeatWaveとは何か、そしてそれがこのタスクでどのように役立つかを見ていきます。

    HeatWaveとは何ですか?

    HeatWaveは、クラウド内のMySQLデータベースサービス用の新しい統合エンジンです。これは、分析クエリの高速実行用に設計された、分散型、スケーラブル、シェアードナッシング、インメモリ、列型のクエリ処理エンジンです。公式ドキュメントによると、分析クエリのMySQLパフォーマンスを400倍高速化し、数千コアにスケールアウトし、直接の競合他社の約3分の1のコストで2.7倍高速になります。 HeatWaveを備えたMySQLデータベースサービスは、MySQLデータベースから直接OLTPおよびOLAPワークロードを実行するための唯一のサービスです。

    HeatWaveの仕組み

    HeatWaveクラスターには、MySQLDBシステムノードと2つ以上のHeatWaveノードが含まれます。 MySQL DBシステムノードには、クラスター管理、HeatWaveクラスターへのデータのロード、クエリスケジューリング、およびクエリ結果のMySQLDBシステムへの返送を担当するHeatWaveプラグインがあります。 HeatWaveノードはデータをメモリに保存し、分析クエリを処理します。各HeatWaveノードには、HeatWaveのインスタンスが含まれています。

    必要なHeatWaveノードの数は、データのサイズと、データをHeatWaveクラスターにロードするときに達成される圧縮の量によって異なります。この製品のアーキテクチャは、次の画像で確認できます。

    ご覧のとおり、ユーザーはHeatWaveクラスターに直接アクセスしません。特定の前提条件を満たすクエリは、処理を高速化するためにMySQL DBシステムからHeatWaveクラスターに自動的にオフロードされ、結果はMySQL DBシステムノードに返され、クエリを発行したMySQLクライアントまたはアプリケーションに返されます。

    使用方法

    この機能を有効にするには、Oracle Cloud Management Siteにアクセスし、既存のMySQL DBシステムにアクセスして(または新しいシステムを作成して)、AnalitycsClusterを追加する必要があります。ここで、クラスターのタイプとノードの数を指定できます。ノード数の見積もり機能を使用して、ワークロードに基づいて必要な数を知ることができます。

    HeatWaveクラスターにデータをロードするには、MySQL DBシステムでテーブルを準備し、テーブルのロード操作を実行する必要があります。

    テーブルの準備

    テーブルの準備には、テーブル定義を変更して特定の列を除外し、文字列列エンコーディングを定義し、データ配置キーを追加し、テーブルのセカンダリエンジンとしてHeatWave(RAPID)を指定する必要があります。これはInnoDBがプライマリエンジンであるためです。

    RAPIDをテーブルのセカンダリエンジンとして定義するには、CREATETABLEまたはALTERTABLEステートメントでSECONDARY_ENGINEテーブルオプションを指定します。

    mysql> CREATE TABLE orders (id INT) SECONDARY_ENGINE = RAPID;
    or
    mysql> ALTER TABLE orders SECONDARY_ENGINE = RAPID;
    データの読み込み

    テーブルをHeatWaveクラスターにロードするには、SECONDARY_LOADキーワードを指定してALTERTABLE操作を実行する必要があります。

    mysql> ALTER TABLE orders SECONDARY_LOAD;

    テーブルが読み込まれると、データは水平方向にスライスされ、HeatWaveノードに分散されます。テーブルがロードされた後、MySQL DBシステムノード上のテーブルのデータへの変更は、HeatWaveノードに自動的に伝播されます。

    この例では、テーブルの順序を使用します:

    mysql> SHOW CREATE TABLE orders\G
    *************************** 1. row ***************************
           Table: orders
    Create Table: CREATE TABLE `orders` (
      `O_ORDERKEY` int NOT NULL,
      `O_CUSTKEY` int NOT NULL,
      `O_ORDERSTATUS` char(1) COLLATE utf8mb4_bin NOT NULL,
      `O_TOTALPRICE` decimal(15,2) NOT NULL,
      `O_ORDERDATE` date NOT NULL,
      `O_ORDERPRIORITY` char(15) COLLATE utf8mb4_bin NOT NULL,
      `O_CLERK` char(15) COLLATE utf8mb4_bin NOT NULL,
      `O_SHIPPRIORITY` int NOT NULL,
      `O_COMMENT` varchar(79) COLLATE utf8mb4_bin NOT NULL,
      PRIMARY KEY (`O_ORDERKEY`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin

    HeatWaveにロードしたくない列を除外できます:

    mysql> ALTER TABLE orders MODIFY `O_COMMENT` varchar(79) NOT NULL NOT SECONDARY;

    ここで、テーブルのRAPIDをSECONDARY_ENGINEとして定義します。

    mysql> ALTER TABLE orders SECONDARY_ENGINE RAPID;
    テーブル定義にSECONDARY_ENGINEパラメータが追加されていることを確認してください。

    ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin SECONDARY_ENGINE=RAPID

    最後に、テーブルをHeatWaveにロードします:

    mysql> ALTER TABLE orders SECONDARY_LOAD;

    EXPLAINを使用して、正しいエンジンを使用しているかどうかを確認できます。次のように表示されます:

    追加:whereを使用します。一時的な使用; filesortの使用;セカンダリエンジンRAPIDの使用

    MySQLの公式サイトで、通常の実行とHeatWaveの使用の比較を確認できます:

    HeatWaveの実行

    mysql> SELECT O_ORDERPRIORITY, COUNT(*) AS ORDER_COUNT FROM orders 
           WHERE O_ORDERDATE >= DATE '1994-03-01' GROUP BY O_ORDERPRIORITY 
           ORDER BY O_ORDERPRIORITY;
    +-----------------+-------------+
    | O_ORDERPRIORITY | ORDER_COUNT |
    +-----------------+-------------+
    | 1-URGENT        |     2017573 |
    | 2-HIGH          |     2015859 |
    | 3-MEDIUM        |     2013174 |
    | 4-NOT SPECIFIED |     2014476 |
    | 5-LOW           |     2013674 |
    +-----------------+-------------+
    5 rows in set (0.04 sec)
    通常の実行
    mysql> SELECT O_ORDERPRIORITY, COUNT(*) AS ORDER_COUNT FROM orders 
           WHERE O_ORDERDATE >= DATE '1994-03-01' GROUP BY O_ORDERPRIORITY 
           ORDER BY O_ORDERPRIORITY;
    +-----------------+-------------+
    | O_ORDERPRIORITY | ORDER_COUNT |
    +-----------------+-------------+
    | 1-URGENT        |     2017573 |
    | 2-HIGH          |     2015859 |
    | 3-MEDIUM        |     2013174 |
    | 4-NOT SPECIFIED |     2014476 |
    | 5-LOW           |     2013674 |
    +-----------------+-------------+
    5 rows in set (8.91 sec)

    ご覧のとおり、単純なクエリであっても、クエリの時間には重要な違いがあります。詳細については、公式ドキュメントを参照してください。

    結論 単一のMySQLデータベースをOLTPアプリケーションとAnalyticsアプリケーションの両方に使用できます。オンプレミスのMySQLと100%互換性があるため、OLTPワークロードをオンプレミスに維持し、アプリケーションを変更せずに分析ワークロードをHeatWaveにオフロードできます。また、Oracle Cloudで直接使用して、分析のMySQLパフォーマンスを向上させることもできます。目的。


    1. PHPで動的なpostgresプリペアドステートメントを作成する方法

    2. SQL ServerでのACOS()の例

    3. Ruby on Rails3OSXのソケット'/tmp/mysql.sock'を介してローカルMySQLサーバーに接続できません

    4. OracleStreamsで伝搬を常に有効に保つ