記事ディレクトリ
1. サービスのインストール
最近、同社はリアルタイム データ ストレージ データベースとして TDengine を有効にしましたが、このデータベースの現在の使用法にあまり慣れていないため、使用上のヒントをいくつか記録してまとめたいと思います。
公式ドキュメントのアドレス。ドキュメントの説明によると、全体のインストールは比較的簡単です。この記事ではインストール手順は紹介しません。公式アドレスは次のとおりです。
https://docs.taosdata.com/get-started/package/
需要启动 taosd 和 taosadapter两个服务。
- taosd は TDengine サービスであり、このサービスを開始する必要があります (デフォルトのポート 6030)。
- taosadapter は、TDengine の RESTful サービス (デフォルトは 6041)、サーバーに接続するためのユーザー名とパスワード (デフォルトは root:taosdata) です。
2. 基本操作
ここでは、 Windows 環境でTaos Shellツールを使用してテストします。次の図に示すように、TDengine クライアント ソフトウェアをインストールする必要があります。
1. ユーザーの作成
create user `用户名` pass `密码`;
如:
create user myuser pass "123456";
2. ユーザーパスワードを変更する
taos データベース root ユーザーのデフォルトのパスワードは taosdata です。taos データベースをインストールした後、次のステートメントを通じてパスワードを変更できます。
alter user root pass `yourpassword`
如:
alter user root pass '123456';
3. データベースにログインします
taos -uroot -p密码
如:
taos -uroot -p123456 ;
4. 図書館の運営
(1) ライブラリを作成します(存在しない場合)
keep フィールドは、ファイルがテーブルに保存される時間を指します。デフォルトは日です。
create database if not exists 库名 keep n days m blocks k;
#如:
create database if not exists mydb keep 365 days 10 blocks 4;
(2) 図書館を利用する
use 库名;
#如:
use mydb;
(3) ライブラリを削除します(存在する場合)。
drop database [if exists] 库名;
#如:
drop database [if exists] mydb;
(4) すべてのデータベースを表示する
show databases;
(5) データベースファイルの圧縮フラグを変更する
alter database 库名 comp 位数;
#如:
alter database mydb comp 2;
(6) データベースのコピー数を変更する
alter database 库名 replica 数量;
#如:
alter database mydb replica 2;
(7) データファイルの保存日数を変更する
alter database 库名 keep 天数;
#如:
alter database mydb keep 35;
(8) 変更されたデータを正常に書き込むために必要な確認回数
alter database 库名 quorum 数目;
#如:
alter database mydb quorum 2;
(9) 各 VNODE (TSDB) に存在するキャッシュ サイズのメモリ ブロックの数を変更します。
alter database 库名 blocks 大小;
#如:
alter database mydb blocks 100;
5. テーブル操作
先说明语法格式,后续会统一说明超级表,子表以及Tag的关系,统一建表进行操作展示。
(1) スーパーテーブルの操作
a. スーパーテーブルを作成する
STable の作成にはテーブルの作成と似た SQL 構文がありますが、TAGS フィールドの名前と型を指定する必要があります。例証します:
- TAGS 列のデータ型をタイムスタンプ型にすることはできません。
- TAGS 列名は他の列名と同じにすることはできません。
- TAGS 列名を予約キーワードにすることはできません。
- TAGS では最大 128 個を使用でき、0 にすることもでき、合計の長さは 16,000 文字を超えません。
create stable [if not exists] stb_name (time timestamp,column_name int ...) tags (column_name1 dataType,column_name2 dataType,....)
#如
create stable if not exists st(time timestamp, column_name int) tags (t1 nchar(50), t2 nchar(100));
b. スーパーテーブルを表示する
- データベース内のすべての STable と、STable の名前、作成時間、列の数、タグ (TAG) の数、STable を通じて作成されたテーブルの数などの関連情報を表示します。
SHOW STABLES [LIKE tb_name_wildcard];
#如:显示当前数据库下的所有超级表信息
show stables like "%super%
- スーパーテーブルの作成文を表示し、既存のスーパーテーブルの作成文を返し、別のクラスタで実行すると同じ構造のスーパーテーブルが得られます。データベースの移行によく使用されます。
SHOW CREATE STABLE stb_name;
- スーパー テーブルの構造情報を取得し、結果セットの最初の列をサブテーブルの名前で返し、後続の列をラベル列で返します。
DESCRIBE [db_name.]stb_name;
#如
describe super_table ;
- スーパーテーブル内のすべてのサブテーブルのラベル情報を取得します
SHOW TABLE TAGS FROM stbname;
#如:
SHOW TABLE TAGS FROM st;
c. スーパーテーブルを削除します。
STable を削除すると、STable を通じて作成されたサブテーブルとサブテーブル内のすべてのデータが自動的に削除されます。
DROP STABLE [IF EXISTS] [db_name.]stb_name
d. スーパーテーブルを変更する
スーパー テーブルの構造を変更すると、その下のすべてのサブテーブルに影響します。特定のサブテーブルのテーブル構造を変更することはできません。タグ構造への変更はスーパー テーブルに対して発行する必要があり、TDengine はこのスーパー テーブルのすべてのサブテーブルに自動的に適用されます。
- スーパーテーブルに列を追加する
ALTER STABLE stb_name ADD COLUMN col_name column_type;
#如:
alter table super_table add column column_name int;
- スーパーテーブルから列を削除
ALTER STABLE stb_name DROP COLUMN col_name;
#如:
alter table super_table drop column column_name;
- タグ付けする
ALTER STABLE stb_name ADD TAG tag_name tag_type;
#如:
alter table super_table add tag column nchar(60);
- タグの削除
ALTER STABLE stb_name DROP TAG tag_name;
#如:
alter table super_table drop tag tag_name;
- タグ名の変更
ALTER STABLE stb_name RENAME TAG old_tag_name new_tag_name;
#如:
alter table super_table change tag old_tag_name new_tag_name;
- サブテーブルのタグ値(TAG)を変更する
alter table item_table_name set tag column_key = “value”;
e. スーパーテーブルクエリ
SELECT ステートメントを使用すると、スーパー テーブルに対する射影クエリと集計クエリを完了でき、WHERE ステートメントでラベルと列をフィルター処理できます。
スーパー テーブルのクエリ ステートメントに ORDER BY が追加されていない場合、返される順序は、最初に 1 つのサブテーブルのすべてのデータを返し、次に次のサブテーブルのすべてのデータを返すことになるため、返されるデータは順序付けされていません。ORDER BY ステートメントが追加された場合、結果は ORDER BY ステートメントで指定された順序で厳密に返されます。
(2) サブテーブルの操作
创建表时timestamp 字段必须为第一个字段类型为主键
CREATE TABLE [IF NOT EXISTS] [db_name.]tb_name (create_definition [, create_definition] ...) [table_options]
a. 通常のテーブルを作成します。
CREATE TABLE IF NOT EXISTS a(c timestamp,b int)
b. スーパーテーブルに基づいてサブテーブルを作成する
#这样建表之后,子表会复制除去超级表里面的tags字段外的所有字段;
create table table_name using super_table tags (column_value,column_value ...);
c. データテーブルの削除
drop table if exists 表名;
d. 現在のデータベースのすべてのデータテーブル情報を表示します。
show tables;
#添加过滤条件
show tables like "%table_name%";
e. テーブルの構造情報の取得
describe 表名;
f. テーブルに列を追加します。
alter table mytable add column addfield int;
g. テーブルの列削除
alter table mytable drop column addfield;
3. ビジュアルインターフェイス TDengineGUI をインストールします。
https://github.com/arielyang/TDengineGUI
TDengineGUI は、時系列データベース TDengine 用の Electron に基づいて構築されたグラフィカル管理ツールです。クロスプラットフォーム、使いやすさ、バージョン適応性が高いという特徴があります。
Windows バージョンをインストールすると、次のような効果があります。
新しい接続を作成します: サービスのポート番号 (デフォルトは 6041)、サーバーに接続するためのユーザー名とパスワード (デフォルトは root: taosdata)。ユーザー名またはパスワードが変更されている場合は、設定してください。実際の状況に応じて。
4. スーパーテーブル、テーブル(サブテーブルとも呼ばれます)とタグの関係
TDengine では、各データ収集ポイントで個別のテーブルを構築する必要があるため、データ挿入/クエリのパフォーマンスが大幅に向上しますが、システム内のテーブル数が急激に増加するため、アプリケーションがテーブルを維持して実行することがより困難になります。集計と統計操作。そこで、アプリケーション開発の難易度を下げるために、TDengine では Super Table (スーパーテーブル) の概念を導入しています。
1. スーパーテーブル定義
STable は、同じタイプのデータ コレクション ポイントの抽象化であり、同じタイプのコレクション インスタンスのコレクションです。各 STable には、同じデータ構造を持つ複数のサブテーブルが含まれており、テーブル構造とそのサブテーブルのラベルのセットを定義します。
- テーブル構造は、テーブルに記録されるデータ列とそのデータ型を指します。
- タグ名とデータ型は STable によって定義され、タグ値は各サブテーブルの静的情報を記録し、サブテーブルのグループ化とフィルタリングに使用されます。
2. テーブル (サブテーブルとも呼ばれます) の定義
サブテーブルは本質的には通常のテーブルであり、タイムスタンプ主キーと複数のデータ列で構成されます。各行には特定のデータが記録されます。データ クエリの操作は通常のテーブルとまったく同じですが、サブテーブルと通常のテーブルの違いは次のとおりです。各サブテーブルはスーパーテーブルに属し、STable によって定義された一連のタグ値を持っているということです。
収集デバイスのタイプごとに STable を定義できます。データ モデルは、温度、圧力、電圧、電流、GPS リアルタイム位置など、テーブルの各列のデータのタイプを定義します。一方、タグ情報は、シリアル番号、モデルなどのメタ データに属します。 、収集デバイスの場所など。これは静的であり、テーブル メタデータです。テーブル (データ収集ポイント) を作成するときに STable (収集タイプ) を指定することに加えて、ユーザーはラベルの値も指定できます。
3. 例を挙げる
(スーパーテーブル)super_table、(サブテーブル)sub_table、(タグ)Tagの関係を例を挙げて説明します。
モノのインターネットでは、インターネットに接続する必要があるコミュニティに電力メーター デバイスがあると仮定します。次に、電気メーターには、Zhang Sanjia の電気メーター、Li Sijia の電気メーター、Zhang Sanjia の電気メーターの電流と電圧、Li Sijia の電気メーターの電流と電圧、Wang Wu の機器情報などが含まれます。 。
次に、電気計器などの IoT デバイスとして、スーパー テーブル super_table として設計できます。このように、電気計器には Zhang San の電気計 sub_table1、Li Si の電気計 sub_table2 などがあります。電流と電圧はテーブルです。スーパーテーブルで定義されたフィールド属性と、メーターが属する所有者名とコミュニティアドレスをTAGに保存できます。
このシナリオに従って、スーパー テーブル (super_dianbiao) といくつかのサブテーブル (dianbiao1001、dianbiao1002 など) を設計できます。
(1) 電力計スーパーメーターを作成:super_dianbiao
#创建数据库
create database mydb;
#使用数据库
use mydb;
# 创建超级表
create stable super_dianbiao (ts timestamp,dianya float,dianliu float) tags (yezhu_name nchar(15),xiaoqu_location nchar(50),menpai_num nchar(10));
(2) サブテーブル dianbiao を作成します...
create table dianbiao1001 using super_dianbiao tags('张三','东城小区','1-1101');
create table dianbiao1002 using super_dianbiao tags('李四','东城小区','1-1102');
(3) サブテーブルへのデータの挿入
insert into dianbiao1001 values(now,1.7,3.2);
insert into dianbiao1002 values(now,1.6,3.1);
(4) TDengineGUI を使用して直感的な効果を確認する
- まずはスーパーテーブル(super_dianbiao)を見てみましょう
2. サブテーブル (dianbiao1001) を確認します。
- サブテーブルを見てください (dianbiao1002)
要約する
TDengineの革新ポイント一个采集点一张表,同一类型的采集点用一个超级表来描述,也就是一个表结构Schema和静态标签Schema
—— 。動的に収集された物理量は各フィールドとして使用され、静的な属性 (Location および groupId) はサブテーブルのラベルとして使用されます。スーパー テーブルをテンプレートとして使用し、各収集ポイントに対応するサブテーブルを生成します。スーパー テーブルを使用すると、同様の収集ポイントのデータ検索、クエリ、および集計が大幅に容易になります。
この設計にはいくつかの利点があります。
- これにより、収集ポイントのデータが記憶媒体上のブロックに継続的に保存されることが保証されます。一定期間データを読み取ると、ランダムな読み取り操作が大幅に減少し、読み取り速度とクエリ速度が桁違いに向上します。
- 異なる収集デバイスのデータ生成プロセスは完全に独立しているため、各デバイスのデータ ソースは一意であり、テーブルの書き込み者は 1 人だけです。このようにして、ロックフリーの方法で書き込みを行うことができ、書き込み速度を大幅に向上させることができます。
- データ収集ポイントの場合、生成されるデータは時系列であるため、書き込み操作を追加方式で実装でき、データの書き込み速度がさらに大幅に向上します。
従来の方法を使用して複数のデバイスから 1 つのテーブルにデータを書き込む場合、制御不能なネットワーク遅延が原因で、さまざまなデバイスからサーバーにデータが到着するタイミングを保証できません。書き込み操作はロックで保護する必要があります。デバイスのデータを継続的に一緒に保存することは困難です。1 つのデータ収集ポイントと 1 つのテーブルを使用すると、単一のデータ収集ポイントの挿入とクエリのパフォーマンスを最大限に最適化できます。
この記事では、TDengine の基本的な使い方と核となる概念を理解していただくことを目的としており、TDengine と Springboot のエンジニアリング実践については以下で紹介しますので、ご期待ください。