All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.github.ltsopensource.kv.iterator.MemIteratorImpl Maven / Gradle / Ivy

package com.github.ltsopensource.kv.iterator;

import com.github.ltsopensource.kv.Entry;
import com.github.ltsopensource.kv.cache.DataCache;
import com.github.ltsopensource.kv.data.DataBlockEngine;
import com.github.ltsopensource.kv.index.IndexItem;
import com.github.ltsopensource.kv.index.MemIndex;

import java.util.Iterator;
import java.util.Map;

/**
 * @author Robert HG ([email protected]) on 12/18/15.
 */
public class MemIteratorImpl implements DBIterator> {

    private Iterator>> iterator;
    private DataBlockEngine dataBlockEngine;
    private DataCache dataCache;
    private MemIndex index;

    public MemIteratorImpl(MemIndex index, DataBlockEngine dataBlockEngine, DataCache dataCache) {
        this.index = index;
        this.dataBlockEngine = dataBlockEngine;
        this.dataCache = dataCache;
        this.iterator = index.getIndexMap().entrySet().iterator();
    }

    @Override
    public boolean hasNext() {
        return iterator.hasNext();
    }

    @Override
    public Entry next() {
        Map.Entry> entry = iterator.next();
        IndexItem index = entry.getValue();

        // 1. 从缓存中读取
        V value = dataCache.get(index.getKey());
        if (value != null) {
            return new Entry(entry.getKey(), value);
        }
        // 2. 从文件中读取
        value = dataBlockEngine.getValue(index);
        if (value == null) {
            return null;
        }
        return new Entry(entry.getKey(), value);
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy