Skip to content

Commit ef1d5df

Browse files
committed
test: Add more test
--story=1
1 parent 7f20519 commit ef1d5df

File tree

2 files changed

+107
-1
lines changed

2 files changed

+107
-1
lines changed

README.md

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,5 +68,70 @@ sdb, err := NewShardingDb(Sha256Sharding, db1, db2)
6868
...
6969
```
7070
71+
## Performance Benchmark
72+
73+
### Environment
74+
* Intel(R) Xeon(R) Platinum 8255C CPU @ 2.50GHz * 10 Core
75+
* 40GB RAM
76+
* 3 SSD: /data, /data1, /
77+
78+
generate data by command:
79+
```bash
80+
go test -run "TestCompareDbPerformance"
81+
```
82+
Test case: total 1000000 key-value pairs, 100 go routines, 100 key-value pairs per batch.
83+
84+
### 1. PutData
85+
86+
| Data Size | LevelDB | ShardingDB(3 folders) | ShardingDB(6 folders) | ShardingDB(encrypt 3 folders) |
87+
|:---------:|:-------:|:---------------------:|:---------------------:|:-----------------------------:|
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 | 0.0016s |
93+
94+
### 2. GetData
95+
96+
| Data Size | LevelDB | ShardingDB(3 folders) | ShardingDB(6 folders) | ShardingDB(encrypt 3 folders) |
97+
|:---------:|:-------:|:---------------------:|:---------------------:|:-----------------------------:|
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 | 0.0016s |
103+
104+
### 3. GetData not found
105+
106+
| Data Size | LevelDB | ShardingDB(3 folders) | ShardingDB(6 folders) | ShardingDB(encrypt 3 folders) |
107+
|:---------:|:-------:|:---------------------:|:---------------------:|:-----------------------------:|
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 | 0.0016s |
113+
114+
115+
### 4. DeleteData
116+
117+
| Data Size | LevelDB | ShardingDB(3 folders) | ShardingDB(6 folders) | ShardingDB(encrypt 3 folders) |
118+
|:---------:|:-------:|:---------------------:|:---------------------:|:-----------------------------:|
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 | 0.0016s |
124+
125+
### 5. Iterator
126+
127+
| Data Size | LevelDB | ShardingDB(3 folders) | ShardingDB(6 folders) | ShardingDB(encrypt 3 folders) |
128+
|:---------:|:-------:|:---------------------:|:---------------------:|:-----------------------------:|
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 | 0.0016s |
134+
135+
71136
72137
Most 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).

performance_test.go

Lines changed: 42 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,17 @@ func TestCompareDbPerformance(t *testing.T) {
9797
TestShardingDbEncryptPerformance(t)
9898
}
9999
}
100-
100+
func TestCompareShardingCountPerformance(t *testing.T) {
101+
sizes := []int{100, 200, 500, 1024, 10240}
102+
shardingCount := []int{9, 30, 60}
103+
for _, size := range sizes {
104+
valueLength = size
105+
for _, count := range shardingCount {
106+
diskCount = count
107+
TestShardingNDbPerformance(t)
108+
}
109+
}
110+
}
101111
func TestShardingDbPerformance(t *testing.T) {
102112
pathList := []string{"/data/leveldb", "/data1/leveldb", getTempDir()}
103113
//remove all folder
@@ -117,6 +127,37 @@ func TestShardingDbPerformance(t *testing.T) {
117127
}
118128
}
119129

130+
var diskCount = 6
131+
132+
func TestShardingNDbPerformance(t *testing.T) {
133+
var pathList []string
134+
for i := 0; i < diskCount; i++ {
135+
pathList = append(pathList, fmt.Sprintf("/data/leveldb%d", i))
136+
i++
137+
pathList = append(pathList, fmt.Sprintf("/data1/leveldb%d", i))
138+
i++
139+
pathList = append(pathList, getTempDir())
140+
}
141+
//remove all folder
142+
for _, path := range pathList {
143+
os.RemoveAll(path)
144+
}
145+
fmt.Printf("ShardingDb path[%v]", pathList)
146+
//Test shardingdb performance
147+
db, _ := OpenFile(pathList, nil)
148+
testDbPerformance(t, db, fmt.Sprintf("shardingdb%d", diskCount))
149+
db.Close()
150+
151+
//Print every folder size
152+
for _, path := range pathList {
153+
size, _ := folderSize(path)
154+
fmt.Printf("Folder[%s] size:%d\n", path, size)
155+
}
156+
//delete folder
157+
for _, path := range pathList {
158+
os.RemoveAll(path)
159+
}
160+
}
120161
func TestSharding6DbPerformance(t *testing.T) {
121162
pathList := []string{"/data/leveldb", "/data1/leveldb", "/data/leveldb1", "/data1/leveldb1", getTempDir(), getTempDir()}
122163
//remove all folder

0 commit comments

Comments
 (0)