我已经在我的项目中实现了 levigo 包装器,所以我可以使用 LevelDB。该声明相当样板,如下所示:func NewLeveldbStorage(dbPath string) *leveldbStorage { opts := levigo.NewOptions() opts.SetCache(levigo.NewLRUCache(3<<30)) opts.SetCreateIfMissing(true) log.Debugf("Entering Open") db, err := levigo.Open(dbPath, opts); if err != nil { log.Fatal("BOOM %v", err) } log.Debugf("Finished calling open") opts.Close() return &leveldbStorage{db:db} }这是返回的结构:type leveldbStorage struct { db *levigo.DB}然后我在结构上做了一些简单的 GET 和 STORE 命令,它们基本上只使用s.db.Get和s.db.Put。这在我的测试中运行良好,但是当我运行以下基准测试时: func BenchmarkLeviDbGet(b *testing.B) { s := storage.NewLeveldbStorage("/path/to/db") value := "value" uid,_ := s.Store(value) b.ResetTimer() for i := 0; i < b.N; i++ { s.Get(uid) }该基准测试在运行时返回: 2014/10/12 21:17:09 BOOM %vIO error: lock /path/to/db/LOCK: already held by process有没有合适的方法使用 levigo/leveldb 来启用多线程阅读?写作呢?如果不可能进行多线程写入,我不会感到惊讶,但多线程读取似乎应该如此。我在这里做错了什么?
- 1 回答
- 0 关注
- 255 浏览
添加回答
举报
0/150
提交
取消