TiDB Cloud Filesystem のレイヤーとチェックポイント
ファイルシステムのレイヤーは、共有されるベースデータとは分離したまま、ベースファイルシステム内のパスに対する変更を記録します。レイヤー内の変更は、そのレイヤーがコミットされたときにのみベースファイルシステムの一部になります。
レイヤーはチェックポイントやフォークも可能で、これによりレイヤー履歴内のある時点を保持したり、独立した子レイヤーで作業を継続したりできます。
ファイルシステムのレイヤーは Git ブランチとは独立しており、Git リポジトリも必要ありません。
レイヤーの作成、確認、フォーク、チェックポイント、コミット、ロールバックを行うコマンドについては、ファイルシステムのレイヤーとチェックポイントを管理する を参照してください。
基本概念
- ベースファイルシステム: レイヤーの外側にある共有ファイルシステムの状態です。レイヤーは、この状態をすぐには変更せずに、ベースパスに対する変更を記録します。
- レイヤー: ベースパスに対する書き込み可能な変更セットです。レイヤーがコミットされるまで、その変更はベースファイルシステムとは分離されたままです。
- チェックポイント: レイヤーの永続的な履歴内にある名前付きの時点です。チェックポイントを作成すると、その時点がレイヤー履歴に保持されますが、レイヤーの変更はベースファイルシステムには適用されません。
- フォーク: 別のレイヤーの現在の状態、またはそのチェックポイントの 1 つから作成される、新しい書き込み可能な子レイヤーです。フォーク後に行われた変更は、親レイヤーと子レイヤーの間で独立します。
- コミット: レイヤー内の有効な変更をベースファイルシステムに適用します。
- ロールバック: レイヤーの未コミットの変更を、ベースファイルシステムに適用せずに破棄します。ロールバックはレイヤーを以前のチェックポイントに戻すものではありません。
レイヤーとベースファイルシステム
レイヤー内で行われた変更は、そのレイヤーを通しては見えますが、レイヤーがコミットされるまではベースファイルシステムには見えません。
レイヤーを指定しない操作は、ベースファイルシステムにアクセスします。つまり、未コミットのレイヤーがあっても、他のユーザーやアプリケーションがベースに直接アクセスしたときに見える内容は変わりません。
レイヤーは、ファイルシステム全体の完全なスナップショットではなく、ベースパス上に重ねられるオーバーレイです。フォークやチェックポイントは関連するレイヤー履歴を保持しますが、ベースファイルシステム全体を固定するわけではありません。そのため、引き続きベースから解決されるデータには、後から加えられたベース側の変更が反映されることがあります。
フォークとチェックポイント
チェックポイントは、1 つのレイヤーの永続的な履歴内にあるある時点を保持します。別の書き込み可能レイヤーを作成するものではなく、変更をベースファイルシステムに公開することもありません。
チェックポイントには読み取り専用のビューとしてアクセスできます。チェックポイントから変更を続けるには、そこから新しい書き込み可能レイヤーをフォークします。
フォークは、フォークが作成された時点での親レイヤーの履歴を保持します。その後、親レイヤーと子レイヤーでの新しい変更は互いに独立します。
チェックポイントの作成時やマウントされたレイヤーの操作時における運用上の要件については、ファイルシステムのレイヤーとチェックポイントを管理する を参照してください。
コミットとロールバック
レイヤーをコミットすると、そのレイヤーの有効な変更がすべてベースファイルシステムに適用されます。これは Git コミットではなく、個々のファイルを選択的に公開するものでもありません。
コミットは、レイヤーの親レイヤーではなく、ベースファイルシステムに変更を適用します。ベースファイルシステムに競合する変更が含まれている場合、変更が自動的にマージされるのではなく、コミットが失敗することがあります。
レイヤーをロールバックすると、変更を公開する代わりに未コミットの変更を破棄します。これはレイヤーを以前のチェックポイントに戻すものではありません。
境界と制限事項
レイヤーは変更の分離を提供しますが、完全なファイルシステムスナップショット、バックアップ、または認可境界ではありません。ファイルシステムのパスや操作へのアクセスを制限するには、スコープ付きトークン を使用してください。
現在のレイヤーモデルには、次の制限があります。
- Git スタイルの merge および rebase 操作はサポートされていません。
- レイヤーをその場でチェックポイントにリセットできません。チェックポイントから続行するには、新しいレイヤーをフォークしてください。
- 子レイヤーをコミットしても、その変更は親レイヤーにはマージされません。
- レイヤーを削除すると論理的には破棄されますが、子孫レイヤーがその履歴に依存している間は、それらの子孫レイヤーから参照される履歴が引き続き利用可能な場合があります。
- レイヤーで作成されたファイルへの繰り返しの変更や継承されたメタデータを含む複雑な履歴では、パブリックプレビュー期間中に制限がある場合があります。
コマンド構文、フラグ、出力フィールドについては、ti fs コマンドリファレンス を参照してください。