📣
TiDB Cloud Premium はパブリックプレビュー中です。エンタープライズワークロード向けの無制限のスケーリング、即時の弾力性、高度なセキュリティを提供します。このページは自動翻訳されたものです。原文はこちらからご覧ください。

書店向けアプリケーション例



Bookshopは、さまざまなジャンルの本を購入したり、読んだ本を評価できるオンラインの仮想書店アプリケーションです。

アプリケーション開発者ガイドをよりスムーズにお読みいただけるよう、Bookshopアプリケーションのテーブル構造とデータに基づいたSQL文の例を示します。このドキュメントでは、テーブル構造とデータのインポート方法、およびテーブル構造の定義に焦点を当てています。

テーブル構造とデータをインポートする

Bookshopアプリケーションのテーブル構造とデータをインポートするには、以下のインポート方法のいずれかを選択してください。

TiDB セルフマネージド: tiup demo経由

TiUPを使用してTiDBセルフマネージドクラスタをデプロイしている場合、またはTiDBサーバーに接続できる場合は、次のコマンドを実行することで、Bookshopアプリケーション用のサンプルデータをすばやく生成してインポートできます。

tiup demo bookshop prepare

デフォルトでは、このコマンドは、アプリケーションがアドレス4000のポート127.0.0.1に接続できるようにし、パスワードなしでrootユーザーとしてログインできるようにし、データベースにbookshopという名前のテーブル構造を作成します。

接続情報を設定する

以下の表に接続パラメータを示します。環境に合わせてデフォルト設定を変更できます。

パラメータ略語デフォルト値説明
--password-pなしデータベースユーザーのパスワード
--host-H127.0.0.1データベースアドレス
--port-P4000データベースポート
--db-Dbookshopデータベース名
--user-Urootデータベースユーザー

例えば、 TiDB Cloud上のデータベースに接続したい場合は、接続情報を次のように指定できます。

tiup demo bookshop prepare -U <username> -H <endpoint> -P 4000 -p <password>

データ量を設定します

各データベーステーブルで生成されるデータ量は、以下のパラメータを設定することで指定できます。

パラメータデフォルト値説明
--users10000usersテーブルで生成されるデータの行数
--authors20000authorsテーブルで生成される行数
--books20000booksテーブルで生成されるデータの行数
--orders300000ordersテーブルで生成されるデータの行数
--ratings300000ratingsテーブルで生成されるデータの行数

例えば、以下のコマンドを実行すると、次のものが生成されます。

  • --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:インポート機能経由

  1. 対象のTiDB Cloudリソースのインポートページを開きます。

    1. TiDB Cloudコンソールにログインし、私のTiDBページに移動します。

      ヒント:

      複数の組織に所属している場合は、左上隅のコンボボックスを使用して、まず目的の組織に切り替えてください。

    2. 対象リソースの名前をクリックして概要ページに移動し、左側のナビゲーションペインにある「インポート」をクリックします。

  2. 「クラウドストレージからデータをインポート」を選択し、次に「Amazon S3」をクリックします。

  3. 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行の注文記録
  4. 「接続」「インポート開始」をクリックしてインポート処理を開始し、 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

この表には書籍の基本情報が格納されています。

フィールド名タイプ説明
IDビギント書籍の固有ID
タイトルvarchar(100)本のタイトル
タイプ列挙型書籍の種類(例:雑誌、アニメーション、教材など)
ストックビギントストック
価格decimal(15,2)価格
公開日日時発行日

authors一覧

この表には著者の基本情報が格納されています。

フィールド名タイプ説明
IDビギント著者の固有ID
名前varchar(100)著者名
性別小さな整数生物学的性別(0:女性、1:男性、NULL:不明)
生年スモールイント生年
死亡年スモールイント死亡年

usersテーブル

このテーブルには、書店利用者の情報が格納されています。

フィールド名タイプ説明
IDビギントユーザーの固有ID
バランスdecimal(15,2)バランス
ニックネームvarchar(100)ニックネーム

ratings

このテーブルには、書籍に対するユーザー評価の記録が保存されています。

フィールド名タイプ説明
ブックIDビギント書籍の固有ID(にリンク)
ユーザーIDビギントユーザーの一意の識別子 (ユーザーにリンク)
スコア小さな整数ユーザー評価(1~5)
評価_at日時評価時間

book_authorsテーブル

著者は複数の書籍を執筆することがあり、また、一冊の書籍に複数の著者が関わる場合もあります。この表は、書籍と著者間の対応関係を格納します。

フィールド名タイプ説明
ブックIDビギント書籍の固有ID(にリンク)
著者IDビギント著者の固有ID(著者へのリンク)

ordersテーブル

このテーブルにはユーザーの購入情報が保存されます。

フィールド名タイプ説明
IDビギント注文の固有ID
ブックIDビギント書籍の固有ID(にリンク)
ユーザーIDビギントユーザーの一意の識別子 (ユーザーに関連付けられている)
小さな整数購入数量
注文日時日時購入時間

データベース初期化スクリプト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

お困りですか?

このページは役に立ちましたか?