Cum să folosești RocksDB cu Go
- 2 minute de citit
- 6 exemple de cod în Shell, Go și Make
- 1 imagine
Disponibil și în English
Pe această pagină
![]()
Salut tuturor! 👋
Recent a trebuit să lucrez cu RocksDB și, ca să îl folosesc din Golang, a trebuit să trec prin câteva obstacole până când a funcționat cum trebuie.
Acest articol îți arată cum să compilezi un program Go și să îl legi cu RocksDB folosind CGO. Vom folosi biblioteca grocksdb.
Ce este RocksDB
RocksDB este un depozit cheie-valoare embedded dezvoltat de Meta.
Poate fi folosit ca motor de baze de date de către MySQL, MongoDB, Apache Cassandra și alții.
RocksDB poate fi adaptat și pentru alte cazuri de utilizare, cum ar fi procesarea de fluxuri, cache-ul pentru cozi de sarcini, stocarea grafurilor și altele.
Poți vedea toți utilizatorii și cazurile de utilizare pe pagina lor de wiki de pe GitHub.
Folosirea RocksDB într-un proiect Go pe Fedora Linux
Această secțiune îți arată cum să folosești RocksDB într-un proiect Go. Vom compila RocksDB pe Fedora 41.
Inițializarea proiectului Go
Primul pas este să creezi proiectul Go și să adaugi cerința grocksdb în fișierul go.mod. Al meu arată așa:
module grocks-tutorialgo 1.24require github.com/linxGnu/grocksdb v1.9.8 // indirectApoi, în fișierul main.go, poți adăuga următorul cod:
package mainimport ( "fmt" "github.com/linxGnu/grocksdb" "os")func main() { bbto := grocksdb.NewDefaultBlockBasedTableOptions() bbto.SetBlockCache(grocksdb.NewLRUCache(3 << 30)) opts := grocksdb.NewDefaultOptions() // 2 opts.SetBlockBasedTableFactory(bbto) opts.SetCreateIfMissing(true) db, err := grocksdb.OpenDb(opts, "my_rocks") // 1 if err != nil { fmt.Printf("err %v", err) os.Exit(1) } ro := grocksdb.NewDefaultReadOptions() // 2 wo := grocksdb.NewDefaultWriteOptions() // 2 // dacă ro și wo nu mai sunt folosite, nu uita să le închizi. err = db.Put(wo, []byte("foo"), []byte("bar")) // 3 value, err := db.Get(ro, []byte("foo")) // 4 fmt.Printf("The value is `%s`.\n", value.Data()) // 4 defer value.Free() err = db.Delete(wo, []byte("foo"))}Codul face următoarele lucruri:
- Deschide o bază de date RocksDB în directorul
my_rocks. - Folosește opțiunile implicite pentru deschiderea bazei de date, citire și scriere de date.
- Scrie octeții
barla cheiafoo. - Citește cheia
fooși afișează valoarea.
Putem folosi codul ca să testăm că lucrul cu RocksDB funcționează cu adevărat.
Compilarea RocksDB
Pentru a compila o versiune compatibilă de RocksDB, descarcă versiunea 9.8.4 din release-urile de pe GitHub:
Apoi fă cd în director, instalează compilatoarele dacă nu le ai și compilează RocksDB ca bibliotecă statică.
cd rocksdb-9.8.4sudo dnf install gcc gcc-c++EXTRA_CFLAGS=-mpclmul EXTRA_CXXFLAGS=-mpclmul PORTABLE=x86-64-v3 USE_RTTI=1 make static_libCompilarea va dura câteva minute.
Instalarea dependențelor necesare
Odată ce RocksDB este compilat, poți instala dependențele necesare folosind managerul de pachete:
dnf install snappy snappy-devel zlib zlib-devel bzip2 bzip2-devel lz4-devel libzstd-develFișierele header și bibliotecile vor fi plasate în următoarele directoare:
- /usr/include
- /usr/lib64
Compilarea proiectului Go și legarea RocksDB
Ca să simplific lucrurile, am creat un Makefile care arată așa:
run: CGO_CFLAGS="-I/home/dnutiu/GolandProjects/grocks-tutorial/rocksdb-9.8.4/include -I/usr/include" \ CGO_LDFLAGS="-L/home/dnutiu/GolandProjects/grocks-tutorial/rocksdb-9.8.4 -L/usr/lib64 -lrocksdb -lbz2 -lstdc++ -lm -lz -lsnappy -llz4 -lzstd" \ go run .Makefile-ul conține calea către directorul meu de include și locația bibliotecilor RocksDB, precum și căile către dependențe.
La rulare, codul se va compila și va afișa:
➜ grocks-tutorial make runCGO_CFLAGS="-I/home/dnutiu/GolandProjects/grocks-tutorial/rocksdb-9.8.4/include -I/usr/include" \CGO_LDFLAGS="-L/home/dnutiu/GolandProjects/grocks-tutorial/rocksdb-9.8.4 -L/usr/lib64 -lrocksdb -lbz2 -lstdc++ -lm -lz -lsnappy -llz4 -lzstd" \ go run .The value is `bar`.Gata!
Note despre MacOS
Pe MacOS poți instala toate pachetele cu brew.
Apoi execută brew info <nume-pachet>, care îți va arăta locația pachetului, iar aceasta va conține directoarele include și lib, pe care le poți adăuga în CGO_CFLAGS, respectiv CGO_LDFLAGS.
Sper că acest articol te-a ajutat să începi să lucrezi cu RocksDB în Go! 😄
Poți clona depozitul de cod de pe Forge-ul meu: https://gitlab.nuculabs.dev/dnutiu/grocks-tuturial.
Actualizare 04.04.2025 PS: Mulțumiri speciale colegului meu Cristi care m-a ajutat să aflu variabilele de mediu corecte pentru make.
Mulțumesc pentru lectură!