小编Vis*_*gid的帖子

Golang 的键值存储 (Badger DB) 中的性能问题

在 badgerDB 中,我们有数十亿个类型的键string和类型的值HashValueList。在我们的用例中,长度HashValueList可能以百万计。[]byte在插入 BadgerDb 之前,我们必须对键和值进行编码;我们正在使用该encoding/gob包。因此,每当我们需要值时,我们就必须再次解码它们。在我们的例子中,这个解码过程会产生开销。

type HashValue struct {
    Row_id  string
    Address string
}

type HashValueList []HashValue
Run Code Online (Sandbox Code Playgroud)

为了减轻解码开销,我们将设计更改为前缀迭代。通过前缀迭代,我们将集合中的每个值存储为不同的 Badger KV 对,而不是具有大值的单个键。键的前缀将是原始哈希值键。然后,我们需要添加一个后缀,以提供原始集合中值集合的唯一性。所以在你原来的方案中有类似的东西:

k1 -> [v1, v2, v3, ..., vn]
...
km -> [w1, ..., wm]
Run Code Online (Sandbox Code Playgroud)

现在有类似的东西:

k1@1 -> v1
k1@2 -> v2
k1@3 -> v2
...
k1@n -> vn
...
km@1 -> w1
...
km@m -> wm
Run Code Online (Sandbox Code Playgroud)

为了从 DB 中查找值,我们有 n 个 goroutine 读取通道KeyChan并将值写入ValChan

func Get(db *badger.DB, …
Run Code Online (Sandbox Code Playgroud)

go key-value-store leveldb rocksdb badgerdb

6
推荐指数
1
解决办法
2016
查看次数

标签 统计

badgerdb ×1

go ×1

key-value-store ×1

leveldb ×1

rocksdb ×1