Aerospike(以下简称Spike)
Spike客户端提供了对数据的标准操作(Operation)。要想在业务中合理的使用这些操作必须提前系统的掌握。
如下是个人对Spike客户端提供操作(Operation)的一些梳理。
1、基础-Operation协议类型
/**操作定义*/
public final class Operation {
......
public static enum Type {
READ(1),
READ_HEADER(1),
WRITE(2),
CDT_READ(3),
CDT_MODIFY(4),
MAP_READ(3),
MAP_MODIFY(4),
ADD(5),
APPEND(9),
PREPEND(10),
TOUCH(11);
}
......
}
2、标量bin操作
//@TODO ......
3、CDT bin操作
3.1、Map操作
3.1.1、MapOperation
com.aerospike.client.cdt.MapOperation
public class MapOperation {
private static final int SET_TYPE = 64;
//add
protected static final int ADD = 65;
protected static final int ADD_ITEMS = 66;
//put
protected static final int PUT = 67;
protected static final int PUT_ITEMS = 68;
//替换
protected static final int REPLACE = 69;
protected static final int REPLACE_ITEMS = 70;
//增加与减少 operateMapRank
private static final int INCREMENT = 73;
private static final int DECREMENT = 74;
//清除所有
private static final int CLEAR = 75;
//移除
private static final int REMOVE_BY_KEY = 76;
private static final int REMOVE_BY_INDEX = 77;
private static final int REMOVE_BY_RANK = 79;
private static final int REMOVE_BY_KEY_LIST = 81;
private static final int REMOVE_BY_VALUE = 82;
private static final int REMOVE_BY_VALUE_LIST = 83;
private static final int REMOVE_BY_KEY_INTERVAL = 84;
private static final int REMOVE_BY_INDEX_RANGE = 85;
private static final int REMOVE_BY_VALUE_INTERVAL = 86;
private static final int REMOVE_BY_RANK_RANGE = 87;
private static final int REMOVE_BY_KEY_REL_INDEX_RANGE = 88;
private static final int REMOVE_BY_VALUE_REL_RANK_RANGE = 89;
//所有元素个数量
private static final int SIZE = 96;
//获取数据
private static final int GET_BY_KEY = 97;
private static final int GET_BY_INDEX = 98;
private static final int GET_BY_RANK = 100;
private static final int GET_BY_VALUE = 102; // GET_ALL_BY_VALUE on server.
private static final int GET_BY_KEY_INTERVAL = 103;
private static final int GET_BY_INDEX_RANGE = 104;
private static final int GET_BY_VALUE_INTERVAL = 105;
private static final int GET_BY_RANK_RANGE = 106;
private static final int GET_BY_KEY_LIST = 107;
private static final int GET_BY_VALUE_LIST = 108;
private static final int GET_BY_KEY_REL_INDEX_RANGE = 109;
private static final int GET_BY_VALUE_REL_RANK_RANGE = 110;
3.1.2、MapOrder
package com.aerospike.client.cdt;
/**Map存储顺序.*/
public enum MapOrder {
/**未排序。默认值*/
UNORDERED(0),
/**按key排序*/
KEY_ORDERED(1),
/**先通过key排序,再通过value排序*/
KEY_VALUE_ORDERED(3);
......
}
3.1.3、MapPolicy
package com.aerospike.client.cdt;
/**创建map和写入map项时map策略指令*/
public final class MapPolicy {
/**具有普通Put语义的默认无序唯一键映射*/
public static final MapPolicy Default = new MapPolicy();
protected final int attributes;
protected final int flags;
protected final int itemCommand;
protected final int itemsCommand;
......
public MapPolicy(MapOrder order, MapWriteMode writeMode) {
this.attributes = order.attributes;
this.flags = MapWriteFlags.DEFAULT;
this.itemCommand = writeMode.itemCommand;
this.itemsCommand = writeMode.itemsCommand;
}
3.1.4、MapReturnType
package com.aerospike.client.cdt;
/**map返回类型。从map中选择或删除项目时要返回的数据类型。*/
public final class MapReturnType {
/**不要返回结果*/
public static final int NONE = 0;
/**返回key索引顺序,注:0:第一个key,N:第n个key,-1:最后一个key*/
public static final int INDEX = 1;
/**返回反向key顺序,注:0:最后一个key,-1:第一个key*/
public static final int REVERSE_INDEX = 2;
/**返回value顺序,注:0:最小值,N:第n个最小值,-1:最大值*/
public static final int RANK = 3;
/**返回反向value顺序,注:0:最大值,N:第n个最大值,-1:最小值*/
public static final int REVERSE_RANK = 4;
/**返回所选项目的数量*/
public static final int COUNT = 5;
/**key读取返回单key,范围key读取返回key列表。*/
public static final int KEY = 6;
/**单key读取的返回value,范围读取返回value的列表*/
public static final int VALUE = 7;
/**返回k/v项。可能的返回类型为: 1:HashMap:为无序映射; TreeMap:为键顺序映射; List<Entry>:为需要保留范围顺序的范围结果*/
public static final int KEY_VALUE = 8;
/**反转map命令和返回值的含义。启用反转标志后,将删除并返回指定key范围之外的key。
例如:MapOperation.removeByKeyRange(binName, keyBegin, keyEnd, MapReturnType.KEY | MapReturnType.INVERTED);*/
public static final int INVERTED = 0x10000;
}
3.1.5、MapWriteFlags应用版本>=4.3
package com.aerospike.client.cdt;
/**Map写入位标志,应用版本>=4.3*/
public final class MapWriteFlags {
/**默认允许创建与更新*/
public static final int DEFAULT = 0;
/**如果该项已存在,则该项将被拒绝。如果该键不存在,将创建一个新项。*/
public static final int CREATE_ONLY = 1;
/**如果该项已存在,则将覆盖该项。如果该项不存在,该项将被拒绝。*/
public static final int UPDATE_ONLY = 2;
/**如果由于写入标志约束而拒绝map项,则不引发错误*/
public static final int NO_FAIL = 4;
/**如果由于写入标志约束而拒绝map项,则允许提交其他有效的映射项。*/
public static final int PARTIAL = 8;
}
3.1.6、MapWriteMode 应用版本<4.3
package com.aerospike.client.cdt;
/**唯一键映射写入类型, 此枚举应仅用于低于4.3的服务器版本 .MapWriteFlags应用版本>=4.3*/
public enum MapWriteMode {
/**如果该项已存在,则将覆盖该项。如果该键不存在,将创建一个新项。*/
UPDATE (MapOperation.PUT, MapOperation.PUT_ITEMS),
/**如果该项已存在,则将覆盖该项。如果密钥不存在,写入将失败*/
UPDATE_ONLY (MapOperation.REPLACE, MapOperation.REPLACE_ITEMS),
/**如果key已经存在,则写入将失败。如果该key不存在,将创建一个新项。*/
CREATE_ONLY (MapOperation.ADD, MapOperation.ADD_ITEMS);
......
}
3.2、List操作
//@TODO ......