TiDBとは?
NewSQLの代表的なプロダクトの一つである、オープンソースの分散型SQLデータベースのこと。PingCAPが提供している。
mixi2や、LINE、モンスターハンターワイルズなど様々なサービスで使用されているらしい。
NewSQLとは
RDBMSの信頼性や一貫性と、NoSQLデータベースのスケーラビリティや柔軟性を両立させることを目指したデータベースのこと
分散型SQLデータベースとは
データを複数のノード(サーバー)に保存するデータベースのこと。
柔軟なスケーラビリティ、安定した信頼性、およびOLTPとOLAP混合のクエリ処理の高速化を可能にする。
従来のデータベースはデータの保存と処理を単一ノードサーバーに依存していたらしい。
TiDBの特徴(ざっくり)
水平方向の拡張性
データ量に応じて柔軟にスケールアウトまたはスケールインできる
MySQL互換
既存のMySQLクライアントやドライバーをそのまま利用できる
HTAP(Hybrid Transactional/Analytical Processing)の実現
オンライントランザクション処理(OLTP)データベースとオンライン分析処理(OLAP)データベースの両方を同時に処理するハイブリッドデータベース
- OLTP: 短く頻繁に発生する読み書き処理(例:ECサイトの注文処理)。TiDBの行指向ストレージエンジンであるTiKVが得意とする
- OLAP: 大量のデータを集計・分析する処理(例:月次の売上レポート作成)。TiDBの列指向ストレージエンジンであるTiFlashが得意とする
ChatGPT作の比較表
シーン | 従来DBだと… | 分散型DBなら… |
---|---|---|
大量のデータ | 1台じゃ足りない | ノードを増やせばOK |
高トラフィック | CPUやI/Oが限界 | 水平スケールで対応 |
障害対策 | 単一障害点になる | レプリカや自動フェイルオーバーで安心 |
クラウドネイティブ | あまり向いてない | 分散前提なので得意 |
チュートリアルをやってみる
下記サイトから。無料でできる。
データ取得
こんな感じで、データを取得できる。MySQL互換があるので、普通にSQLを書ける。
USE github_sample;
SELECT
*
FROM
`github_repos`
ORDER BY
`stars` DESC
LIMIT
100;
ベクトル検索機能
SQLでベクトル検索(テキストや画像などのデータを数値ベクトルに変換し、そのベクトル間の類似度に基づいて検索を行う技術)ができる。
USE github_sample;
SELECT *
FROM github_repos
ORDER BY VEC_COSINE_DISTANCE(embedding, (
SELECT embedding FROM github_repos WHERE repo_name = 'pingcap/tidb')
)
LIMIT 100;
何をしているか:pingcap/tidb リポジトリと embedding が似ている上位100個のリポジトリを検索している。
VEC_COSINE_DISTANCE(vec1, vec2)
2つのベクトル vec1とvec2 の コサイン類似度 を計算。距離が小さいほど似ている(=類似度が高い)。
チュートリアルは以上で、意外とあっさりだった。
その他ベクトル関数
VEC_L2_DISTANCE(vec1, vec2)
2つのベクトル間のL2距離(ユークリッド距離)を計算します
VEC_NEGATIVE_INNER_PRODUCT(vector1, vector2)
2つのベクトル間の内積の負の値を使用して距離を計算します。
ベクトル検索はTiDBの特徴らしい。
水平スケーリングと分散コンピューティングのために設計されたTiDB Serverlessの堅牢なアーキテクチャは、AIアプリケーションのワークロードを処理するための準備がすでに整っています。TiDBの特徴的なストレージエンジンにベクトルデータ型を革新的に導入し、類似検索インデックスやHNSW (Hierarchical Navigable Small World) のようなアルゴリズムを実装することで、TiDB Serverlessではベクトルデータの効率的な格納、インデックス作成、検索が可能になりました。このアーキテクチャの進化により、テーブルスキャンと計算が最適化され、SQLを通じてベクトルデータと従来のデータ型を直接結合することが可能になりました。