• 对keys的扫描操作
    • 前缀扫描
    • 范围扫描

    对keys的扫描操作

    key在一个bucket里面按照byte-sorted有序排序的,所以对于keys的扫描操作,在NutsDB里是很高效的。

    前缀扫描

    对于前缀的扫描,我们可以用PrefixScan 方法, 使用参数 limitNum 来限制返回的结果的数量,比方下面例子限制100个entries:

    1. if err := db.View(
    2. func(tx *nutsdb.Tx) error {
    3. prefix := []byte("user_")
    4. // 限制 100 entries 返回
    5. if entries, err := tx.PrefixScan(bucket, prefix, 100); err != nil {
    6. return err
    7. } else {
    8. keys, es := nutsdb.SortedEntryKeys(entries)
    9. for _, key := range keys {
    10. fmt.Println(key, string(es[key].Value))
    11. }
    12. }
    13. return nil
    14. }); err != nil {
    15. log.Fatal(err)
    16. }

    范围扫描

    对于范围的扫描,我们可以用 RangeScan 方法.

    例子:

    1. if err := db.View(
    2. func(tx *nutsdb.Tx) error {
    3. // 假设用户key从 user_0000000 to user_9999999.
    4. // 执行区间扫描类似这样一个start和end作为主要参数.
    5. start := []byte("user_0010001")
    6. end := []byte("user_0010010")
    7. bucket:= []byte("user_list)
    8. if entries, err := tx.RangeScan(bucket, start, end); err != nil {
    9. return err
    10. } else {
    11. keys, es := nutsdb.SortedEntryKeys(entries)
    12. for _, key := range keys {
    13. fmt.Println(key, string(es[key].Value))
    14. }
    15. }
    16. return nil
    17. }); err != nil {
    18. log.Fatal(err)
    19. }