[Go] badger DB

Go๋Š” ์ด์ƒํ•˜๊ฒŒ ๋‚ด์žฅํ˜• DB๋“ค์ด ๋งŽ์€ ํŽธ์ธ๋ฐ, badger๋„ ๊ทธ ์ค‘ ํ•˜๋‚˜๋‹ค.
LSM ํŠธ๋ฆฌ ๊ธฐ๋ฐ˜์˜ KV DB์ด๋‹ค.

๋น ๋ฅธ ์ฝ๊ธฐ/์“ฐ๊ธฐ ์„ฑ๋Šฅ์„ ์ตœ๋Œ€ ์žฅ์ ์œผ๋กœ ๋‚ด์„ธ์šด๋‹ค. ์‹ค์ œ๋กœ๋„ ๊ฐ€์žฅ ๋น ๋ฅธ ์ถ•์— ์†ํ•˜๋Š” ๊ฒƒ ๊ฐ™๋‹ค.



์„ค์น˜

๋””ํŽœ๋˜์‹œ ํ•˜๋‚˜๋ฉด ๋œ๋‹ค.

go get github.com/dgraph-io/badger/v4




๊ธฐ๋ณธ ์‚ฌ์šฉ๋ฒ•

๊ธฐ๋ณธ ๊ตฌ์กฐ๋Š” ๋Œ€๋žต ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

package main

import (
	"log"

	badger "github.com/dgraph-io/badger/v4"
)

func main() {
	// Open the Badger database located in the /tmp/badger directory.
	// It will be created if it doesn't exist.
	db, err := badger.Open(badger.DefaultOptions("./badger"))
	if err != nil {
		log.Fatal(err)
	}
	defer db.Close()
	// Your code hereโ€ฆ
}

๋ฐ์ดํ„ฐ๊ฐ€ ์ €์žฅ๋  ์œ„์น˜๋งŒ ์ง€์ •ํ•ด์„œ ์‹คํ–‰ํ•˜๋ฉด ๋œ๋‹ค.


๊ทธ๋Ÿผ ์ด๋Ÿฐ ํ˜•ํƒœ๋กœ ๋ฐ์ดํ„ฐ๊ฐ€ ์ƒ์„ฑ๋œ๋‹ค.

๋ฑƒ์ €์˜ ๊ธฐ๋ณธ๋™์ž‘์€ ๋””์Šคํฌ์ง€๋งŒ, ์ธ๋ฉ”๋ชจ๋ฆฌ๋กœ ๋™์ž‘ํ•˜๊ฒŒ ํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

์ด๋ ‡๊ฒŒ ์˜ต์…˜์„ ์ฃผ๋ฉด ๋œ๋‹ค.




๊ฐ’ ์“ฐ๊ธฐ

๋ฑƒ์ €db๋Š” ๋ชจ๋“  ์ฝ๊ธฐ/์“ฐ๊ธฐ ์ž‘์—…์„ ํŠธ๋žœ์žญ์…˜ ๋‹จ์œ„๋กœ ์‹คํ–‰ํ•œ๋‹ค.
๊ทธ๋ž˜์„œ ๋‹จ์ˆœํžˆ ๊ฐ’์„ ํ•˜๋‚˜ ๊น”๊ณ ์‹ถ๋‹ค ํ•ด๋„ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์“ฐ๊ธฐ ํŠธ๋žœ์žญ์…˜์„ ์—ด๊ณ  ์จ์•ผ ํ•œ๋‹ค.


	// ์“ฐ๊ธฐ ํŠธ๋žœ์žญ์…˜
	if err := db.Update(func(txn *badger.Txn) error {
		// ์“ฐ๊ธฐ ์ž‘์—… ์ˆ˜ํ–‰
		err := txn.Set([]byte("answer"), []byte("42"))
		return err
	}); err != nil {
		log.Fatal(err)
	}

๋ฐ”์ดํŠธ ์Œ์œผ๋กœ ๊น๋‹ค.




๊ฐ’ ์ฝ๊ธฐ

๊ฐ’์„ ์ฝ์„๋•Œ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ํŠธ๋žœ์žญ์…˜์„ ์—ด๊ณ  ์ฝ์–ด์•ผ ํ•œ๋‹ค.

	// ์ฝ๊ธฐ ํŠธ๋žœ์žญ์…˜
	if err := db.View(func(txn *badger.Txn) error {
		item, err := txn.Get([]byte("answer"))
		if err != nil {
			log.Fatal(err)
		}

		// ์•„์ดํ…œ์˜ ๊ฐ’์„ ๊ฐ€์ ธ์˜จ๋‹ค.
		val, err := item.ValueCopy(nil)
		if err != nil {
			log.Fatal(err)
		}

		log.Printf("The answer is: %s\n", val)
		return nil
	}); err != nil {
		log.Fatal(err)
	}

๊ทธ๋Ÿผ ์ž˜ ์ฝ์–ด์˜ฌ ๊ฒƒ์ด๋‹ค.




TTL ์„ค์ •

๋งŒ๋ฃŒ๊ธฐ๊ฐ„์„ ์„ค์ •ํ•ด์„œ ๋ ˆ๋””์Šค์ฒ˜๋Ÿผ ์บ์‹ฑ์šฉ์œผ๋กœ ์“ธ ์ˆ˜๋„ ์žˆ๋‹ค.
๋ฐ์ดํ„ฐ ์—”ํŠธ๋ฆฌ์— ttl ์˜ต์…˜์„ ๊ฑธ๊ณ  ์‘ค์…”๋„ฃ์œผ๋ฉด ๋œ๋‹ค.

	// ์“ฐ๊ธฐ ํŠธ๋žœ์žญ์…˜
	if err := db.Update(func(txn *badger.Txn) error {
		// 1์‹œ๊ฐ„ ๋™์•ˆ ์œ ํšจํ•œ ํ‚ค-๊ฐ’ ์Œ์„ ๋งŒ๋“ ๋‹ค.
		entry := badger.NewEntry([]byte("answer"), []byte("4444")).WithTTL(time.Hour)
		err := txn.SetEntry(entry)
		return err
	}); err != nil {
		log.Fatal(err)
	}

๊ธฐ๋Šฅ์€ ์ด์ •๋„๋กœ ์ตœ์†Œํ•œ๋งŒ ๊ฐ–๊ณ  ์žˆ๋Š” ํŽธ์ด๋‹ค.
๋ง‰ ์—„์ฒญ ๋ณต์žกํ•˜๊ฑฐ๋‚˜ ๋Œ€๋‹จํ•œ ๊ธฐ๋Šฅ์ด ์žˆ์ง„ ์•Š๋‹ค.


์ฐธ์กฐ
https://dgraph.io/docs/badger/get-started/