分散SQLデータベース内のテーブルを有効にするには、データのライフサイクルを管理する
8479 ワード
あなたの組織は、各通過日で成長しているだからあなたのデータです.より多くのデータはより多くのビジネス機会をもたらします、しかし、それもより高い貯蔵経費を賭けます.あなたはコストを管理するためのより良い方法が欲しいですか?私たちはオープンソースデータベースのために同じことを望みます.
TiDB 大規模データ用に設計された分散SQLデータベースです.私たちの目標は、合理的なコストで大規模なデータセットをサポートすることです.アットTiDB Hackathon 2020 , 我々はその方向に大きな一歩を踏み出した.特徴を紹介した.the time to live (TTL) table , これにより、TiDBはその寿命に応じてデータのライフサイクルを自動的に管理することができます.tidbは、そのリソースのすべての部分は、高値、新鮮なデータによって消費されることを確認します.
本稿では、TTLテーブルについて詳細に説明します.さらに、私はTTLテーブルをオープンソースプロジェクトで使用できる方法のいくつかの例を共有します.ディメンションレポート、Kubernetes長期イベントストレージ、IOTのためのMQTTなど.時間がないので、始めましょう.
TTLテーブルは何ですか?
tidbコミュニティはtidbストレージコストを制限する努力をしました.例えば、データストレージを階層的に管理する方法を探求し、データベースを安価な記憶媒体に保存することができる.また,データtidbストアの値を増やすことでコスト削減を図った.多くの場合、特定のデータセットの値は、その寿命に密接に関連します.古いデータは、価値が少なくなる.tidbストア高値データを助けるために,tdbをtidbに導入した.
TTL、または生きる時間は、システムのデータの寿命を制限する機構である.指定された時間が経過すると、そのデータが削除される.これは広く使用されているキャッシュとストレージシステム、例えばRedis、RockDB、およびMyRock.
TTDBでは、TTLはTTLテーブルとして実装されます.上記のシステムと同様に、TTDBのTTLテーブルは手動での介入なしにテーブルに書かれたデータのライフサイクルを自動的に管理することができます.データが寿命の終わりに到達した後、自動的に期限切れになり、tidbは占有しているリソースを取り戻します.このメカニズムはユーザーを退屈なライフサイクル管理から解放して、より少ないリソースを使用しているデータをすぐに削除します.
TTDBにTTLテーブルを実装する方法
TDBの内部メカニズムと使用の複雑さを考慮して、データテーブルの2つの設定項目を追加しました.
TTL
) そして、粒度を生きる時間TTL_GRANULARITY
). これらの2つのパラメータで、TTLテーブルはデータライフサイクルを管理できます.TTLテーブルの2種類の粒度を設定できます.row
and partition
.テーブル粒度テーブル
tidbはトランザクション同時実行を制御するために多バージョン同時実行制御(mVCC)を使用する.データの範囲を更新すると、元のデータがすぐに削除されませんが、新しいデータと一緒に、タイムスタンプを使用してバージョンを区別する保持されます.次に、周期Garbage Collection ( gc )プロセスは時代遅れのデータをクリアする.TIKVが行粒度TTLテーブルのためにGCをするたびに、それはまた、満了の資格があるデータの行を取り戻します.
TIDBがTIKVにGCタスクを派遣するとき、タスクはTTLテーブルとそれらのTTL構成に対応するキー範囲を含みます.TTV構成に基づいて、TKVはTTLキー範囲内のデータの寿命を計算します.TiKVがMVCCで有効であるが、TTLを超えているデータを見つけるならば、TIKVはGCプロセスの間、データを削除して、保管スペースを解放します.
特に、ほとんどのTIDBテーブルは現在使用していますnon-clustered indexes . プライマリキーインデックスまたはセカンダリインデックスがレコードで一貫性のない削除進行を持っている場合、テーブルから既に削除されているデータのセットは、インデックスにまだ表示されることがあります.インデックスが使用されるとき、これはクエリ失敗につながります.この問題を解決するために、TTLテーブルを2つのキー範囲に分割します.
The TTL for data = the TTL for index + the interval between the recent two rounds of GC
. このように、全てのデータは、少なくとも1つのGC期間のインデックスより長く生きている.GCの間に期限切れのデータを削除することに加えて、圧縮プロセスも期限切れのデータを取り戻す良い時間です.私たちはHackathonで限られた時間を持っていたので、私たちはGCのためにTTLを実行するだけでした、しかし、我々はさらにTTLの実装を最適化する予定です.
TTLテーブルを行の粒度で作成するには、次のステートメントを使用します.
CREATE TABLE ttl_table {
id BIGINT PRIMARY KEY AUTO_RANDOM,
author VARCHAR(255),
post VARCHAR(255)
} TTL='1h', TTL_GRANULARITY='ROW';
また、使用することができますALTER TABLE
既存のテーブルを行の粒度TTLテーブルに切り替えるには.パーティション粒度TTLテーブル
大量のデータを削除することは多くのリソースを消費するので、通常、データベースはリソースを節約するために周期的なGCかcompactionを採用します.なぜ使用しないのだろう
TRUNCATE
期限切れデータをより効率的に削除するには?これに対処するために、ユーザに見えない特別なパーティションテーブルとしてTTLテーブルを実装します.パーティション粒度のTTLテーブルを作成するには、次のステートメントを実行します
CREATE TABLE ttl_table {
id BIGINT PRIMARY KEY AUTO_RANDOM,
author VARCHAR(255),
post VARCHAR(255)
} TTL='1d', TTL_GRANULARITY='PARTITION';
パーティション間を切り替えるためのスライディングウィンドウを使用することで、複数の物理パーティションに対して粗粒度データを年代順に割り当てることができます.最古のパーティションは切り捨てられ、削除されますが、新しいパーティションが回転して作成されます.最も古いパーティションのすべての期限切れのデータは、すぐに低コストで削除されます.この特別な削除操作では、RockDBは削除された論理データの物理ファイルを直接削除します.貯蔵空間はほぼゼロコストで解放される.現在、TIDBは通常のテーブルをパーティションテーブルに切り替えることをサポートしていません.また、パーティションテーブルを別のパーティションテーブルに切り替えることもサポートしていません.したがって、既存のテーブルをパーティション粒度TTLテーブルに変更することはできません.
TDBのTTLテーブルの使用場所
TTLテーブルがどのように機能するか知っているので、どこで適用できますか?私たちはいくつかのオープンソースプロジェクトを調整し、TDBをストレージ媒体として使用し、データをTTLテーブルに格納しました.これらのシステムでは,tidbはシステム意識のないデータライフサイクルを自動的に維持できる.
アパッチ・キリン
ディメンションのレポートは、意思決定のための高値、タイムリーなデータを提供するために、大きなデータのシナリオで広く使用されています.Apache Kylinは、多次元のオンライン分析処理(MOLAP)の方法で、生データをスライス、ダイス、ロールアップ、ドリルダウンなどのデータ解析を提供する.
Apache Kylinでは、レポートに使用されるより多くの寸法とベースで、データボリュームが大きくなります.多くの場合、データ量はスタンドアロンデータベースが保持できるものをはるかに超えます.時間が経過すると、ユーザは時代遅れのデータに対してリアルタイムの解析を行うことができない.古いデータはビジネスとの関連性を失う.効率的に歴史的データをクリーニングすることで、不要なリソース消費を減らすことができます.
これは、TTLテーブルがあなたの救助に来るところです.TTLテーブルは、ディメンションレポートデータのライフサイクルを管理し、TIDBのインデックスクエリ機能を使用して、Apache Kylinの実装を簡素化します.レポートデータとメタデータの管理を統一することで、TIDBはさらにApache Kylin管理コストを削減する.
ジャガー追跡
Jaeger Tracing OpenTracking Standardをサポートし、OpenTelemrationの実験的サポートを提供する分散トレースプラットフォームです.ヤーガーはストレージバックエンドとしてカサンドラとエラスティックサーチを使用し、他のストレージシステムとの統合のためにGRPCプラグインを提供します.
私たちはtidbの上でジャガーを実行するプラグインを使用します.TITBは、JIEGERにTiKVの高いスループットとスケーラビリティの利益をもたらします.これは自動的に歴史的な追跡データのライフサイクルを管理し、システムの運用コストを下げる.
Kubernetesイベント
クバーネッツ
event
objectクラスタ内で起こっているすべてのイベントを記録します.これらのイベントでは、例外的な動作のトラブルシューティングやクラスタ操作の監査に役立ちます.Kubernetesクラスタが大きく、頻繁に変更を見ると、クラスタイベントを別のETCDクラスタに格納することを選択できます.しかし、Kubernetesが頻繁に更新されると、クラスタは大量のイベントを生成する.限られた記憶空間のため、ETCDクラスタはすべてのKubernetesイベントを記録することができません、しかし、最近のものだけ.この問題に対処するには、長い時間でより多くのデータを格納するTDBでKubernetesイベントを格納することができます.さらに、TDBの二次インデックスを使用すると、格納されているイベントを迅速かつ柔軟にクエリできます.TTLテーブルの助けを借りて、TiDDBに格納されている歴史的なイベントが自動的に期限切れになり、ストレージ空間が保存されます.
MQTT QoS
メッセージ待ち行列テレメトリ輸送(MQTT)は、インターネット(IOT)メッセージングのインターネットのための軽量発行/購読プロトコルです.モバイルおよびIOTデバイスが不安定なネットワーク接続を持っているかもしれないので、クライアントは長い間クライアントがオフラインになるときでも、メッセージ配送はまだサービス品質(QoS)レベル1または2に達するようにメッセージを持続させる必要があります.
ビルトインデータ有効期限メカニズムによる記憶バックエンドは、信頼性があってタイムリーな配達を必要とするアプリケーション(例えば速報ニュース、琥珀警報と天気予報)に適しています.
Hackathonの間、我々はバックエンド記憶としてMySQLをサポートするために、人気のMQTTブローカーを適応させました.TIDBはMySQL互換性があるので、TIDBのTTLテーブルはユーザによって設定された保持サイクルに従って期限切れのデータを自動的に削除することができます.
概要
すべてに接続されたすべての時代には、データのボリュームが急速に成長している.より少ないコストでより多くのデータをサポートする方法は、すべてのDBMSSが答えるように試みることです.この質問に対する答えはTTLテーブルです.
TIDBにとって、この問題の核心は、TDBのコストとそれが運ぶデータの価値をバランスさせる方法です.より関連性と新鮮なデータは、より多くの値tidbあなたのビジネスのために作成されます.結局、時間は誰のために待ちます、そして、より価値あるデータのために余地を作るほうがよいです.
この記事はもともと1967年に出版されましたpingcap.com 2021年(明治21年)10月10日
Reference
この問題について(分散SQLデータベース内のテーブルを有効にするには、データのライフサイクルを管理する), 我々は、より多くの情報をここで見つけました https://dev.to/sunxiaoguang/manage-data-lifecycle-with-time-to-live-tables-in-distributed-sql-database-1e25テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol