書店向けアプリケーション例
Bookshopは、さまざまなジャンルの本を購入したり、読んだ本を評価できるオンラインの仮想書店アプリケーションです。
アプリケーション開発者ガイドをよりスムーズにお読みいただけるよう、Bookshopアプリケーションのテーブル構造とデータに基づいたSQL文の例を示します。このドキュメントでは、テーブル構造とデータのインポート方法、およびテーブル構造の定義に焦点を当てています。
テーブル構造とデータをインポートする
Bookshopアプリケーションのテーブル構造とデータをインポートするには、以下のインポート方法のいずれかを選択してください。
TiDB セルフマネージド: tiup demo経由
TiUPを使用してTiDBセルフマネージドクラスタをデプロイしている場合、またはTiDBサーバーに接続できる場合は、次のコマンドを実行することで、Bookshopアプリケーション用のサンプルデータをすばやく生成してインポートできます。
tiup demo bookshop prepare
デフォルトでは、このコマンドは、アプリケーションがアドレス4000のポート127.0.0.1に接続できるようにし、パスワードなしでrootユーザーとしてログインできるようにし、データベースにbookshopという名前のテーブル構造を作成します。
接続情報を設定する
以下の表に接続パラメータを示します。環境に合わせてデフォルト設定を変更できます。
例えば、 TiDB Cloud上のデータベースに接続したい場合は、接続情報を次のように指定できます。
tiup demo bookshop prepare -U <username> -H <endpoint> -P 4000 -p <password>
データ量を設定します
各データベーステーブルで生成されるデータ量は、以下のパラメータを設定することで指定できます。
例えば、以下のコマンドを実行すると、次のものが生成されます。
--usersパラメータを介して取得した 200,000 行のユーザー情報--booksパラメータを介して50万行の書籍情報を取得--authorsパラメータによる 100,000 行の著者情報--ratingsパラメータによる 1,000,000 行の評価レコード--ordersパラメータを介して1,000,000行の注文レコードを取得
tiup demo bookshop prepare --users=200000 --books=500000 --authors=100000 --ratings=1000000 --orders=1000000 --drop-tables
--drop-tablesパラメータを使用すると、元のテーブル構造を削除できます。パラメータの詳細については、 tiup demo bookshop --helpコマンドを実行してください。
TiDB Cloud:インポート機能経由
対象のTiDB Cloudリソースのインポートページを開きます。
TiDB Cloudコンソールにログインし、私のTiDBページに移動します。
ヒント:
複数の組織に所属している場合は、左上隅のコンボボックスを使用して、まず目的の組織に切り替えてください。
対象リソースの名前をクリックして概要ページに移動し、左側のナビゲーションペインにある「インポート」をクリックします。
「クラウドストレージからデータをインポート」を選択し、次に「Amazon S3」をクリックします。
Amazon S3 からデータをインポートするページで、以下のソースデータ情報を設定してください。
- インポートするファイル数: TiDB Cloud Starterの場合は、 「複数のファイル」を選択してください。このフィールドはTiDB Cloud Dedicatedでは利用できません。
- スキーマファイルを含める:はいを選択してください。
- データ形式: SELECT SQL 。
- フォルダURI :
s3://developer.pingcap.com/bookshop/を入力してください。 - バケットアクセス: AWSロールARNを選択します。
- ロール ARN :
arn:aws:iam::494090988690:role/s3-tidb-cloud-developer-accessを入力してください。
この例では、以下のデータが事前に生成されます。
- 20万行のユーザー情報
- 50万行の書籍情報
- 著者情報10万行
- 1,000,000行の評価記録
- 1,000,000行の注文記録
「接続」 > 「インポート開始」をクリックしてインポート処理を開始し、 TiDB Cloudインポート完了をお待ちください。
データをTiDB Cloudにインポートまたは移行する方法の詳細については、 TiDB Cloud移行の概要参照してください。
データインポート状況をビュー
インポートが完了したら、次のSQL文を実行することで、各テーブルのデータ量情報を表示できます。
SELECT
CONCAT(table_schema,'.',table_name) AS 'Table Name',
table_rows AS 'Number of Rows',
CONCAT(ROUND(data_length/(1024*1024*1024),4),'G') AS 'Data Size',
CONCAT(ROUND(index_length/(1024*1024*1024),4),'G') AS 'Index Size',
CONCAT(ROUND((data_length+index_length)/(1024*1024*1024),4),'G') AS 'Total'
FROM
information_schema.TABLES
WHERE table_schema LIKE 'bookshop';
結果は以下のとおりです。
+-----------------------+----------------+-----------+------------+---------+
| Table Name | Number of Rows | Data Size | Index Size | Total |
+-----------------------+----------------+-----------+------------+---------+
| bookshop.orders | 1000000 | 0.0373G | 0.0075G | 0.0447G |
| bookshop.book_authors | 1000000 | 0.0149G | 0.0149G | 0.0298G |
| bookshop.ratings | 4000000 | 0.1192G | 0.1192G | 0.2384G |
| bookshop.authors | 100000 | 0.0043G | 0.0000G | 0.0043G |
| bookshop.users | 195348 | 0.0048G | 0.0021G | 0.0069G |
| bookshop.books | 1000000 | 0.0546G | 0.0000G | 0.0546G |
+-----------------------+----------------+-----------+------------+---------+
6 rows in set (0.03 sec)
表の説明
このセクションでは、Bookshopアプリケーションのデータベーステーブルについて詳しく説明します。
books
この表には書籍の基本情報が格納されています。
authors一覧
この表には著者の基本情報が格納されています。
usersテーブル
このテーブルには、書店利用者の情報が格納されています。
ratings表
このテーブルには、書籍に対するユーザー評価の記録が保存されています。
book_authorsテーブル
著者は複数の書籍を執筆することがあり、また、一冊の書籍に複数の著者が関わる場合もあります。この表は、書籍と著者間の対応関係を格納します。
ordersテーブル
このテーブルにはユーザーの購入情報が保存されます。
データベース初期化スクリプトdbinit.sql
Bookshopアプリケーションでデータベーステーブル構造を手動で作成する場合は、次のSQLステートメントを実行してください。
CREATE DATABASE IF NOT EXISTS `bookshop`;
DROP TABLE IF EXISTS `bookshop`.`books`;
CREATE TABLE `bookshop`.`books` (
`id` bigint AUTO_RANDOM NOT NULL,
`title` varchar(100) NOT NULL,
`type` enum('Magazine', 'Novel', 'Life', 'Arts', 'Comics', 'Education & Reference', 'Humanities & Social Sciences', 'Science & Technology', 'Kids', 'Sports') NOT NULL,
`published_at` datetime NOT NULL,
`stock` int DEFAULT '0',
`price` decimal(15,2) DEFAULT '0.0',
PRIMARY KEY (`id`) CLUSTERED
) DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;
DROP TABLE IF EXISTS `bookshop`.`authors`;
CREATE TABLE `bookshop`.`authors` (
`id` bigint AUTO_RANDOM NOT NULL,
`name` varchar(100) NOT NULL,
`gender` tinyint DEFAULT NULL,
`birth_year` smallint DEFAULT NULL,
`death_year` smallint DEFAULT NULL,
PRIMARY KEY (`id`) CLUSTERED
) DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;
DROP TABLE IF EXISTS `bookshop`.`book_authors`;
CREATE TABLE `bookshop`.`book_authors` (
`book_id` bigint NOT NULL,
`author_id` bigint NOT NULL,
PRIMARY KEY (`book_id`,`author_id`) CLUSTERED
) DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;
DROP TABLE IF EXISTS `bookshop`.`ratings`;
CREATE TABLE `bookshop`.`ratings` (
`book_id` bigint NOT NULL,
`user_id` bigint NOT NULL,
`score` tinyint NOT NULL,
`rated_at` datetime NOT NULL DEFAULT NOW() ON UPDATE NOW(),
PRIMARY KEY (`book_id`,`user_id`) CLUSTERED,
UNIQUE KEY `uniq_book_user_idx` (`book_id`,`user_id`)
) DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;
ALTER TABLE `bookshop`.`ratings` SET TIFLASH REPLICA 1;
DROP TABLE IF EXISTS `bookshop`.`users`;
CREATE TABLE `bookshop`.`users` (
`id` bigint AUTO_RANDOM NOT NULL,
`balance` decimal(15,2) DEFAULT '0.0',
`nickname` varchar(100) UNIQUE NOT NULL,
PRIMARY KEY (`id`)
) DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;
DROP TABLE IF EXISTS `bookshop`.`orders`;
CREATE TABLE `bookshop`.`orders` (
`id` bigint AUTO_RANDOM NOT NULL,
`book_id` bigint NOT NULL,
`user_id` bigint NOT NULL,
`quality` tinyint NOT NULL,
`ordered_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`) CLUSTERED,
KEY `orders_book_id_idx` (`book_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin
お困りですか?
- 不和or スラックコミュニティに質問してください。
- TiDB Cloudのサポートチケットを送信してください
- TiDB Self-Managedのサポートチケットを送信してください