重要
このページは英語版のページを機械翻訳しています。原文はこちらからご覧ください。

TiDB Lightningインポートモード

TiDB Lightningは、2つのバックエンドで2つのインポートモードをサポートします。バックエンドは、 TiDB Lightningがデータをターゲットクラスタにインポートする方法を決定します。

  • ローカルバックエンド: TiDB Lightningは、最初にデータをキーと値のペアにエンコードし、並べ替えてローカルの一時ディレクトリに保存し、これらのキーと値のペアを各TiKVノードにアップロードします。次に、 TiDB LightningはTiKV取り込みインターフェイスを呼び出して、TiKVのRocksDBにデータを書き込みます。初期化されたデータのインポートについては、インポート速度が速いため、ローカルバックエンドを検討してください。

  • TiDBバックエンド: TiDB Lightningは、最初にデータをSQLステートメントにエンコードし、次にこれらのステートメントを実行してデータをインポートします。ターゲットクラスタが実稼働環境にある場合、またはターゲットテーブルにすでにデータがある場合は、TiDBバックエンドを検討してください。

バックエンドローカルバックエンドTiDB-バックエンド
スピード高速(〜500GB /時)遅い(〜50GB /時)
リソースの使用高い低い
ネットワーク帯域幅の使用高い低い
インポート中のACIDコンプライアンスいいえはい
ターゲットテーブル空である必要があります移入可能
サポートされているTiDBバージョン= v4.0.0全て
TiDBはインポート中にサービスを提供できますいいえはい

  • ローカルバックエンドモードで本番環境のTiDBクラスタにデータをインポートしないでください。これは、オンラインアプリケーションに深刻な影響を及ぼします。
  • デフォルトでは、複数のTiDB Lightningインスタンスを起動して、同じTiDBクラスタにデータをインポートすることはできません。代わりに、 並列インポートつの機能を使用する必要があります。
  • 複数のTiDB Lightningインスタンスを使用して同じターゲットデータベースにデータをインポートする場合は、複数のバックエンドを使用しないでください。たとえば、ローカルバックエンドとTiDBバックエンドの両方を使用してデータをTiDBクラスタにインポートしないでください。

ローカルバックエンド

TiDB Lightningでは、TiDBv4.0.3にローカルバックエンドが導入されています。ローカルバックエンドを使用すると、データをTiDBクラスター>=v4.0.0にインポートできます。

Configuration / コンフィグレーションと例

[Lightning]
# Specifies the database to store the execution results. If you do not want to create this schema, set this value to an empty string.
# task-info-schema-name = 'lightning_task_info'

[tikv-importer]
backend = "local"
# When the backend is 'local', whether to detect and resolve conflicting records (unique key conflict).
# The following three resolution strategies are supported:
#  - none: does not detect duplicate records, which has the best performance in the three
#    strategies, but might lead to inconsistent data in the target TiDB.
#  - record: only records conflicting records to the `lightning_task_info.conflict_error_v1`
#    table on the target TiDB. Note that the required version of the target TiKV is not
#    earlier than v5.2.0; otherwise, it falls back to 'none'.
#  - remove: records all conflicting records, like the 'record' strategy. But it removes all
#    conflicting records from the target table to ensure a consistent state in the target TiDB.
# duplicate-resolution = 'none'

# The directory of local KV sorting in the local-backend mode. SSD is recommended, and the
# directory should be set on a different disk from `data-source-dir` to improve import
# performance.
# The sorted-kv-dir directory should have free space greater than the size of the largest
# table in the upstream. If the space is insufficient, the import will fail.
sorted-kv-dir = ""
# The concurrency that TiKV writes KV data in the local-backend mode. When the network
# transmission speed between TiDB Lightning and TiKV exceeds 10 Gigabit, you can increase
# this value accordingly.
# range-concurrency = 16
# The number of KV pairs sent in one request in the local-backend mode.
# send-kv-pairs = 32768

[tidb]
# The target cluster information. The address of any tidb-server from the cluster.
host = "172.16.31.1"
port = 4000
user = "root"
# Configure the password to connect to TiDB. Either plaintext or Base64 encoded.
password = ""
# Required in the local-backend mode. Table schema information is fetched from TiDB via this status-port.
status-port = 10080
# Required in the local-backend mode. The address of any pd-server from the cluster.
pd-addr = "172.16.31.4:2379"

紛争解決

duplicate-resolutionつの構成は、競合する可能性のあるデータを解決するための3つの戦略を提供します。

  • none (デフォルト):重複レコードを検出しません。これは、3つの戦略で最高のパフォーマンスを発揮しますが、ターゲットTiDBのデータに一貫性がなくなる可能性があります。
  • record :ターゲットTiDBのlightning_task_info.conflict_error_v1テーブルに競合するレコードのみを記録します。ターゲットTiKVの必要なバージョンはv5.2.0より前ではないことに注意してください。それ以外の場合は、「none」にフォールバックします。
  • remove :「レコード」戦略のように、競合するすべてのレコードを記録します。ただし、ターゲットテーブルから競合するすべてのレコードを削除して、ターゲットTiDBの状態に一貫性を持たせます。

データソースに競合するデータがあるかどうかわからない場合は、 removeの戦略をお勧めします。 nonerecordの戦略では、競合するデータがターゲットテーブルから削除されません。つまり、 TiDB Lightningによって生成された一意のインデックスがデータと矛盾する可能性があります。

TiDB-バックエンド

Configuration / コンフィグレーションと例

[tikv-importer]
# The backend mode. To use TiDB-backed, set it to "tidb".
backend = "tidb"

# Action to do when trying to insert a conflicting data.
# - replace: use new record to replace the existing record.
# - ignore: keep the existing record, and ignore the new record.
# - error: abort the import and report an error.
# on-duplicate = "replace"

紛争解決

TiDBバックエンドは、すでに入力されている(空でない)テーブルへのインポートをサポートします。ただし、新しいデータにより、古いデータとの一意のキーの競合が発生する可能性があります。 on-duplicateの構成を使用して、競合を解決する方法を制御できます。

価値競合時のデフォルトの動作SQLステートメント
replace新しいレコードが古いレコードを置き換えますREPLACE INTO ...
ignore古い記録を保持し、新しい記録を無視しますINSERT IGNORE INTO ...
errorインポートを中止するINSERT INTO ...

も参照してください