-
Notifications
You must be signed in to change notification settings - Fork 14
Open
Description
issue #28 のような問題があるので、
(データ領域ではなく)PUTレコード側にデータのchecksumも書くべきかどうか、
ということを議論したい。
データそのものの整合性というより、ジャーナルレコードとそこに紐づくデータの整合性に注目している。
すぐに考えられる実装としては以下の二つがある:
- PUTレコードを変更し(従ってストレージフォーマットが変更になる)、データのchecksumのためのフィールドを追加する。
- PUTレコードを変更せずに(ストレージフォーマットの変更は不要だがマイグレーションが必要)、の計算において
cannyls/src/storage/journal/record.rs
Lines 110 to 117 in 8759940
JournalRecord::Put(ref lump_id, portion) => { adler32.update(TAG_PUT); adler32.update_buffer(&lump_id_to_u128(lump_id)[..]); let mut buf = [0; 7]; BigEndian::write_u16(&mut buf, portion.len); BigEndian::write_uint(&mut buf[2..], portion.start.as_u64(), PORTION_SIZE); adler32.update_buffer(&buf); } portionもchecksumに含めてしまう。
すぐに考えられるデメリット:
- checksumの計算に追加の時間がかかる
- 書き込み時と読み込み時で2回の新しい計算が必要
- データサイズに応じてどの程度かかるものか計測する必要がある
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels