示例#1
0
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
示例#2
0
def test_deletion():
    memtable = Memtable()
    memtable.put("key1", "value1")
    memtable.put("key1", "value1-changed")
    memtable.delete("key1")

    assert memtable.get('key1').is_tombstone() == True
示例#3
0
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)