Upgrade to Pro — share decks privately, control downloads, hide ads and more …

【NewSQL】アプリケーション開発観点からのTiDB - PHP編

【NewSQL】アプリケーション開発観点からのTiDB - PHP編

このスライドでは、アプリケーション開発者やアーキテクトの方々に対して、NewSQLデータベースのTiDBをアプリケーションからどのように利用するのか、MySQLなど他データベースからの移行にあたって、アプリケーション開発者の観点から考慮するべきかについて解説します。
また、株式会社コロプラ様に開発いただいたTiDB用のLaravel-TiDBドライバについても紹介します。

アーカイブ動画:https://youtu.be/nNVc1qm_nPQ

PingCAP-Japan

June 25, 2022
Tweet

More Decks by PingCAP-Japan

Other Decks in Technology

Transcript

  1. 本日のセッションの位置づけ ・イベント登録 : https://pingcap.co.jp/event/ ・過去開催アーカイブ :  https://www.youtube.com/channel/UCatxrGZANSnii2fe7FeEwvg/playlists 2022年4月14日(木) 14:00-15:30 TiDB ソフトウェアの紹介・デモ 2022年4月21日(木) 14:00-15:00

    アプリケーション開発観点からの TiDB - Ruby編 2022年5月12日(木) 14:00-15:30 TiDB Cloudの紹介・デモ 2022年5月19日(木) 14:00-15:00 最新TiDB 6.0のポイント 2022年5月26日(木) 14:00-15:00 アプリケーション開発観点からの TiDB - Java編 2022年6月9日(木) 14:00-15:30 TiDB ソフトウェアの紹介・デモ 2022年6月16日(木) 14:00-15:00 PingCAP Education:TiKV- RocksDBについて 2022年6月23日(木) 14:00-15:00 アプリケーション開発観点からの TiDB - PHP編
  2. データベースにおいて悩ましいこと • データベースのスケーラビリティーに課題がある • これまでの対応案: ◦ レプリケーションを導入する ▪ リーダー(読み書き可能)とフォロワー(読み込み専用) ◦

    シャーディングを導入する ▪ テーブルのキーの値に応じて、データを保存するサーバーを分ける ◦ データベースサーバーをスケールアップする ▪ メモリーやCPUなどの増強
  3. これまでの対応案の難しさ • 読み込み/書き込み分割 ◦ 必要なデータの「新鮮さ」に応じて接続先を切り替える必要 • シャーディング ◦ テーブルの列にシャーディングキーを追加する設計が必要 ◦

    アプリケーションがどのインスタンスにどのデータがあるか知る必要 ◦ マスターデータはすべてのインスタンスにコピーする必要あり ◦ DDLもすべてのインスタンスに個別に実行する必要あり • データベースサーバーのスケールアップ ◦ 利用できるスペックの上限に達する可能性あり
  4. スケールアウト可能なMySQLプロトコル互換 TiDB クエリの増加 ノード追加で対応 TiDB TiDB Cluster
 TiKV Cluster
 負荷分散・領域管理

    3ノードのみ必要 PD Cluster TiDB TiKV TiKV TiKV TiKV 容量拡張 ノード追加で対応 TSO / Data Location Metadata
 PD PD PD Application via MySQL Protocol Application via MySQL Protocol Application via MySQL Protocol Application via MySQL Protocol データストアレイヤー アプリケーション (MySQL Client利用可能) - TiDB : クエリの増加に対してTiDBサーバーのスケールアウト可能 - TiKV : データ容量/IO要件の増加に対してTiKVサーバーのスケールアウト可能 SQL解析レイヤー (Parser, Optimizer)
  5. TiDBによってできること • 読み込み/書き込み分割 ◦ どのTiDBサーバーに接続しても最新のデータを読み書き可能 • シャーディング ◦ TiKVが内部的にテーブルをRegionという単位で分割する ◦

    テーブルにシャーディング用のキーは不要 ◦ DDLも一度実行すれば、すべてのサーバーに自動的に伝播されます • データベースサーバーのスケールアップ ◦ クエリ数の増加に応じてTiDBをスケールアウト可能 ◦ 容量、IO要件の増加に対してTiKVをスケールアウト可能
  6. TiDBと各開発言語、フレームワーク • MySQLプロトコルレベル : “Connectors” ◦ PHP: PDO_MYSQL ◦ Java:

    MySQL Connector/J ◦ プロトコルレベルの対応のため、高い互換性があります ◦ MySQLに接続するためのPDO_MYSQLをTiDBにそのままご利用いただけます • SQLレベル : “ORM Frameworks” ◦ PHP: Laravel ◦ Java: Hibernate ◦ SQLレベルの対応のため、一部非互換(外部キーなど)な機能があります
  7. Laravel and Eloquent • SQLレベル : “ORM Frameworks” にあたるもの •

    今回のウェビナーでは、Laravelと、Laravelで利用されるEloquentを例に紹介します ◦ PHP Programming - The State of Developer Ecosystem in 2021 Infographic | JetBrains ◦ それ以外のフレームワークやORMをご利用の場合はお知らせください。対応状況を確認します • Laravel ◦ PHPで利用される代表的なアプリケーションフレームワークの一つ • Eloquent ◦ Laravelに含まれるなORM(Object-relational mapper)
  8. デモの流れ • TiDB Cloud Dev Tierへのサインアップ方法 ◦ https://tidbcloud.com/free-trial • Laravelアプリケーションの作成

    • LaravelアプリケーションからTiDBクラスタへの接続 • laravel-tidbの紹介 • lavavel-tidbを利用したマイグレーションの実施
  9. TiDB Cloud / クラスタ作成 - 1 • クラスタ作成 ◦ Developer

    Tierを選択 • クラスタ詳細 ◦ Cluser Name ◦ AWSリージョン ◦ 無料で利用可能です
  10. TiDB Cloud / クラスタ作成 - 2 • Security Quick Start

    ◦ Rootパスワード ◦ IPアドレス制限
  11. TiDB Cloud / クラスタ作成 - 3 • TiDB Cloud上にクラスタが作成完了 •

    2022年6月13日より、最新バージョンのTiDB v6.1.0で作成されます ◦ TiDB v6.1.0は、TiDB v6でのLTS(Long Term Support)です
  12. TiDB Cloud / クラスタへの接続 • mysqlクライアントを利用した接続が可能です ◦ Traffic FiltersによるIPアドレス制限が可能です ◦

    VPC PeeringはDedicated Tierのみで利用可能で、Dev Tierではご利用いただけません • mysql> create database laravel;
  13. Laravelプロジェクトの作成 • Laravelプロジェクトの作成 % composer create-project laravel/laravel tidb-example-app • データベース接続設定の変更

    (.envファイル) ◦ 標準のMySQLポート 3306を TiDB Cloudの 4000に変更 ◦ DB_HOSTを127.0.0.1からTiDB Cloudのエンドポイント (*.aws.tidbcloud.com )に変更 ◦ DB_PASSWORDは環境変数として指定 ◦ .envファイル DB_CONNECTION=mysql DB_HOST=tidb.*省略*.prod.aws.tidbcloud.com DB_PORT=4000 DB_DATABASE=laravel DB_USERNAME=root DB_PASSWORD=
  14. laravel-tidb • COLOPL,Inc がオープンソース(Apache License 2.0)として公開している TiDB用のLaravelドライバー ◦ Laravel database

    driver for PingCAP TiDB • 代表的な機能 ◦ AUTO_RANDOMへの対応 ▪ Primary Keyのhotspotへの対応 ◦ Nested transactionsへの対応 ▪ 標準のドライバーはsavepointを利用してNested trasactionに対応しているため ▪ 現時点でTiDBはsavepointに対応していません ◦ 複数カラム追加、削除 ▪ 複数のDDLに分割して現時点でのTiDBの制限を回避 ▪ 現時点でTiDBは単一DDLで複数のカラムを追加できません
  15. laravel-tidbの利用方法 • laravel-tidbのインストール % cd tidb-example-app % composer require colopl/laravel-tidb

    • config/database.php の設定変更 ◦ 'driver' => 'mysql'から ◦ 'driver' => 'tidb' に変更します
  16. laravel-tidbを利用したマイグレーション • laravel-tidbでは、id列はデフォルトで AUTO_RANDOMを利用します (laravel-tidbをインストールしない場合は AUTO_INCREMENT) public function up() {

    Schema::create('flights', function (Blueprint $table) { $table->id(); $table->timestamps(); }); } • 複数カラムを同時に追加する public function up() { Schema::table('flights', function (Blueprint $table) { $table->string('origin'); $table->string('destination'); }); }
  17. laravel-tidbを利用したマイグレーション • マイグレーションの実施 % php artisan migrate:fresh (今回はデモの都合上、 :freshオプションで全てのテーブルを再作成しています )

    • テーブル定義の確認 mysql> show create table flights\G *************************** 1. row *************************** Table: flights Create Table: CREATE TABLE `flights` ( `id` bigint(20) NOT NULL /*T![auto_rand] AUTO_RANDOM(5) */, `created_at` timestamp NULL DEFAULT NULL, `updated_at` timestamp NULL DEFAULT NULL, `origin` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, `destination` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, PRIMARY KEY (`id`) /*T![clustered_index] CLUSTERED */ ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci 1 row in set (0.01 sec) mysql>
  18. TiDB Cloud セキュリティ ネットワークアクセスの制御 IPアドレスの許可リスト VPC ピアリング CIDR設計の必要がないPrivateLink (coming soon)

    データの暗号化 通信の暗号化 (TLS/SSL) TiKV, TiFlashとバックアップデータ保管時のデー タの暗号化(AES256) Bring Your Own Key (coming soon) 認証 TLS相互認証 (mTLS) ワークロードの分離 お客様のTiDBクラスタ専用のVPCを作 成し、データの機密性と一貫性を補償し ます ログのリダクション 顧客の機密データの流出を防ぎま す オペレーションポリシー 管理されたIaaS設定、モニタリング、ス ケーリング 責任共有モデルにもとづいて、顧客 データへのアクセスを行いません
  19. Webinar : 今後の予定 https://pingcap.co.jp/event/ 2022年6月23日(木) 14:00-15:00 アプリケーション開発観点からの TiDB - PHP編

    2022年6月30日(木) 14:00-15:00 HTAPを体験!TiDBのカラムナストアで分析してみよう! 2022年7月14日(木) 14:00-15:30 TiDB Cloudの紹介・デモ 2022年7月21日(木) 14:00-15:00 TiDB Cloud リリースノートについて 2022年7月28日(木) 14:00-15:00 PingCAP Education:TiDBでの表設計(1) ※過去開催アーカイブ : https://www.youtube.com/channel/UCatxrGZANSnii2fe7FeEwvg/playlists
  20. Webinar : アーカイブ 2022年4月14日(木) 14:00-15:30 TiDB ソフトウェアの紹介・デモ 2022年4月21日(木) 14:00-15:00 アプリケーション開発観点からの

    TiDB - Ruby編 2022年5月12日(木) 14:00-15:30 TiDB Cloudの紹介・デモ 2022年5月19日(木) 14:00-15:00 最新TiDB 6.0のポイント 2022年5月26日(木) 14:00-15:00 アプリケーション開発観点からの TiDB - Java編 2022年6月9日(木) 14:00-15:30 TiDB ソフトウェアの紹介・デモ 2022年6月16日(木) 14:00-15:00 PingCAP Education:TiKV- RocksDBについて https://www.youtube.com/channel/UCatxrGZANSnii2fe7FeEwvg/featured
  21. スケーラブルDBはこう使われている!を知るイベント 7/7開催・TiDB User Day 2022 注目セッション スピーカー企業 ①AWS/GCPベースのSaaSシステムはTiDBとの相性が抜群! ②@cosmeがレガシーシステムをクラウドネイティブ DBに載せ替える理由

    ③【パネルディスカッション】現場から見た TiDB / NewSQL https://pingcap.co.jp/tidb-user-day-2022/ 特典 🎁 ①イベント登録で先着200名様にAmazonギフト券1,000円をプレゼント! ②イベントの感想や技術ブログを書くと Amazonギフト券最大50,000円分をプレゼント!
  22. クラウドアプリのスタートをご支援! TiDB Cloud 1年無料キャンペーン 日本進出から1周年を記念し、TiDB Cloudをご利用いただいたことがないお客様を対象にTiDB Cloud1年間相当の値引きキャンペーンを実施します。 キャンペーン期間 2022年5月18日~2023年3月31日 申込み分まで キャンペーン内容

    最大700万円相当(TiDB Cloud典型構成で1年分相当)の値引きを提供します。 対象・適用条件 下記条件をみたすお客様 ※1(最大10社※2)  - TiDB Cloudを使用したことがないお客様  - 事例・プロモーションにご協力いただけるお客様  - 設立から1年以上経過しているお客様 適用方法 フォームにご入力の上、キャンペーンにお申し込みください。審査結果およびキャンペーン の詳細について担当者より連絡いたします。 URL https://pingcap.co.jp/start-dash-202205/ ※1 別途所定の審査あり
 ※2 予定数に達し次第終了する可能性があります。

  23. TiDB Cloud : 無償トライアルのご案内 TiDB Cloud Free Trialはこちら https://tidbcloud.com/signup Developer

    Tierでは TiDB Cloudを無償で1年間ご利用頂けます。 容量制限はありますが、 本番と同等の機能を提供しているため、 アプリとの接続試験などが容易に。
  24. OSS Insight : 活発度が分かる分析サービス 46億を超えるGitHub上のイベント分析するデータベースとしてTiDB (TiFlash)を活用 https://ossinsight.io/ ①各イベント発生の推移 ①GitHubイベント データを1分おきに同期

    +TiFlash https://ossinsight.io/ ②Pull requests地域の表示 ②分析クエリを TiFlash(カラムストア ) で高速処理 ③ジャンル内での比較(人気言語等) etc…