go sonic
1.0.0
이 패키지는 Sonic과 작동하는 모든 명령을 구현합니다. 누락된 항목이 있으면 이슈를 열어주세요! :)
소닉: https://github.com/valeriansaliou/sonic
go get github.com/expectedsh/go-sonic
package main
import (
"fmt"
"github.com/expectedsh/go-sonic/sonic"
)
func main () {
ingester , err := sonic . NewIngester ( "localhost" , 1491 , "SecretPassword" )
if err != nil {
panic ( err )
}
// I will ignore all errors for demonstration purposes
_ = ingester . BulkPush ( "movies" , "general" , 3 , []sonic. IngestBulkRecord {
{ "id:6ab56b4kk3" , "Star wars" },
{ "id:5hg67f8dg5" , "Spider man" },
{ "id:1m2n3b4vf6" , "Batman" },
{ "id:68d96h5h9d0" , "This is another movie" },
})
search , err := sonic . NewSearch ( "localhost" , 1491 , "SecretPassword" )
if err != nil {
panic ( err )
}
results , _ := search . Query ( "movies" , "general" , "man" , 10 , 0 )
fmt . Println ( results )
}
BulkPush 및 BulkPop 메소드는 goroutine 디스패치 알고리즘과 함께 사용자 정의 연결 풀을 사용합니다. 이는 벤치마크입니다(sonic/ingester_test.go 파일).
goos: linux
goarch: amd64
pkg: github.com/expectedsh/go-sonic/sonic
BenchmarkIngesterChannel_BulkPushMaxCPUs-8 2 662657959 ns/op
BenchmarkIngesterChannel_BulkPush10-8 2 603779977 ns/op
BenchmarkIngesterChannel_Push-8 1 1023322864 ns/op
PASS
대량 푸시는 푸시의 for 루프보다 빠릅니다. 하드웨어 세부 정보: Intel(R) Core(TM) i7-8550U CPU @ 1.80GHz
드라이버 자체는 스레드로부터 안전하지 않습니다. 충돌을 방지하기 위해 잠금이나 채널을 사용할 수 있습니다.
package main
import (
"fmt"
"github.com/expectedsh/go-sonic/sonic"
)
func main () {
events := make ( chan [] string , 1 )
event := [] string { "some_text" , "some_id" }
tryCrash := func () {
for {
// replace "event" with whatever is giving you events: pubsub, amqp messages…
events <- event
}
}
go tryCrash ()
go tryCrash ()
go tryCrash ()
go tryCrash ()
ingester , _ := sonic . NewIngester ( "localhost" , 1491 , "SecretPassword" )
for {
msg := <- events
// Or use some buffering along with BulkPush
ingester . Push ( "collection" , "bucket" , msg [ 1 ], msg [ 0 ])
}
}