- 对keys的扫描操作
- 前缀扫描
- 范围扫描
对keys的扫描操作
key在一个bucket里面按照byte-sorted有序排序的,所以对于keys的扫描操作,在NutsDB里是很高效的。
前缀扫描
对于前缀的扫描,我们可以用PrefixScan 方法, 使用参数 limitNum 来限制返回的结果的数量,比方下面例子限制100个entries:
if err := db.View(func(tx *nutsdb.Tx) error {prefix := []byte("user_")// 限制 100 entries 返回if entries, err := tx.PrefixScan(bucket, prefix, 100); err != nil {return err} else {keys, es := nutsdb.SortedEntryKeys(entries)for _, key := range keys {fmt.Println(key, string(es[key].Value))}}return nil}); err != nil {log.Fatal(err)}
范围扫描
对于范围的扫描,我们可以用 RangeScan 方法.
例子:
if err := db.View(func(tx *nutsdb.Tx) error {// 假设用户key从 user_0000000 to user_9999999.// 执行区间扫描类似这样一个start和end作为主要参数.start := []byte("user_0010001")end := []byte("user_0010010")bucket:= []byte("user_list)if entries, err := tx.RangeScan(bucket, start, end); err != nil {return err} else {keys, es := nutsdb.SortedEntryKeys(entries)for _, key := range keys {fmt.Println(key, string(es[key].Value))}}return nil}); err != nil {log.Fatal(err)}
