11# shardingdb
22
3- This package enables LevelDB to support sharding and concurrent reads/writes, and can be used as a drop-in replacement for LevelDB.
4-
3+ ShardingDB is an open-source, sharded database enhancing LevelDB with concurrent reads/writes support.
4+ It significantly improves performance, boosting PutData by 60x and GetData by 7x, making it an ideal drop-in replacement for LevelDB.
55-----------
66
77## Requirements
@@ -64,7 +64,7 @@ if err != nil {
6464 t.Fatal(err)
6565}
6666// Create a new sharding db
67- sdb, err := NewShardingDb(Sha256Sharding, db1, db2)
67+ sdb, err := shardingdb. NewShardingDb(shardingdb.WithDbHandles( db1,db2), shardingdb.WithShardingFunc(MurmurSharding) )
6868...
6969` ` `
7070
@@ -80,57 +80,57 @@ generate data by command:
8080go test -timeout 60m -run " TestCompareDbPerformance"
8181` ` `
8282Test case: total 1000000 key-value pairs, 100 go routines, 100 key-value pairs per batch.
83-
83+ result means the time cost(second) of the whole operation.
8484# ## 1. PutData
8585
8686| Data Size | LevelDB | ShardingDB(3 folders) | ShardingDB(6 folders) | ShardingDB(encrypt 3 folders) |
8787| :---------:| :-------:| :---------------------:| :---------------------:| :-----------------------------:|
88- | 100B | 2.27s | 0.659s | 0.581s | 0.953s |
89- | 200B | 4.45s | 1.07s | 0.683s | 1.9s |
90- | 500B | 15.3s | 3.36s | 1.49s | 6.4s |
91- | 1KB | 48.9s | 9.42s | 3.74s | 17.69s |
92- | 10KB | 1117s | 351s | 123s | 308s |
88+ | 100B | 2.27 | 0.659 | 0.581 | 0.953 |
89+ | 200B | 4.45 | 1.07 | 0.683 | 1.9 |
90+ | 500B | 15.3 | 3.36 | 1.49 | 6.4 |
91+ | 1KB | 48.9 | 9.42 | 3.74 | 17.69 |
92+ | 10KB | 1117 | 351 | 123 | 308 |
9393
9494# ## 2. GetData
9595
9696| Data Size | LevelDB | ShardingDB(3 folders) | ShardingDB(6 folders) | ShardingDB(encrypt 3 folders) |
9797| :---------:| :-------:| :---------------------:| :---------------------:| :-----------------------------:|
98- | 100B | 2.23s | 1.25s | 1.02s | 1.86s |
99- | 200B | 3.09s | 1.42s | 1.27s | 2.24s |
100- | 500B | 4.17s | 1.91s | 1.62s | 3.73s |
101- | 1KB | 7.97s | 2.37s | 2.26s | 4.53s |
102- | 10KB | 12.75s | 9.54s | 11.03s | 13.85s |
98+ | 100B | 2.23 | 1.25 | 1.02 | 1.86 |
99+ | 200B | 3.09 | 1.42 | 1.27 | 2.24 |
100+ | 500B | 4.17 | 1.91 | 1.62 | 3.73 |
101+ | 1KB | 7.97 | 2.37 | 2.26 | 4.53 |
102+ | 10KB | 12.75 | 9.54 | 11.03 | 13.85 |
103103
104104# ## 3. GetData not found
105105
106106| Data Size | LevelDB | ShardingDB(3 folders) | ShardingDB(6 folders) | ShardingDB(encrypt 3 folders) |
107107| :---------:| :-------:| :---------------------:| :---------------------:| :-----------------------------:|
108- | 100B | 2.14s | 1.36s | 0.87s | 1.43s |
109- | 200B | 2.07s | 1.47s | 0.9s | 1.6s |
110- | 500B | 2.05s | 1.51s | 0.93s | 1.81s |
111- | 1KB | 2.35s | 1.64s | 0.891s | 2.28s |
112- | 10KB | 8.68s | 5.56s | 2.48s | 7.75s |
108+ | 100B | 2.14 | 1.36 | 0.87 | 1.43 |
109+ | 200B | 2.07 | 1.47 | 0.9 | 1.6 |
110+ | 500B | 2.05 | 1.51 | 0.93 | 1.81 |
111+ | 1KB | 2.35 | 1.64 | 0.891 | 2.28 |
112+ | 10KB | 8.68 | 5.56 | 2.48 | 7.75 |
113113
114114
115115# ## 4. DeleteData
116116
117117| Data Size | LevelDB | ShardingDB(3 folders) | ShardingDB(6 folders) | ShardingDB(encrypt 3 folders) |
118118| :---------:| :-------:| :---------------------:| :---------------------:| :-----------------------------:|
119- | 100B | 3.82s | 2.76s | 1.02s | 1.72s |
120- | 200B | 3.81s | 1.71s | 1.02s | 1.74s |
121- | 500B | 3.85s | 1.76s | 1.05s | 1.69s |
122- | 1KB | 3.84s | 1.72s | 1.04s | 1.74s |
123- | 10KB | 3.844s | 1.78s | 1.06s | 1.76s |
119+ | 100B | 3.82 | 2.76 | 1.02 | 1.72 |
120+ | 200B | 3.81 | 1.71 | 1.02 | 1.74 |
121+ | 500B | 3.85 | 1.76 | 1.05 | 1.69 |
122+ | 1KB | 3.84 | 1.72 | 1.04 | 1.74 |
123+ | 10KB | 3.844 | 1.78 | 1.06 | 1.76 |
124124
125125# ## 5. Iterator
126126
127127| Data Size | LevelDB | ShardingDB(3 folders) | ShardingDB(6 folders) | ShardingDB(encrypt 3 folders) |
128128| :---------:| :-------:| :---------------------:| :---------------------:| :-----------------------------:|
129- | 100B | 0.133s | 0.184s | 0.222s | 0.18s |
130- | 200B | 0.151s | 0.246s | 0.246s | 0.191s |
131- | 500B | 0.282s | 0.351s | 0.41s | 0.344s |
132- | 1KB | 0.514s | 0.419s | 0.472s | 0.541s |
133- | 10KB | 2.46s | 2.39s | 1.96s | 2.3s |
129+ | 100B | 0.133 | 0.184 | 0.222 | 0.18 |
130+ | 200B | 0.151 | 0.246 | 0.246 | 0.191 |
131+ | 500B | 0.282 | 0.351 | 0.41 | 0.344 |
132+ | 1KB | 0.514 | 0.419 | 0.472 | 0.541 |
133+ | 10KB | 2.46 | 2.39 | 1.96 | 2.3 |
134134
135135
136136# ## 6. Sharding count compare
@@ -142,19 +142,19 @@ go test -timeout 60m -run "TestCompareShardingCountPerformance"
142142# ### 6.1 PutData
143143| Data Size | ShardingDB(3 folders) | ShardingDB(6 folders) | ShardingDB(9 folders) | ShardingDB(30 folders) | ShardingDB(60 folders) |
144144| :---------:| :---------------------:| :---------------------:| :---------------------:| :----------------------:| :----------------------:|
145- | 100B | 0.659s | 0.581s | 0.506s | 0.564s | 0.728s |
146- | 200B | 1.07s | 0.683s | 0.624s | 0.685s | 0.782s |
147- | 500B | 3.36s | 1.49s | 1.20s | 1.18s | 1.21s |
148- | 1KB | 9.42s | 3.74s | 2.33s | 1.92s | 1.96s |
149- | 10KB | 351s | 123s | 54s | 26s | 18.2s |
145+ | 100B | 0.659 | 0.581 | 0.506 | 0.564 | 0.728 |
146+ | 200B | 1.07 | 0.683 | 0.624 | 0.685 | 0.782 |
147+ | 500B | 3.36 | 1.49 | 1.20 | 1.18 | 1.21 |
148+ | 1KB | 9.42 | 3.74 | 2.33 | 1.92 | 1.96 |
149+ | 10KB | 351 | 123 | 54 | 26 | 18.2 |
150150# ### 6.2 GetData
151151| Data Size | ShardingDB(3 folders) | ShardingDB(6 folders) | ShardingDB(9 folders) | ShardingDB(30 folders) | ShardingDB(60 folders) |
152152| :---------:| :---------------------:| :---------------------:| :---------------------:| :----------------------:| :----------------------:|
153- | 100B | 1.25s | 1.02s | 1.03s | 0.343s | 0.366s |
154- | 200B | 1.42s | 1.27s | 1.01s | 0.66s | 0.373s |
155- | 500B | 1.91s | 1.62s | 1.21s | 0.96s | 1.34s |
156- | 1KB | 2.37s | 2.26s | 1.83s | 1.18s | 1.19s |
157- | 10KB | 9.54s | 11.03s | 7.67s | 4.8s | 3.4s |
153+ | 100B | 1.25 | 1.02 | 1.03 | 0.343 | 0.366 |
154+ | 200B | 1.42 | 1.27 | 1.01 | 0.66 | 0.373 |
155+ | 500B | 1.91 | 1.62 | 1.21 | 0.96 | 1.34 |
156+ | 1KB | 2.37 | 2.26 | 1.83 | 1.18 | 1.19 |
157+ | 10KB | 9.54 | 11.03 | 7.67 | 4.8 | 3.4 |
158158
159159
160160Most interfaces are the same as [goleveldb](https://github.com/syndtr/goleveldb). For my interface definition, please refer to [DbHandle](https://github.com/studyzy/shardingdb/blob/main/interfaces.go).
0 commit comments