削除記録(Tombstone)の仕組み — 消したデータが復活しないために
一括採点では、複数のパソコン間でデータをやりとりすることがあります。 そのとき、一方のパソコンで削除したデータが、もう一方のパソコンからのインポートで復活してしまう問題がありました。 この記事では、その問題を解決する「削除記録(tombstone)」の仕組みを解説します。
削除したデータが復活する問題
一括採点では、あるパソコン(PC-A)で作成したデータを書き出して、 別のパソコン(PC-B)に読み込む機能があります。 これは複数の先生で採点を分担するときに欠かせない機能です。
ところが、次のような操作をすると困ったことが起きていました。
- PC-Aでデータを作成し、書き出してPC-Bに読み込む
- PC-Aで、ある生徒のデータを削除する
- PC-Aのデータを再びPC-Bに読み込む
- PC-Bでは、削除したはずの生徒がまだ残っている
PC-Aでは確かにデータを消したのに、PC-Bには以前読み込んだデータが残っています。 PC-Aから書き出したファイルにはもうその生徒のデータは含まれていませんが、 PC-B側には前回のインポートで取り込んだデータがそのまま残ってしまうのです。
身近なたとえでいうと、住所録を2冊コピーして使っている状況を想像してください。 1冊目からある人の情報を消しても、2冊目にはその人の情報が残ったままです。 1冊目をもう一度コピーし直しても、2冊目の既存の情報は消えません。 これと同じことが、パソコン間のデータ共有で起きていました。
Tombstone(墓石)とは何か
この問題を解決するために、「削除記録」という仕組みを導入しました。 英語ではtombstone(トゥームストーン)と呼ばれます。 直訳すると「墓石」です。
考え方はとてもシンプルです。 データを削除したとき、ただ消すだけではなく、「このデータを削除しました」という記録を別のテーブルに残しておきます。 住所録からある人の名前を消したら、別のノートに「この人は消しました」と控えておくようなものです。
データを消すだけでなく、「消した」という事実を記録に残す。 次にインポートするとき、その記録を確認して、削除済みのデータは取り込まないようにする。 これがtombstoneの役割です。
tombstoneテーブルには、削除されたデータのIDと削除日時が記録されます。 このテーブルは、データの書き出しファイルにも含まれます。 つまり、「何を削除したか」という情報も一緒に持ち運ばれるのです。
どのように動作するか
tombstoneの動作は、「削除するとき」と「インポートするとき」の2つの場面に分かれます。
削除するとき
- 先生がデータを削除する操作を行う
- 一括採点が、そのデータをデータベースから削除する
- 同時に、tombstoneテーブルに「このIDのデータを削除した」という記録を追加する
インポートするとき
- 書き出しファイルからデータを1件ずつ取り出す
- そのデータのIDがtombstoneテーブルに記録されていないか確認する
- 記録されていれば、そのデータはスキップする(取り込まない)
- 記録されていなければ、通常どおりインポートする
書き出しファイルにもtombstoneの情報が含まれています。 そのため、PC-Aで削除した記録は、PC-Bにインポートしたときに PC-B側のtombstoneテーブルにも反映されます。 PC-Bでもそのデータが削除済みとして扱われるようになるのです。
PC-AとPC-Bのやりとり — ステップごとの解説
先ほどの「削除したデータが復活する」シナリオを、 tombstoneの仕組みを使った場合でもう一度たどってみます。
ステップ1: 初回のデータ共有
PC-Aに「山田太郎」「佐藤花子」「鈴木一郎」の3人がいます。
PC-Aでデータを書き出し、PC-Bに読み込みます。
PC-Bにも3人のデータが入りました。
ステップ2: PC-Aでデータを削除
PC-Aで「鈴木一郎」を削除します。
PC-Aのデータベースから「鈴木一郎」が消えます。
同時に、tombstoneテーブルに「鈴木一郎のID」が記録されます。
ステップ3: 再びPC-Bにインポート
PC-Aでデータを書き出します。ファイルには「山田太郎」「佐藤花子」の2人分のデータと、tombstone情報が含まれます。
PC-Bに読み込むと、まずtombstone情報が反映されます。
PC-Bのtombstoneテーブルに「鈴木一郎のID」が記録されます。
PC-B側に残っていた「鈴木一郎」のデータも、tombstoneに基づいて削除されます。
PC-AでもPC-Bでも、「山田太郎」「佐藤花子」の2人だけが残っています。 削除したデータが復活することはありません。
全テーブル対応の意味
一括採点のデータベースには多くのテーブルがあります。 生徒データだけでなく、試験、クラス、採点領域、採点結果など、さまざまなデータがテーブルごとに管理されています。
tombstoneの仕組みは、最初は一部のテーブルにのみ対応していました。 しかし、それでは不十分です。 たとえば生徒データにはtombstoneがあるのに、採点結果にはない場合、 削除した採点結果がインポートで復活してしまいます。
そこで、インポート対象となるすべてのテーブルにtombstoneの仕組みを適用しました。 これにより、どの種類のデータを削除しても、インポート時に復活することがなくなりました。
生徒、クラス、試験、ページ、採点領域、採点結果、解答用紙の設定など、 一括採点で扱うすべてのデータについて、 削除した記録が保持されるようになっています。 どのデータを消しても、インポートで戻ってくる心配はありません。
tombstone(削除記録)は、「消したデータが復活しない」ことを保証するための仕組みです。 データを削除するときに「消しました」という記録を残し、 インポート時にその記録を参照して、削除済みのデータをスキップします。
一括採点では、すべてのテーブルにこの仕組みを適用しています。 複数のパソコンでデータをやりとりしても、 削除したデータが意図せず復活することはありません。 安心してデータの書き出し・読み込みをお使いください。
関連記事
- データを「移す」のは簡単、「統合する」のは難しい - インポートの課題
- IDの異なる別のパソコンの生徒を同じ生徒として扱うには - 読み込みウィザード
- 一括採点のデータベース設計 — 主なテーブルの全体像 - テーブル構造の解説