class Storage(): def __init__(self, db_path): self._current_memtable = Memtable() self._sstable_group = SSTableGroup.from_directory(db_path) pass def put(self, key, value): self._current_memtable.put(key, value) # TODO: Check memtable size # If it's smaller than THRESHOLD: # Add key to memtable # Otherwise: # Write memtable to the new SSTable on disk(table + table index) # Load that SSTable's index into memory # Create new memtable # Add key to the new memtable def delete(self, key): # TODO: Same as put self._current_memtable.delete(key) def get(self, key): result = self._current_memtable.get(key) if result is not None: return result.get_value() result = self._sstable_group.get(key) if result is not None: return result.get_value() return None
def test_deletion(): memtable = Memtable() memtable.put("key1", "value1") memtable.put("key1", "value1-changed") memtable.delete("key1") assert memtable.get('key1').is_tombstone() == True
def test_retrieval(): memtable = Memtable() memtable.put("key1", "value1") memtable.put("key2", "value2") memtable.put("key2", "value2-changed") assert memtable.get('key1') == Item('key1', "value1", False) assert memtable.get('key2') == Item('key2', "value2-changed", False)