WIP: Blobtree substorage #645
No reviewers
TrueCloudLab/storage-core-committers
TrueCloudLab/storage-core-developers
Labels
No labels
P0
P1
P2
P3
badger
frostfs-adm
frostfs-cli
frostfs-ir
frostfs-lens
frostfs-node
good first issue
triage
Infrastructure
blocked
bug
config
discussion
documentation
duplicate
enhancement
go
help wanted
internal
invalid
kludge
observability
perfomance
question
refactoring
wontfix
No milestone
No project
No assignees
2 participants
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference: TrueCloudLab/frostfs-node#645
Loading…
Reference in a new issue
No description provided.
Delete branch "dstepanov-yadro/frostfs-node:feat/small_blob_store"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Blobtree is another blobstor substorage type.
Idea
Blobovnicza tree uses boltdb to store many small objects. But large bolt databases require a lot of memory to operate and may cause performance degradation. So to avoid performance degradation we need to reduce single bolt db size up to 40 MB and less.
For such small databases
The overhead of maintaining a btree can take up a significant portion of the total time for Put or Get
It is impossible to keep all databases open. So open/close operations also can take up a significant portion of the total time for Put or Get
Also when physically deleting a disk boltdb can panic.
Solution
Store small objects in regular files without any db, but combine them together. So one regular file contains many small objects. Such files should be small enough (1-10MB?).
So blobtree looks similar to fstree: it uses object address to build path into directory tree, but unlike fstree, in blobtree different objects are combined into a single file.
Here some performance tests on dev-env:
8kb, 10min, 30 writers/readers
8ca631b575
toeedec274c7
eedec274c7
to8bbce8c9b6
8bbce8c9b6
to1f3b36f7c8
1f3b36f7c8
to8e2cd4df20
8e2cd4df20
tof6c0fa7945
f6c0fa7945
to14bde0aab3
14bde0aab3
toc69b65957e
00c4d1f9f8
to8bb0af6a4c
8bb0af6a4c
to6c75229477
WIP: Blobtreeto Blobtree substorage84611184d2
to3d699edf57
@ -0,0 +88,4 @@
}
return common.GetRes{}, err
}
for _, entity := range entities {
My suggestion is not the big deal but what do you think about using
filepath.WalkDir
?Blobtree substorageto WIP: Blobtree substorage3d699edf57
tod8815f2aa6
fb621056f4
tobe43344910
be43344910
to942a137f07
942a137f07
to3b548de37d
3b548de37d
toa915b3c4f0
a915b3c4f0
to2c0130ece7
2c0130ece7
toa305a4f2b0
a305a4f2b0
to00fa64e26d
598deb26c6
to482d5b492a
482d5b492a
to5f2a8f57e6
30d97677ba
to0315f91e8f
7db8318fe4
to5ffbe4ec24
5ffbe4ec24
toe5532788bf
e5532788bf
tocdeca83bc1
cdeca83bc1
todc5b741b1d
Pull request closed