KitDB
KitDB copied to clipboard
Sequence的建议
Sequence 的incr 里面建议换成BigDecimal 这样可以支持几乎无限位自增
public class Sequence {
public final static String HEAD = KeyEnum.SEQ.getKey();
private final static byte[] HEAD_B = HEAD.getBytes();
private final byte[] key_b;
private DB db;
private BigDecimal version;
public synchronized String incr(String increments) throws RocksDBException {
BigDecimal increment = new BigDecimal(increments);
if (version == null) {
byte[] value = db.rocksDB().get(key_b);
if (value == null) {
version = BigDecimal.ZERO;
} else {
version = new BigDecimal(ArrayKits.bytesToString(value));
}
}
version = version.add(increment);
db.rocksDB().put(key_b, ArrayKits.convertStringToBytes(version.toPlainString()));
return version.toPlainString();
}
public String get() {
return version.toPlainString();
}
public Sequence(DB db, byte[] key) {
this.db = db;
this.key_b = ArrayKits.addAll(HEAD_B, key);
}
}