forked from nutsdb/nutsdb
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathoptions.go
More file actions
143 lines (114 loc) · 3.47 KB
/
options.go
File metadata and controls
143 lines (114 loc) · 3.47 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
// Copyright 2019 The nutsdb Author. All rights reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package nutsdb
// EntryIdxMode represents entry index mode.
type EntryIdxMode int
const (
// HintKeyValAndRAMIdxMode represents ram index (key and value) mode.
HintKeyValAndRAMIdxMode EntryIdxMode = iota
// HintKeyAndRAMIdxMode represents ram index (only key) mode.
HintKeyAndRAMIdxMode
// HintBPTSparseIdxMode represents b+ tree sparse index mode.
HintBPTSparseIdxMode
)
// Options records params for creating DB object.
type Options struct {
// Dir represents Open the database located in which dir.
Dir string
// EntryIdxMode represents using which mode to index the entries.
EntryIdxMode EntryIdxMode
// RWMode represents the read and write mode.
// RWMode includes two options: FileIO and MMap.
// FileIO represents the read and write mode using standard I/O.
// MMap represents the read and write mode using mmap.
RWMode RWMode
SegmentSize int64
// NodeNum represents the node number.
// Default NodeNum is 1. NodeNum range [1,1023].
NodeNum int64
// SyncEnable represents if call Sync() function.
// if SyncEnable is false, high write performance but potential data loss likely.
// if SyncEnable is true, slower but persistent.
SyncEnable bool
// MaxFdNumsInCache represents the max numbers of fd in cache.
MaxFdNumsInCache int
// CleanFdsCacheThreshold represents the maximum threshold for recycling fd, it should be between 0 and 1.
CleanFdsCacheThreshold float64
// BufferSizeOfRecovery represents the buffer size of recoveryReader buffer Size
BufferSizeOfRecovery int
}
const (
B = 1
KB = 1024 * B
MB = 1024 * KB
GB = 1024 * MB
)
// defaultSegmentSize is default data file size.
var defaultSegmentSize int64 = 256 * MB
// DefaultOptions represents the default options.
var DefaultOptions = func() Options {
return Options{
EntryIdxMode: HintKeyValAndRAMIdxMode,
SegmentSize: defaultSegmentSize,
NodeNum: 1,
RWMode: FileIO,
SyncEnable: true,
}
}()
type Option func(*Options)
func WithDir(dir string) Option {
return func(opt *Options) {
opt.Dir = dir
}
}
func WithEntryIdxMode(entryIdxMode EntryIdxMode) Option {
return func(opt *Options) {
opt.EntryIdxMode = entryIdxMode
}
}
func WithRWMode(rwMode RWMode) Option {
return func(opt *Options) {
opt.RWMode = rwMode
}
}
func WithSegmentSize(size int64) Option {
return func(opt *Options) {
opt.SegmentSize = size
}
}
func WithNodeNum(num int64) Option {
return func(opt *Options) {
opt.NodeNum = num
}
}
func WithSyncEnable(enable bool) Option {
return func(opt *Options) {
opt.SyncEnable = enable
}
}
func WithMaxFdNumsInCache(num int) Option {
return func(opt *Options) {
opt.MaxFdNumsInCache = num
}
}
func WithCleanFdsCacheThreshold(threshold float64) Option {
return func(opt *Options) {
opt.CleanFdsCacheThreshold = threshold
}
}
func WithBufferSizeOfRecovery(size int) Option {
return func(opt *Options) {
opt.BufferSizeOfRecovery = size
}
}