KitDB icon indicating copy to clipboard operation
KitDB copied to clipboard

Sequence的建议

Open ermao3 opened this issue 5 years ago • 0 comments

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);
}
}

ermao3 avatar Mar 17 '20 06:03 ermao3