※このブログは2022年10月11日に公開された英語ブログ「Painting with a Database」の拙訳です。
著者: Ruoxi Sun (TiDB Compute Tech Lead)
データベースは、データを格納して読み込みます。それはビジネスにとって不可欠ですが、ちょっと退屈に聞こえますよね?そうではなくて、データベースはもっと多くのことを行うことができ、もっと楽しくできます。データベースを使用して芸術作品を作成することを考えたことはありますか?聞き間違いではありません—データベースでアートワークを作成します。それがどれほど素晴らしいかは試してみるまで決してわからないでしょう。
オープンソースの分散型ハイブリッドトランザクションおよび分析処理 (HTAP) データベースであるTiDBを使用して、デジタル”絵画”を作成しました。以下を見てください。フラクタルに精通している場合は、これがマンデルブロ集合であることに気付くかもしれません。かなりかっこいいと思いませんか?
マンデルブロ集合
TiDBでアートを作成しているのは私だけではありません。TiDBコミュニティの多くの開発者とユーザーが自分たちの作品を私たちと共有しています。TiDBアートギャラリーを散策してみましょう。
Wind by @fanruinet
Tornado by @HHHHHHULK
Northern Lights by @forever
これらのデジタル絵画の中には、特別にアートとして作成されたものもあれば、実際のデータベースワークロードを変換することから生まれたものもあります。すべてとてもクールです。
TiDBで独自のアートを作成する方法を紹介します。ただし、最初にいくつかの事前情報が必要になります。
TiDBのクイックツアー
TiDBは強力な一貫性と高いスケーラビリティを備えた、オープンソースの分散型およびMySQL互換のHTAPデータベースです。TiDBダッシュボードを使用すると、TiDBクラスタの監視、管理、および診断が容易になります。これは組み込みコンポーネントであり、独立して展開する必要ありません。ダッシュボードはGitHubでもオープンソース化されています。
TiDB Dashboard
TiDBダッシュボードには、TiDBワークロードを分析し、トラフィックのホットスポットのトラブルシューティングを行うことができるキービジュアライザーページが含まれています。また、TiDBのトラフィックをヒートマップ形式でリアルタイムで視覚化します。ヒートマップが明るいほど、トラフィックは多くなります。これらのヒートマップのいくつかは驚くべき線、色、形を形成し、自然なアートワークを作成します。
キービジュアライザーは、絵画を作成するキャンバスになります。
TiDB traffic heat map with sequential reads or writes
絵画を作成して洗練する
実際のワークロードを変換して作成されたヒートマップも印象的なものですが、そのようなアートワークは非常に恣意的です。自分の想像力に基づいてデジタルペインティングを作成するにはどうすればよいでしょうか。私の絵画のもう一つ、Elden Ringを例にとってみましょう。
Elden Ring、しかしデータベース!
座標をマッピングする
まず、キービジュアライザーで座標 (x, y)
を使用して図面をマッピングする必要があります。 横軸は時間を表します。ただし、時間間隔は均等に分散されていません。現在の時間である場合、単位時間間隔は1分にすることができます。そして過去の期間については、数時間またはそれ以上になる可能性があります。これは非線形効果と呼ばれます。
絵画の解像度が X*Y
ピクセルであると仮定します。絵画はキービジュアライザーで左から右にレンダリングされるため、水平軸にすべての時間間隔で Y
ピクセルに1本の垂直線を描画する必要があります。その後、 X
時間間隔が経過すると、図面全体が完全にレンダリングされます。ただし Y
ピクセルに1本の垂直線をレンダリングするのに1分かかるため、絵画全体をレンダリングするには時間がかかります。さらに、非線形効果により絵画の左側が狭くなりすぎて、最終的なペイントが奇妙に見えてしまいます。これでは楽しいとは言えません!
この問題を解決するために、Elden Ringを作成したときにTiDBダッシュボードのソースコードを微調整しました。横軸をフルリニアに変更し、単位時間を5秒の固定時間間隔として設定しました。これで、図面のレンダリングが速くなり、奇妙に見えたり、比率が変わったりすることがなくなりました。
縦軸はデータを格納するリージョンを表し、縦軸の1単位は1つのリージョンを表します。Elden Ringを描くために、絵画の垂直ピクセル数に等しい Y
リージョンを使用しました。各リージョンは、絵画上の Y
座標にマップされます。ただし、TiDBのリージョンは格納するデータが多すぎる (または少なすぎる) 場合、分割 (またはマージ) されます。これは垂直軸の単位が増減することを意味し、レンダリングプロセスに影響します。これを回避するには、垂直軸の単位が固定数であり、絵画の垂直ピクセル数と等しいことを確認する必要があります。
幸い、TiDBは格納する各テーブルに少なくとも1つのリージョンが含まれていること、および単一のリージョンが2つの異なるテーブルで共有されないことを保証します。したがって、テーブル内のデータ量をできるだけ小さくすると、リージョンは分割されません。SQLインターフェイスを介してテーブルを処理できるのと同様に、間接的ではありますがリージョンも処理することができます。
次のSQLステートメントは、レンダリングプロセスの前に Y
テーブルを作成し、リージョンを準備します。
CREATE TABLE t_[y](id INT PRIMARY KEY);
Prepared テーブル作成によるリージョンの準備 by creating tables
上記のキービジュアライザーの表 t_0
から t_Y
に示されているように、各テーブルには独自のリージョンがあります。上から下に描画するY座標が与えられると、 (*, y)
上のピクセルをテーブル t_[Y - 1 - y]
にマップすることができます。
色をレンダリングする
座標をマップした後、ピクセルを特定の色にレンダリングする必要があります。前述したように、ヒートマップの色はワークロードのトラフィックを表します。色が明るいほど、書き込みまたは読み取りトラフィックが多くなります。それは、明るい色のヒートマップペイントを取得するために重いワークロードを作成する必要があることを意味しているのでしょうか?いやそうではありません。キービジュアライザーを使用すると、ヒートマップの色の明るさを調整できるため、小さなワークロードを作成してから、生成されたヒートマップの色の明るさを調整できます。このようにして、データ量を小さく抑えることができ、リージョンの分割について心配する必要はありません。また、小さなワークロードがデータベースを圧倒したり、通常のビジネスに影響を与えたりすることはありません。
グレースケール画像の色の範囲は 0
(黒) to 255
(白)であるため、ワークロードを最大256
行に制限します。図面をレンダリングする前に、各テーブルに 0 ~ 255
の値を挿入します。
INSERT INTO t_* VALUES (0), (1), ... (255);
レンダリングプロセス中に、(x, y)
の座標が与えられた c
色のピクセルに対して、 5 * x
秒の時に次のクエリを実行します。
SELECT * FROM t_[Y - 1 - y] where id < c;
各テーブルにはたった1つのフィールド、 id
. カラムしかありません。その小さなペイロードで私たちのタスクには十分です。id
カラムのデータ型は整数であるため、範囲述語 where id < c
.を使用してワークロードのサイズを簡単に調整できます。id
は主キーであり、基礎となるKey-Valueストアのキーに対応します。(今回の場合TiDBの行ストレージエンジンであるTiKVを使用しています) 範囲述語は、Key-Valueストアでスキャンされたキー範囲に変換されます。これは、リージョン内の実際のトラフィック量でもあります。したがって、上記のクエリにより、 0 ~ 255
の範囲内の正確に c
のトラフィックがこの特定のリージョンに格納されます。
最終的な絵画を作成する
ここまでで座標をマッピングして色をレンダリングする方法がわかったので、KeyvizBakerという小さなプログラムを使用して、レンダリングプロセス全体を自動化できます。PNGファイルを読み取り、グレースケールに変換し、 5
秒ごとに Y
のクエリを実行し、 X
回繰り返します。レンダリングプロセスは、写真を横向きに印刷するプリンターのようなものです。
すべての設定が完了したら、休憩してコーヒーを飲むことができます。辛抱強く”変色”させましょう。約 X*5
秒後にElden Ringが完成します。ご照覧あれい!
ご自身で試してみてください
TiDBでアートを作成する方法を学びました。試してみたくなりましたか?気軽にTiDBをダウンロードして、独自の環境に展開してください。ご不明な点がございましたら、TwitterまたはSlackチャンネルからお問い合わせください。また、作成した絵画が気に入ったら、Twitterで作品を共有して@PingCAP_Japanにメンションしてください。見てみたいです!
こちらも併せてお読みください。
Editors: Fendy Feng, Tom Dewan, Rick Golba
TiDB Cloud Dedicated
TiDB Cloudのエンタープライズ版。
専用VPC上に構築された専有DBaaSでAWSとGoogle Cloudで利用可能。
TiDB Cloud Serverless
TiDB Cloudのライト版。
TiDBの機能をフルマネージド環境で使用でき無料かつお客様の裁量で利用開始。