aboutsummaryrefslogtreecommitdiff
path: root/weed/filer/arangodb/readme.md
blob: 57a594592c3a6479fccfd327653a65573f27e87d (plain)
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
##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