package com.alibaba.doris.dataserver.store; import java.util.Iterator; import java.util.List; import java.util.Map; import com.alibaba.doris.common.data.Key; import com.alibaba.doris.common.data.Pair; import com.alibaba.doris.common.data.Value; /** * @author ajun Email:jack.yuj@alibaba-inc.com */ public interface Storage { /** * 从存储中读取指定Key的Value值,如果数据不存在,则返回一个NullValue对象。 * * @param key * @return */ public Value get(Key key); /** * 从存储中获取指定Key列表的值,返回一个Map对象保存所有对应的Value对象。<br> * 同get方法类似。 * * @param keyIterator * @return */ public Map<Key, Value> getAll(Iterable<Key> keyIterator); /** * 保存指定Key,Value值到底层存储中,如果Key值已经在Storage中存在,则替换原有的值。<br> * 如果Key在Storage中不存在,则在新增并保存该值。 * * @param key * @param value */ public void set(Key key, Value value); /** * 保存指定Key,Value值到底层存储当中,<br> * 同普通的set的方法相比,这个set命令可以设置版本号比较,<br> * 只有当传入参数Value的版本号比存储中的版本号新的情况下,<br> * SET操作才执行成功,否则驱动层会抛出一个版本冲突异常。 * * @param key * @param value * @param isSetWithCompare */ public void set(Key key, Value value, boolean isSetWithCompareVersion); /** * 从存储层删除一个Key对应的值。 * * @param key */ public boolean delete(Key key); /** * 从存储层删除一个Key对应的值。 * * @param key */ public boolean delete(Key key, Value value); /** * 从存储层删除虚拟节点对应的所有数据。 * * @param key */ public boolean delete(List<Integer> vnodeList); /** * 该迭代器实例每次迭代都会返回一个Pair对象,通过该对象可以获取对应的Key和Value对象。<br> * 注意,迭代器迭代过程中并不能准确实时的反应存储层的实际数据,<br> * 即迭代返回的数据有可能在随后的查询中已经被删除。 * * @return Iteraor<Pair>对象,标识一个遍历存储层的查询迭代器实例。 */ public Iterator<Pair> iterator(); /** * 该迭代器实例每次迭代都会返回一个Pair对象,通过该对象可以获取对应的Key和Value对象。<br> * 注意,迭代器迭代过程中并不能准确实时的反应存储层的实际数据,<br> * 即迭代返回的数据有可能在随后的查询中已经被删除。 * * @param vnodeList 要遍历数据的虚拟节点编号列表; * @return Iteraor<Pair>对象,标识一个遍历存储层的查询迭代器实例。 */ public Iterator<Pair> iterator(List<Integer> vnodeList); /** * 打开一个存储,任何Storage都必须先Open后才能够调用具体的存取值等操作。 */ public void open(); /** * 关闭一个Storage,当系统关闭时,需要调用此函数来确保存储正常关闭。<br> * 如果关闭Storage时未凋有Close方法,可能会造成缓存中的数据没有及时刷新到物理存储,<br> * 进而造成数据丢失。 */ public void close(); /** * 获取当前存储的类型。 * * @return */ public StorageType getType(); }