Skip to content

Commit 8b1b4db

Browse files
committed
Update GO library reference
1 parent 34b1752 commit 8b1b4db

File tree

1 file changed

+152
-1
lines changed
  • src/content/docs/reference

1 file changed

+152
-1
lines changed

src/content/docs/reference/go.md

Lines changed: 152 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,4 +3,155 @@ title: TidesDB GO Reference
33
description: TidesDB GO FFI Library reference.
44
---
55

6-
Coming soon.
6+
> You must make sure you have the TidesDB shared C library installed on your system. Be sure to also compile with `TIDESDB_WITH_SANITIZER` and `TIDESDB_BUILD_TESTS` OFF.
7+
8+
## Installing
9+
```go
10+
go get github.com/tidesdb/tidesdb-go
11+
```
12+
13+
## Usage
14+
15+
### Opening and closing
16+
```go
17+
db, err := tidesdb_go.Open("/path/to/db") // will reopen the database if it already exists
18+
if err != nil {
19+
...
20+
}
21+
defer db.Close() // Closes TidesDB gracefully
22+
```
23+
24+
### Creating and dropping a column family
25+
Column families are used to store data in TidesDB. You can create a column family using the `CreateColumnFamily` method.
26+
```go
27+
err := db.CreateColumnFamily("example_cf", 1024*1024*64, 12, 0.24, true, int(tidesdb_go.TDB_COMPRESS_SNAPPY), true)
28+
if err != nil {
29+
...
30+
}
31+
32+
// You can also drop a column family using the `DropColumnFamily` method.
33+
err = db.DropColumnFamily("example_cf")
34+
if err != nil {
35+
...
36+
}
37+
```
38+
39+
### CRUD operations
40+
41+
#### Writing data
42+
```go
43+
err := db.Put("example_cf", []byte("key"), []byte("value"), -1)
44+
if err != nil {
45+
...
46+
}
47+
```
48+
49+
With TTL
50+
```go
51+
err := db.Put("example_cf", []byte("key"), []byte("value"), time.Now().Add(10*time.Second).Unix())
52+
if err != nil {
53+
...
54+
}
55+
```
56+
57+
#### Reading data
58+
```go
59+
value, err := db.Get("example_cf", []byte("key"))
60+
if err != nil {
61+
...
62+
}
63+
fmt.Println(string(value))
64+
```
65+
66+
#### Deleting data
67+
```go
68+
err := db.Delete("example_cf", []byte("key"))
69+
if err != nil {
70+
...
71+
}
72+
```
73+
74+
##### Deleting by range
75+
```go
76+
// Delete all key-value pairs between "start_key" and "end_key" atomically
77+
err := db.DeleteByRange("example_cf", []byte("start_key"), []byte("end_key"))
78+
if err != nil {
79+
...
80+
}
81+
```
82+
83+
### Iterating over data
84+
```go
85+
cursor, err := db.CursorInit("example_cf")
86+
if err != nil {
87+
...
88+
}
89+
defer cursor.Free()
90+
91+
for {
92+
key, value, err := cursor.Get()
93+
if err != nil {
94+
break
95+
}
96+
fmt.Printf("Key: %s, Value: %s\n", key, value)
97+
98+
cursor.Next() // or cursor.Prev()
99+
}
100+
```
101+
102+
### Transactions
103+
```go
104+
txn, err := db.BeginTxn("example_cf")
105+
if err != nil {
106+
...
107+
}
108+
defer txn.Free()
109+
110+
err = txn.Put([]byte("key"), []byte("value"), 0)
111+
if err != nil {
112+
...
113+
}
114+
115+
// You can also use txn.Delete(), txn.Get()
116+
117+
err = txn.Commit()
118+
if err != nil {
119+
...
120+
}
121+
```
122+
123+
### Range queries
124+
```go
125+
// Get all key-value pairs between "start_key" and "end_key"
126+
pairs, err := db.Range("example_cf", []byte("start_key"), []byte("end_key"))
127+
if err != nil {
128+
...
129+
}
130+
131+
for _, pair := range pairs {
132+
key := pair[0]
133+
value := pair[1]
134+
fmt.Printf("Key: %s, Value: %s\n", key, value)
135+
}
136+
```
137+
138+
### Compaction
139+
Compaction is done manually or in background incrementally.
140+
141+
Merging operations, pair and merge sstables, removing expired keys if TTL set and tombstoned data.
142+
143+
#### Manual
144+
```go
145+
err := db.CompactSSTables("example_cf", 4) // 4 is the number of threads to use for compaction. Each thread will compact a pair of sstables.
146+
if err != nil {
147+
...
148+
}
149+
```
150+
151+
#### Background
152+
```go
153+
err := db.StartIncrementalMerge("example_cf", 60, 1000) // merge a pair of sstables starting at oldest pair every 60 seconds only when we have a minimum of 1000 sstables
154+
if err != nil {
155+
...
156+
}
157+
```

0 commit comments

Comments
 (0)