mirror of
https://github.com/seaweedfs/seaweedfs.git
synced 2024-12-29 04:27:54 +08:00
48db56ddad
* Update arangodb_store.go * update readme, properly escape queries, add name patching * use underscore * use underscore * better comment * fix readme Co-authored-by: a <a@a.a>
86 lines
2.1 KiB
Markdown
86 lines
2.1 KiB
Markdown
##arangodb
|
|
|
|
database: https://github.com/arangodb/arangodb
|
|
go driver: https://github.com/arangodb/go-driver
|
|
|
|
options:
|
|
|
|
```
|
|
[arangodb]
|
|
enabled=true
|
|
db_name="seaweedfs"
|
|
servers=["http://localhost:8529"]
|
|
#basic auth
|
|
user="root"
|
|
pass="test"
|
|
|
|
# tls settings
|
|
insecure_skip_verify=true
|
|
```
|
|
|
|
i test using this dev database:
|
|
`docker run -p 8529:8529 -e ARANGO_ROOT_PASSWORD=test arangodb/arangodb:3.9.0`
|
|
|
|
|
|
|
|
## database structure
|
|
|
|
|
|
arangodb has a few restrictions which require the use of a few tricks in order to losslessly store the data.
|
|
|
|
### filer store
|
|
|
|
arangodb does not support []byte, and will store such as a uint64 array. this would be a waste of space. to counteract this, we store the data as a length prefixed uint64 byteset.
|
|
|
|
### filer kv
|
|
|
|
same as above
|
|
|
|
### filer buckets
|
|
|
|
s3 buckets are implemented through arangodb collection. this allows us to do very fast bucket deletion by simply deleting the collection
|
|
|
|
|
|
arangodb collection name rules is character set `azAZ09_-` with a 256 character max. however the first character must be a letter.
|
|
|
|
|
|
s3 bucket name rule is the set `azAZ09.-` with a 63 characters max.
|
|
|
|
the rules for collection names is then the following:
|
|
|
|
1. if the bucket name is a valid arangodb collection name, then nothing is done.
|
|
2. if the bucket name contains a ".", the "." is replaced with "_"
|
|
3. if the bucket name now begins with a number or "_", the prefix "xN--" is prepended to the collection name
|
|
|
|
this allows for these collection names to be used.
|
|
|
|
|
|
## features i don't personally need but are missing
|
|
[ ] provide tls cert to arango
|
|
[ ] authentication that is not basic auth
|
|
[ ] synchronise endpoint interval config
|
|
[ ] automatic creation of custom index
|
|
[ ] configure default arangodb collection sharding rules
|
|
[ ] configure default arangodb collection replication rules
|
|
|
|
|
|
## complexity
|
|
|
|
ok, so if https://www.arangodb.com/docs/stable/indexing-index-basics.html#persistent-index is correct
|
|
|
|
O(1)
|
|
- InsertEntry
|
|
- UpdateEntry
|
|
- FindEntry
|
|
- DeleteEntry
|
|
- KvPut
|
|
- KvGet
|
|
- KvDelete
|
|
|
|
O(log(BUCKET_SIZE))
|
|
- DeleteFolderChildren
|
|
|
|
O(log(DIRECTORY_SIZE))
|
|
- ListDirectoryEntries
|
|
- ListDirectoryPrefixedEntries
|