Closed taroim closed 1 year ago
能把你的代码贴一下吗
package main
import (
"crypto/rand"
"fmt"
"github.com/rosedblabs/rosedb/v2"
)
func generateRandomBinaryData(size int) ([]byte, error) {
data := make([]byte, size)
_, err := rand.Read(data)
if err != nil {
return nil, err
}
return data, nil
}
func main() {
opts := rosedb.Options{
DirPath: ".",
BlockCache: 100 * rosedb.MB,
SegmentSize: 2 * rosedb.GB,
}
db, err := rosedb.Open(opts)
if err != nil {
fmt.Printf("open error: %v", err)
return
}
defer db.Close()
data, _ := generateRandomBinaryData(1024 * 100)
for i := 0; i < 100; i++ {
key := fmt.Sprintf("test___%v___", i)
err := db.Put([]byte(key), data)
if err != nil {
fmt.Printf("put error: %v", err)
return
}
}
if err := db.Merge(); err != nil {
fmt.Printf("merge error: %v", err)
return
}
// 如果这里重复执行 Merge() 的话
// 那么下一轮运行本程序就会出现:open error: remove 000000002.SEG: no such file or directory
if err := db.Merge(); err != nil {
fmt.Printf("merge error: %v", err)
return
}
}
以下代码来自示例中:
package main
import (
"github.com/rosedblabs/rosedb/v2"
"github.com/rosedblabs/rosedb/v2/utils"
)
// this file shows how to use the Merge feature of rosedb.
// Merge is used to merge the data files in the database.
// It is recommended to use it when the database is not busy.
func main() {
// specify the options
options := rosedb.DefaultOptions
options.DirPath = "/tmp/rosedb_merge"
// open a database
db, err := rosedb.Open(options)
if err != nil {
panic(err)
}
defer func() {
_ = db.Close()
}()
// write some data
for i := 0; i < 100000; i++ {
_ = db.Put([]byte(utils.GetTestKey(i)), utils.RandomValue(128))
}
// 将以下代码注释后,多执行几次程序就会出现:remove 000000002.SEG: no such file or directory
// delete some data
//for i := 0; i < 100000/2; i++ {
// _ = db.Delete([]byte(utils.GetTestKey(i)))
//}
// then merge the data files
// all the invalid data will be removed, and the valid data will be merged into the new data files.
_ = db.Merge()
}
@taroim Thank you for your feedback, I hope this pr can help you. https://github.com/rosedblabs/rosedb/pull/243
已经在最新的 Commit 中修复了,请问你是打算使用 rosedb 还是仅学习? @taroim
@Jeremy-Run Thank you, the speed of problem-solving is very fast, thumbs up! @roseduan 这个项目很棒,在将其应用到实际项目中之前,我希望先进行学习和测试。
@Jeremy-Run Thank you, the speed of problem-solving is very fast, thumbs up! @roseduan 这个项目很棒,在将其应用到实际项目中之前,我希望先进行学习和测试。
好的,谢谢,有任何问题都可以反馈
当 Merge() 方法连续执行两次后,重新打开数据库,就会提示:remove 000000002.SEG: no such file or directory
why is that?