-
Key Value Store Badger Windows 에서 사용시 유의점언어 2019. 5. 7. 22:16반응형
golang으로 프래그래밍을 하다보면 각종 유용한 라이브러리가 많다
하지만 아직은 Cgo를 활용한 라이브러리도 많이 있지만 가능하면 Pure go 라이브러리를 사용하고 싶다
sqlite3같은 경우로 driver들이 모두 Cgo를 사용해서 그냥 ql(https://github.com/cznic/ql) 을 사용했고
요즘 유행하고 있는 NoSQL을 사용할때도 BoltDB(https://github.com/boltdb/bolt) bbolt(https://github.com/etcd-io/bbolt)을 사용했다
최근에 BoltDB나 RocksDB 보다 성능이 좋다는 Pure go NoSQL 라이브러리인 badger(https://github.com/dgraph-io/badger)를 이용해서 프로그래밍을 하다 보니 몇가지 문제점이 발견되었다
1. Windows에서 badger Store 설정시 옵션에서 Truncate = true 설정을 해 주지 않으면 데이터를 잃는 경우가 발생한다
opts := badger.DefaultOptions
opts.Truncate = true
opts.Dir = "./data"
opts.ValueDir = "./data"
db, err := badger.Open(opts)왠만하면 Truncate 는 True로 설정한다
2. 데이터를 저장하고 검색을 하다가 Key에 맞는 값이 없을 경우 vlog파일이 2G로 증가된다
물론 사용상에 문제는 없지만 메모리 사용량도 증가하고 뭔가 오류가 있는 듯한 느낌?
기본적으로 ValueLogLoadingMode: options.MemoryMap 으로 설정이 되어 속도에서 잇점을 얻고 메모리 사용량에서 손해를 본다
파일 DB에서 파일사이즈가 커지는 것은 바람직해 보이지 않는다
설정을 변경하면 해결이 가능하다
opts := badger.DefaultOptions
opts.ValueLogLoadingMode = options.FileIO
opts.Truncate = true
opts.Dir = "./data"
opts.ValueDir = "./data"
db, err := badger.Open(opts)opts.ValueLogLoadingMode = options.FileIO 로 설정함으로 문제가 해결이 가능하다
badgerhold를 이용하면 간편하게 이용도 가능하다
https://github.com/timshannon/badgerhold
반응형'언어' 카테고리의 다른 글
Golang Vs Rust 2022 (0) 2022.12.04 JAVA Golang 환경변수 (0) 2021.12.11 golang windows용 DLL 만들기 (1) 2019.04.29 Go talks를 이용해 Presentation 하기 (0) 2017.03.02 GO 바이너리 사이즈 줄이기 (0) 2016.04.20