package com.alimama.mdrill.solr.hbaserealtime;
import java.util.Map;
import org.apache.solr.common.SolrInputDocument;
public class MdrillRealtime {
public static interface MdrillRealtimeClient {
public void open(String tablename,short shardcount,Map<?,?> params) throws Exception;
public void close() throws Exception;
/**
* 有则更新无则添加,每次调用都会产生一个递增的Oplog,将来在MdrillRealtimeOpLogs中可以获取
* inc 适用于计数的更新,要保证计数的原子操作,每次调用都会产生一个递增的Oplog,将来在MdrillRealtimeOpLogs中可以获取
*/
public void updateSet(short shard,String partion,long higo_uuid,MdrillInputDocument set,MdrillInputDocument inc,MdrillInputDocument del) throws Exception;
}
public static interface MdrillRealtimeOpLogs{
public void open(String tablename,int shardcount,int shard,String partion,Map<?,?> params) throws Exception;
public void close() throws Exception;
/**
* 获取下一个大于pos位置的document, 如果服务器出现异常,数据丢了,可以从指定消费的位置继续读取
* @param pos
* @return
*/
public Oplog getNext(long pos) throws Exception;
/**
* 获取插入的值
*/
public MdrillDocument get(long higo_uuid);
}
public static interface Oplog{
//单个shard内递增,他在单个shard内不能重复很关键
public byte[] getPos() ;
//对应MdrillRealtimeClient中的全局唯一的id,根据这个ID,可以通过client获取到SolrInputDocument
public long getHigoUuid();
//如果是删除操作,该项值返回true
}
public static interface MdrillInputDocument{
public Map<String,Object> getMap();
}
public static interface MdrillDocument
{
public long getPos() ;
public MdrillInputDocument getDoc();
}
}