write patch engine

This commit is contained in:
2024-05-04 10:24:52 +00:00
parent 9b8c1569a6
commit 6af4d88535
7 changed files with 343 additions and 18 deletions

View File

@ -68,11 +68,15 @@ class DiskMap : public DataDriverBase {
return true;
}
bool Put(const Key &key, Value &value) {
if (indexer->Put(key, data_storage->preview_next_blank())) {
data_storage->write(value);
return true;
b_plus_tree_value_index_t data_id;
data_id = indexer->Get(key);
if (data_id != kInvalidValueIndex) {
data_storage->update(value, data_id);
return false;
}
return false;
data_id = data_storage->write(value);
indexer->Put(key, data_id);
return true;
}
};
#endif // DISK_MAP_H

View File

@ -60,18 +60,18 @@ class SingleValueStorage {
memcpy(raw_mem + n * sizeof(int), &tmp, sizeof(int));
}
size_t preview_next_blank() {
if (first_blank_element_pair_id != 0) return first_blank_element_pair_id;
frame_id_t frame_id;
BasicPageGuard guard = bpm->NewPageGuarded(&frame_id);
first_blank_element_pair_id = frame_id * max_element_in_page;
for (size_t i = 0; i < max_element_in_page - 1; i++) {
guard.AsMut<Page>()->dat.elements[i].nxt_blank = first_blank_element_pair_id + i + 1;
}
guard.AsMut<Page>()->dat.elements[max_element_in_page - 1].nxt_blank = 0;
guard.AsMut<Page>()->dat.elements_count = 0;
return first_blank_element_pair_id;
}
// size_t preview_next_blank() {
// if (first_blank_element_pair_id != 0) return first_blank_element_pair_id;
// frame_id_t frame_id;
// BasicPageGuard guard = bpm->NewPageGuarded(&frame_id);
// first_blank_element_pair_id = frame_id * max_element_in_page;
// for (size_t i = 0; i < max_element_in_page - 1; i++) {
// guard.AsMut<Page>()->dat.elements[i].nxt_blank = first_blank_element_pair_id + i + 1;
// }
// guard.AsMut<Page>()->dat.elements[max_element_in_page - 1].nxt_blank = 0;
// guard.AsMut<Page>()->dat.elements_count = 0;
// return first_blank_element_pair_id;
// }
int write(T &t) {
size_t element_id = first_blank_element_pair_id;
size_t res_id = 0;