Skip to content

Commit c698b8d

Browse files
authored
Merge pull request #88 from ucwong/dev
Add nuts db as one of engines
2 parents 0eb73a8 + 95f5ef4 commit c698b8d

File tree

5 files changed

+297
-9
lines changed

5 files changed

+297
-9
lines changed

go.mod

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,16 +3,18 @@ module github.com/ucwong/golang-kv
33
go 1.20
44

55
require (
6-
github.com/cockroachdb/pebble v0.0.0-20230510135629-fe7ae7a62e0f
7-
github.com/dgraph-io/badger/v4 v4.0.2-0.20230509100715-ef0e55289cf7
6+
github.com/cockroachdb/pebble v0.0.0-20230519195609-e892f45bc7e2
7+
github.com/dgraph-io/badger/v4 v4.0.2-0.20230519043050-44b59785a8cd
8+
github.com/nutsdb/nutsdb v0.12.3-0.20230521084054-b0a6e1ba0c39
89
github.com/syndtr/goleveldb v1.0.1-0.20220721030215-126854af5e6d
910
github.com/ucwong/go-ttlmap v1.0.2-0.20221020173635-331e7ddde2bb
10-
go.etcd.io/bbolt v1.3.7-0.20230508234803-8b1ee10512cc
11+
go.etcd.io/bbolt v1.3.7-0.20230518005001-07579acf0c9a
1112
)
1213

1314
require (
1415
github.com/DataDog/zstd v1.5.2 // indirect
1516
github.com/beorn7/perks v1.0.1 // indirect
17+
github.com/bwmarrin/snowflake v0.3.0 // indirect
1618
github.com/cespare/xxhash/v2 v2.2.0 // indirect
1719
github.com/cockroachdb/errors v1.9.1 // indirect
1820
github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b // indirect
@@ -36,6 +38,8 @@ require (
3638
github.com/prometheus/common v0.42.0 // indirect
3739
github.com/prometheus/procfs v0.9.0 // indirect
3840
github.com/rogpeppe/go-internal v1.10.0 // indirect
41+
github.com/xujiajun/mmap-go v1.0.1 // indirect
42+
github.com/xujiajun/utils v0.0.0-20220904132955-5f7c5b914235 // indirect
3943
go.opencensus.io v0.24.0 // indirect
4044
golang.org/x/exp v0.0.0-20230321023759-10a507213a29 // indirect
4145
golang.org/x/net v0.8.0 // indirect

go.sum

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,11 @@ github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5
1212
github.com/aymerick/raymond v2.0.3-0.20180322193309-b565731e1464+incompatible/go.mod h1:osfaiScAUVup+UC9Nfq76eWqDhXlp+4UYaA8uhTBO6g=
1313
github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
1414
github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
15+
github.com/bwmarrin/snowflake v0.3.0 h1:xm67bEhkKh6ij1790JB83OujPR5CzNe8QuQqAgISZN0=
16+
github.com/bwmarrin/snowflake v0.3.0/go.mod h1:NdZxfVWX+oR6y2K0o6qAYv6gIOP9rjG0/E9WsDpxqwE=
1517
github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
1618
github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
19+
github.com/cespare/xxhash/v2 v2.1.2/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
1720
github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44=
1821
github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
1922
github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI=
@@ -29,8 +32,8 @@ github.com/cockroachdb/errors v1.9.1/go.mod h1:2sxOtL2WIc096WSZqZ5h8fa17rdDq9HZO
2932
github.com/cockroachdb/logtags v0.0.0-20211118104740-dabe8e521a4f/go.mod h1:Vz9DsVWQQhf3vs21MhPMZpMGSht7O/2vFW2xusFUVOs=
3033
github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b h1:r6VH0faHjZeQy818SGhaone5OnYfxFR/+AzdY3sf5aE=
3134
github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b/go.mod h1:Vz9DsVWQQhf3vs21MhPMZpMGSht7O/2vFW2xusFUVOs=
32-
github.com/cockroachdb/pebble v0.0.0-20230510135629-fe7ae7a62e0f h1:NQ2CYGSQoozmZlh8Md436mTqO7B0DNFgeitYw7Gn0LU=
33-
github.com/cockroachdb/pebble v0.0.0-20230510135629-fe7ae7a62e0f/go.mod h1:TkdVsGYRqtULUppt2RbC+YaKtTHnHoWa2apfFrSKABw=
35+
github.com/cockroachdb/pebble v0.0.0-20230519195609-e892f45bc7e2 h1:MnVO2CIKkGvP82UJopWja6nw7GZsxVLUKWGtzTKYa5I=
36+
github.com/cockroachdb/pebble v0.0.0-20230519195609-e892f45bc7e2/go.mod h1:TkdVsGYRqtULUppt2RbC+YaKtTHnHoWa2apfFrSKABw=
3437
github.com/cockroachdb/redact v1.1.3 h1:AKZds10rFSIj7qADf0g46UixK8NNLwWTNdCIGS5wfSQ=
3538
github.com/cockroachdb/redact v1.1.3/go.mod h1:BVNblN9mBWFyMyqK1k3AAiSxhvhfK2oOZZ2lK+dpvRg=
3639
github.com/codegangsta/inject v0.0.0-20150114235600-33e0aa1cb7c0/go.mod h1:4Zcjuz89kmFXt9morQgcfYZAYZ5n8WHjt81YYWIwtTM=
@@ -43,8 +46,8 @@ github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSs
4346
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
4447
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
4548
github.com/dgraph-io/badger v1.6.0/go.mod h1:zwt7syl517jmP8s94KqSxTlM6IMsdhYy6psNgSztDR4=
46-
github.com/dgraph-io/badger/v4 v4.0.2-0.20230509100715-ef0e55289cf7 h1:b7OofX+02tsxy3Midj88nwRsktdcsglG0yEnvHnLhes=
47-
github.com/dgraph-io/badger/v4 v4.0.2-0.20230509100715-ef0e55289cf7/go.mod h1:P50u28d39ibBRmIJuQC/NSdBOg46HnHw7al2SW5QRHg=
49+
github.com/dgraph-io/badger/v4 v4.0.2-0.20230519043050-44b59785a8cd h1:cPJbXgrVKbBIwa7rxVa6PJG6KVWYjLY42h1V1wWoQNc=
50+
github.com/dgraph-io/badger/v4 v4.0.2-0.20230519043050-44b59785a8cd/go.mod h1:P50u28d39ibBRmIJuQC/NSdBOg46HnHw7al2SW5QRHg=
4851
github.com/dgraph-io/ristretto v0.1.1 h1:6CWw5tJNgpegArSHpNHJKldNeq03FQCwYvfMVWajOK8=
4952
github.com/dgraph-io/ristretto v0.1.1/go.mod h1:S1GPSBCYCIhmVNfcth17y2zZtQT6wzkzgwUve0VDWWA=
5053
github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2 h1:tdlZCpZ/P9DhczCTSixgIKmwPv6+wP5DGjqLYw5SUiA=
@@ -191,6 +194,8 @@ github.com/nats-io/jwt v0.3.0/go.mod h1:fRYCDE99xlTsqUzISS1Bi75UBJ6ljOJQOAAu5Vgl
191194
github.com/nats-io/nats.go v1.9.1/go.mod h1:ZjDU1L/7fJ09jvUSRVBR2e7+RnLiiIQyqyzEE/Zbp4w=
192195
github.com/nats-io/nkeys v0.1.0/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w=
193196
github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c=
197+
github.com/nutsdb/nutsdb v0.12.3-0.20230521084054-b0a6e1ba0c39 h1:Rb5K/Rn/cyH0IUEF5mUqhsbw2avjjc7ufAlo8QW04e4=
198+
github.com/nutsdb/nutsdb v0.12.3-0.20230521084054-b0a6e1ba0c39/go.mod h1:FSztXVhUSK5YmedmZQ6m37cU/KpVbGaezUEmUBP8DEo=
194199
github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A=
195200
github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE=
196201
github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU=
@@ -273,15 +278,20 @@ github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2
273278
github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415/go.mod h1:GwrjFmJcFw6At/Gs6z4yjiIwzuJ1/+UwLxMQDVQXShQ=
274279
github.com/xeipuuv/gojsonschema v1.2.0/go.mod h1:anYRn/JVcOK2ZgGU+IjEV4nwlhoK5sQluxsYJ78Id3Y=
275280
github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q=
281+
github.com/xujiajun/gorouter v1.2.0/go.mod h1:yJrIta+bTNpBM/2UT8hLOaEAFckO+m/qmR3luMIQygM=
282+
github.com/xujiajun/mmap-go v1.0.1 h1:7Se7ss1fLPPRW+ePgqGpCkfGIZzJV6JPq9Wq9iv/WHc=
283+
github.com/xujiajun/mmap-go v1.0.1/go.mod h1:CNN6Sw4SL69Sui00p0zEzcZKbt+5HtEnYUsc6BKKRMg=
284+
github.com/xujiajun/utils v0.0.0-20220904132955-5f7c5b914235 h1:w0si+uee0iAaCJO9q86T6yrhdadgcsoNuh47LrUykzg=
285+
github.com/xujiajun/utils v0.0.0-20220904132955-5f7c5b914235/go.mod h1:MR4+0R6A9NS5IABnIM3384FfOq8QFVnm7WDrBOhIaMU=
276286
github.com/yalp/jsonpath v0.0.0-20180802001716-5cc68e5049a0/go.mod h1:/LWChgwKmvncFJFHJ7Gvn9wZArjbV5/FppcK2fKk/tI=
277287
github.com/yudai/gojsondiff v1.0.0/go.mod h1:AY32+k2cwILAkW1fbgxQ5mUmMiZFgLIV+FBNExI05xg=
278288
github.com/yudai/golcs v0.0.0-20170316035057-ecda9a501e82/go.mod h1:lgjkn3NuSvDfVJdfcVVdX+jpBxNmX4rDAzaS45IcYoM=
279289
github.com/yudai/pp v2.0.1+incompatible/go.mod h1:PuxR/8QJ7cyCkFp/aUDS+JY727OFEZkTdatxwunjIkc=
280290
github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
281291
github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
282292
github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k=
283-
go.etcd.io/bbolt v1.3.7-0.20230508234803-8b1ee10512cc h1:eJpgKB8ZyD4N7Ke0pmCFXkz9voA3wELHbtnr02fssS4=
284-
go.etcd.io/bbolt v1.3.7-0.20230508234803-8b1ee10512cc/go.mod h1:Gpl72SbxgstRmiprmz97EAQ8YY0qrKG6jHQEVYP+DKY=
293+
go.etcd.io/bbolt v1.3.7-0.20230518005001-07579acf0c9a h1:ujWV+qUt0smDnhcCocmcKP3ZlxSp4AiZeP1rkN0qU7I=
294+
go.etcd.io/bbolt v1.3.7-0.20230518005001-07579acf0c9a/go.mod h1:Gpl72SbxgstRmiprmz97EAQ8YY0qrKG6jHQEVYP+DKY=
285295
go.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0=
286296
go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo=
287297
golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
@@ -340,6 +350,7 @@ golang.org/x/sync v0.2.0 h1:PUR+T4wwASmuSTYdKjYHI5TD22Wy5ogLU5qZCOLxBrI=
340350
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
341351
golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
342352
golang.org/x/sys v0.0.0-20181205085412-a5c9d58dba9a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
353+
golang.org/x/sys v0.0.0-20181221143128-b4a75ba826a6/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
343354
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
344355
golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
345356
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
@@ -365,6 +376,7 @@ golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBc
365376
golang.org/x/sys v0.0.0-20211007075335-d3039528d8ac/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
366377
golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
367378
golang.org/x/sys v0.0.0-20220209214540-3681064d5158/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
379+
golang.org/x/sys v0.0.0-20220405210540-1e041c57c461/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
368380
golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
369381
golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
370382
golang.org/x/sys v0.0.0-20221010170243-090e33056c14/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=

kv.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ import (
1919
"github.com/ucwong/golang-kv/badger"
2020
"github.com/ucwong/golang-kv/bolt"
2121
"github.com/ucwong/golang-kv/leveldb"
22+
"github.com/ucwong/golang-kv/nutsdb"
2223
"github.com/ucwong/golang-kv/pebble"
2324
)
2425

@@ -37,3 +38,7 @@ func LevelDB(path string, opt ...leveldb.LevelDBOption) Bucket {
3738
func Pebble(path string, opt ...pebble.PebbleOption) Bucket {
3839
return pebble.Open(path, opt...)
3940
}
41+
42+
func NutsDB(path string, opt ...nutsdb.NutsdbOption) Bucket {
43+
return nutsdb.Open(path, opt...)
44+
}

kv_test.go

Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ func TestLocal(t *testing.T) {
2727
bolt1()
2828
badger1()
2929
leveldb1()
30+
nutsdb1()
3031
}
3132

3233
var batch int = 10
@@ -271,3 +272,87 @@ func badger1() {
271272
fmt.Printf("...........%s\n", string(f2))
272273
db.Close()
273274
}
275+
276+
func nutsdb1() {
277+
var db Bucket
278+
279+
db = NutsDB("")
280+
if db == nil {
281+
panic("nutsdb create err")
282+
}
283+
db.Set([]byte("yx"), []byte("yx"))
284+
db.Set([]byte("yy"), []byte("yy"))
285+
db.Set([]byte("a"), []byte("a"))
286+
db.Set([]byte("b"), []byte("b"))
287+
db.Set([]byte("x"), []byte("x"))
288+
db.Set([]byte("y"), []byte("y"))
289+
db.Set([]byte("xxy"), []byte("xxy"))
290+
db.Set([]byte("xxx"), []byte("xxx"))
291+
db.Set([]byte("xxxyx"), []byte("xxxyx"))
292+
db.Set([]byte("xyy"), []byte("xyy"))
293+
db.SetTTL([]byte("ttlxxxyx"), []byte("ttlxxxyx"), 1000*time.Millisecond)
294+
db.SetTTL([]byte("ttlxxxyx1"), []byte("ttlxxxyx1"), 2000*time.Millisecond)
295+
db.SetTTL([]byte("ttlxxxyx2"), []byte("ttlxxxyx2"), 5000*time.Millisecond)
296+
db.SetTTL([]byte("ttlxxxyx3"), []byte("ttlxxxyx3"), 5000*time.Millisecond)
297+
for i := 0; i < batch; i++ {
298+
db.SetTTL([]byte("ttlxxxyx3"+strconv.Itoa(i)), []byte("ttlxxxyx3"+strconv.Itoa(i)), 2000*time.Millisecond)
299+
}
300+
for i := 0; i < batch; i++ {
301+
db.SetTTL([]byte("ttlxxxyx4"+strconv.Itoa(i)), []byte("ttlxxxyx4"+strconv.Itoa(i)), 5000*time.Millisecond)
302+
}
303+
res := db.Scan()
304+
for _, i := range res {
305+
fmt.Printf("scan...%v...%s\n", len(res), string(i))
306+
}
307+
res = db.Range([]byte("xxx"), []byte("xxz"))
308+
for _, i := range res {
309+
fmt.Printf("range...%v...%s\n", len(res), string(i))
310+
}
311+
res = db.Prefix([]byte("xx"))
312+
for _, i := range res {
313+
fmt.Printf("prefix...%v...%s\n", len(res), string(i))
314+
}
315+
res = db.Suffix([]byte("x"))
316+
for _, i := range res {
317+
fmt.Printf("suffix...%v...%s\n", len(res), string(i))
318+
}
319+
res = db.Scan()
320+
for _, i := range res {
321+
fmt.Printf("scan...%v...%v\n", len(res), len(i))
322+
}
323+
//db.Del([]byte("xxy"))
324+
//res = db.Scan()
325+
//for _, i := range res {
326+
// fmt.Printf("...%v...%s\n", len(res), string(i))
327+
//}
328+
db.Del([]byte("xx"))
329+
time.Sleep(500 * time.Millisecond)
330+
f := db.Get([]byte("ttlxxxyx"))
331+
fmt.Printf("...........%s\n", string(f))
332+
333+
f1 := db.Get([]byte("xxy"))
334+
fmt.Printf("...........%s\n", string(f1))
335+
336+
for i := 0; i < batch/2; i++ {
337+
db.Set([]byte("ttlxxxyx4"+strconv.Itoa(i)), []byte("reset -> ttlxxxyx4"+strconv.Itoa(i)))
338+
}
339+
340+
for i := 0; i < batch; i++ {
341+
fmt.Printf("...........%s\n", string(db.Get([]byte("ttlxxxyx4"+strconv.Itoa(i)))))
342+
}
343+
344+
db.Del([]byte("ttlxxxyx1"))
345+
346+
time.Sleep(3000 * time.Millisecond)
347+
m := db.Get([]byte("ttlxxxyx"))
348+
fmt.Printf("...........%s\n", string(m))
349+
350+
db.Del([]byte("ttlxxxyx1"))
351+
352+
m2 := db.Get([]byte("ttlxxxyx1"))
353+
fmt.Printf("...........%s\n", string(m2))
354+
355+
f2 := db.Get([]byte("xxy"))
356+
fmt.Printf("...........%s\n", string(f2))
357+
db.Close()
358+
}

0 commit comments

Comments
 (0)