A simple and fast write ahead log for Go.
- High durability
- Fast operations
- Monotonic indexes
- Batch writes
- Log truncation from front or back.
To start using wal
, install Go and run go get
:
$ go get -u github.com/tidwall/wal
This will retrieve the library.
// open a new log file
log, err := Open("mylog", nil)
// write some entries
err = log.Write(1, []byte("first entry"))
err = log.Write(2, []byte("second entry"))
err = log.Write(3, []byte("third entry"))
// read an entry
data, err := log.Read(1)
println(string(data)) // output: first entry
// close the log
err = log.Close()
Batch writes:
// write three entries as a batch
batch := new(Batch)
batch.Write(1, []byte("first entry"))
batch.Write(2, []byte("second entry"))
batch.Write(3, []byte("third entry"))
err = log.WriteBatch(batch)
Truncating:
// write some entries
err = log.Write(1, []byte("first entry"))
...
err = log.Write(1000, []byte("thousandth entry"))
// truncate the log from index starting 350 and ending with 950.
err = l.TruncateFront(350)
err = l.TruncateBack(950)
Josh Baker @tidwall
wal
source code is available under the MIT License.