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