Slide 1

Slide 1 text

PHPとフレームワークを例に アプリケーション開発視点からのTiDB Yasuo Honda / 本多康夫 Technical Support Engineer PingCAP株式会社

Slide 2

Slide 2 text

本日のセッションの位置づけ ・イベント登録 : 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編

Slide 3

Slide 3 text

アジェンダ ● TiDBを利用することでアプリケーション開発者が得られるメリット ● TiDBと動作する各プログラミング言語、フレームワークの紹介 ● プログラミング言語PHPで広く利用されているWebアプリケーションフレームワーク LaravelへのTiDB対応状況 ● なぜTiDB Cloudを選択するのか

Slide 4

Slide 4 text

TiDBを利用することで アプリケーション開発者が得られるメリット

Slide 5

Slide 5 text

データベースにおいて悩ましいこと ● データベースのスケーラビリティーに課題がある ● これまでの対応案: ○ レプリケーションを導入する ■ リーダー(読み書き可能)とフォロワー(読み込み専用) ○ シャーディングを導入する ■ テーブルのキーの値に応じて、データを保存するサーバーを分ける ○ データベースサーバーをスケールアップする ■ メモリーやCPUなどの増強

Slide 6

Slide 6 text

これまでの対応案の難しさ ● 読み込み/書き込み分割 ○ 必要なデータの「新鮮さ」に応じて接続先を切り替える必要 ● シャーディング ○ テーブルの列にシャーディングキーを追加する設計が必要 ○ アプリケーションがどのインスタンスにどのデータがあるか知る必要 ○ マスターデータはすべてのインスタンスにコピーする必要あり ○ DDLもすべてのインスタンスに個別に実行する必要あり ● データベースサーバーのスケールアップ ○ 利用できるスペックの上限に達する可能性あり

Slide 7

Slide 7 text

スケールアウト可能な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)

Slide 8

Slide 8 text

TiDBによってできること ● 読み込み/書き込み分割 ○ どのTiDBサーバーに接続しても最新のデータを読み書き可能 ● シャーディング ○ TiKVが内部的にテーブルをRegionという単位で分割する ○ テーブルにシャーディング用のキーは不要 ○ DDLも一度実行すれば、すべてのサーバーに自動的に伝播されます ● データベースサーバーのスケールアップ ○ クエリ数の増加に応じてTiDBをスケールアウト可能 ○ 容量、IO要件の増加に対してTiKVをスケールアウト可能

Slide 9

Slide 9 text

TiDBと動作する各プログラミング言語、フレームワーク の紹介

Slide 10

Slide 10 text

TiDBへの疑問 ● TiDBがスケールアウトできるのはわかったけれど、そもそも利用しているフレーム ワークはTiDBに対応しているのだろうか。 ● TiDBとMySQLの互換性について知りたい。

Slide 11

Slide 11 text

PHP環境へのTiDB対応状況

Slide 12

Slide 12 text

TiDBと各開発言語、フレームワーク ● MySQLプロトコルレベル : “Connectors” ○ PHP: PDO_MYSQL ○ Java: MySQL Connector/J ○ プロトコルレベルの対応のため、高い互換性があります ○ MySQLに接続するためのPDO_MYSQLをTiDBにそのままご利用いただけます ● SQLレベル : “ORM Frameworks” ○ PHP: Laravel ○ Java: Hibernate ○ SQLレベルの対応のため、一部非互換(外部キーなど)な機能があります

Slide 13

Slide 13 text

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)

Slide 14

Slide 14 text

デモ

Slide 15

Slide 15 text

デモの流れ ● TiDB Cloud Dev Tierへのサインアップ方法 ○ https://tidbcloud.com/free-trial ● Laravelアプリケーションの作成 ● LaravelアプリケーションからTiDBクラスタへの接続 ● laravel-tidbの紹介 ● lavavel-tidbを利用したマイグレーションの実施

Slide 16

Slide 16 text

TiDB Cloud / サインアップ ● https://tidbcloud.com/free-trial ● Googleアカウント、GitHubアカウント、メールアドレスでサインアップ可能 ● Developere Tierご利用の場合はクレジットカード登録不要

Slide 17

Slide 17 text

TiDB Cloud / クラスタ作成 - 1 ● クラスタ作成 ○ Developer Tierを選択 ● クラスタ詳細 ○ Cluser Name ○ AWSリージョン ○ 無料で利用可能です

Slide 18

Slide 18 text

TiDB Cloud / クラスタ作成 - 2 ● Security Quick Start ○ Rootパスワード ○ IPアドレス制限

Slide 19

Slide 19 text

TiDB Cloud / クラスタ作成 - 3 ● TiDB Cloud上にクラスタが作成完了 ● 2022年6月13日より、最新バージョンのTiDB v6.1.0で作成されます ○ TiDB v6.1.0は、TiDB v6でのLTS(Long Term Support)です

Slide 20

Slide 20 text

TiDB Cloud / クラスタへの接続 ● mysqlクライアントを利用した接続が可能です ○ Traffic FiltersによるIPアドレス制限が可能です ○ VPC PeeringはDedicated Tierのみで利用可能で、Dev Tierではご利用いただけません ● mysql> create database laravel;

Slide 21

Slide 21 text

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=

Slide 22

Slide 22 text

Laravelサーバーの起動 ● Laravelサーバーの起動 ○ % php artisan serve ● ブラウザで下記URLを開く ○ http://localhost:8000/

Slide 23

Slide 23 text

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で複数のカラムを追加できません

Slide 24

Slide 24 text

laravel-tidbの利用方法 ● laravel-tidbのインストール % cd tidb-example-app % composer require colopl/laravel-tidb ● config/database.php の設定変更 ○ 'driver' => 'mysql'から ○ 'driver' => 'tidb' に変更します

Slide 25

Slide 25 text

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'); }); }

Slide 26

Slide 26 text

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>

Slide 27

Slide 27 text

TiDBとMySQLの互換性に関する補足 ● laravel-tidbでTiDBのMySQLとの非互換性に対応部分は、TiDB本体としても課題として改善予定です ● savepointの対応 ○ https://github.com/pingcap/tidb/pull/34466 ○ 開発ブランチにはmergeされており、将来のバージョンでリリース予定 ● 複数カラム追加、削除 ○ https://github.com/pingcap/tidb/issues/14766

Slide 28

Slide 28 text

なぜTiDB Cloudを選択するのか

Slide 29

Slide 29 text

TiDB Cloudを選ぶ理由 ● TiDBクラスタ(PD、TiKV、TiDBなど複数ノード)の管理を弊社SREが実施 ○ お客様はスケールアウトするデータベースをサービスとして利用可能 ● TiDBクラスタに接続する単一のエンドポイントを提供 ○ mysqlクライアントを利用してサーバーの違いを意識せずに接続可能 ● TiDBの特性(LSM-Tree)を考慮したストレージの選択 ○ Improve Performance and Data Availability with Elastic Block Store | PingCAP ○ ベンチマーク結果、コストを総合的に考慮してEBS gp3を選択

Slide 30

Slide 30 text

TiDB Cloud セキュリティ ネットワークアクセスの制御 IPアドレスの許可リスト VPC ピアリング CIDR設計の必要がないPrivateLink (coming soon) データの暗号化 通信の暗号化 (TLS/SSL) TiKV, TiFlashとバックアップデータ保管時のデー タの暗号化(AES256) Bring Your Own Key (coming soon) 認証 TLS相互認証 (mTLS) ワークロードの分離 お客様のTiDBクラスタ専用のVPCを作 成し、データの機密性と一貫性を補償し ます ログのリダクション 顧客の機密データの流出を防ぎま す オペレーションポリシー 管理されたIaaS設定、モニタリング、ス ケーリング 責任共有モデルにもとづいて、顧客 データへのアクセスを行いません

Slide 31

Slide 31 text

コンプライアンス SOC 2 Type II Report ISO 27001 順次追加予定です GDPR ISO 27701

Slide 32

Slide 32 text

まとめ ● TiDBを利用することでアプリケーション開発者が得られるメリット ● TiDBと動作する各プログラミング言語、フレームワークの紹介 ● プログラミング言語PHPで広く利用されているWebアプリケーションフレームワーク LaravelへのTiDB対応状況 ● なぜTiDB Cloudを選択するのか

Slide 33

Slide 33 text

Q&A / アンケートのお願い

Slide 34

Slide 34 text

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

Slide 35

Slide 35 text

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

Slide 36

Slide 36 text

スケーラブル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円分をプレゼント!

Slide 37

Slide 37 text

クラウドアプリのスタートをご支援! 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 予定数に達し次第終了する可能性があります。


Slide 38

Slide 38 text

TiDB Cloud : 無償トライアルのご案内 TiDB Cloud Free Trialはこちら https://tidbcloud.com/signup Developer Tierでは TiDB Cloudを無償で1年間ご利用頂けます。 容量制限はありますが、 本番と同等の機能を提供しているため、 アプリとの接続試験などが容易に。

Slide 39

Slide 39 text

OSS Insight : 活発度が分かる分析サービス 46億を超えるGitHub上のイベント分析するデータベースとしてTiDB (TiFlash)を活用 https://ossinsight.io/ ①各イベント発生の推移 ①GitHubイベント データを1分おきに同期 +TiFlash https://ossinsight.io/ ②Pull requests地域の表示 ②分析クエリを TiFlash(カラムストア ) で高速処理 ③ジャンル内での比較(人気言語等) etc…

Slide 40

Slide 40 text

TiDB/TiDB Cloud : 日本語版ドキュメントのご案内 TiDB/TiDB Cloud 日本語版ドキュメントはこちら↓ https://docs.pingcap.com/ja/tidb/stable/overview

Slide 41

Slide 41 text

We are hiring!(採用について) オープンソース、オープンコラボレーション、オープンコミュニケーションは私たちが最も大切にしていることです。 毎朝目を覚ますと、困難で大きな課題を解決する為に立ち向かいたくなります。 (それをたのしんでください!) 自発的で好奇心旺盛な方、PingCAPや業界を盛り上げていきたい方、ぜひ私たちと一緒に仕事をしましょう! 募集中ポジション: ● セールス ● ソリューションアーキテクト ● テクニカルサポートエンジニア 詳細はQRコードを読み取ってください➡

Slide 42

Slide 42 text

Thank You! https://www.pingcap.com/ [email protected]