Documentation ¶
Index ¶
- type Compression
- type Diskv
- func (d *Diskv) Erase(key string) error
- func (d *Diskv) EraseAll() error
- func (d *Diskv) Has(key string) bool
- func (d *Diskv) Import(srcFilename, dstKey string, move bool) (err error)
- func (d *Diskv) Keys(cancel <-chan struct{}) <-chan string
- func (d *Diskv) KeysPrefix(prefix string, cancel <-chan struct{}) <-chan string
- func (d *Diskv) Read(key string) ([]byte, error)
- func (d *Diskv) ReadStream(key string, direct bool) (io.ReadCloser, error)
- func (d *Diskv) Write(key string, val []byte) error
- func (d *Diskv) WriteStream(key string, r io.Reader, sync bool) error
- type Index
- type LLRBIndex
- type LessFunction
- type Options
- type TransformFunction
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type Compression ¶
type Compression interface { Writer(dst io.Writer) (io.WriteCloser, error) Reader(src io.Reader) (io.ReadCloser, error) }
Compression is an interface that Diskv uses to implement compression of data. Writer takes a destination io.Writer and returns a WriteCloser that compresses all data written through it. Reader takes a source io.Reader and returns a ReadCloser that decompresses all data read through it. You may define these methods on your own type, or use one of the NewCompression helpers.
func NewGzipCompression ¶
func NewGzipCompression() Compression
NewGzipCompression returns a Gzip-based Compression.
func NewGzipCompressionLevel ¶
func NewGzipCompressionLevel(level int) Compression
NewGzipCompressionLevel returns a Gzip-based Compression with the given level.
func NewZlibCompression ¶
func NewZlibCompression() Compression
NewZlibCompression returns a Zlib-based Compression.
func NewZlibCompressionLevel ¶
func NewZlibCompressionLevel(level int) Compression
NewZlibCompressionLevel returns a Zlib-based Compression with the given level.
func NewZlibCompressionLevelDict ¶
func NewZlibCompressionLevelDict(level int, dict []byte) Compression
NewZlibCompressionLevelDict returns a Zlib-based Compression with the given level, based on the given dictionary.
type Diskv ¶
Diskv implements the Diskv interface. You shouldn't construct Diskv structures directly; instead, use the New constructor.
func New ¶
New returns an initialized Diskv structure, ready to use. If the path identified by baseDir already contains data, it will be accessible, but not yet cached.
func (*Diskv) EraseAll ¶
EraseAll will delete all of the data from the store, both in the cache and on the disk. Note that EraseAll doesn't distinguish diskv-related data from non- diskv-related data. Care should be taken to always specify a diskv base directory that is exclusively for diskv data.
func (*Diskv) Import ¶ added in v0.2.0
Import imports the source file into diskv under the destination key. If the destination key already exists, it's overwritten. If move is true, the source file is removed after a successful import.
func (*Diskv) Keys ¶
Keys returns a channel that will yield every key accessible by the store, in undefined order. If a cancel channel is provided, closing it will terminate and close the keys channel.
func (*Diskv) KeysPrefix ¶ added in v0.2.0
KeysPrefix returns a channel that will yield every key accessible by the store with the given prefix, in undefined order. If a cancel channel is provided, closing it will terminate and close the keys channel. If the provided prefix is the empty string, all keys will be yielded.
func (*Diskv) Read ¶
Read reads the key and returns the value. If the key is available in the cache, Read won't touch the disk. If the key is not in the cache, Read will have the side-effect of lazily caching the value.
func (*Diskv) ReadStream ¶
ReadStream reads the key and returns the value (data) as an io.ReadCloser. If the value is cached from a previous read, and direct is false, ReadStream will use the cached value. Otherwise, it will return a handle to the file on disk, and cache the data on read.
If direct is true, ReadStream will lazily delete any cached value for the key, and return a direct handle to the file on disk.
If compression is enabled, ReadStream taps into the io.Reader stream prior to decompression, and caches the compressed data.
func (*Diskv) Write ¶
Write synchronously writes the key-value pair to disk, making it immediately available for reads. Write relies on the filesystem to perform an eventual sync to physical media. If you need stronger guarantees, see WriteStream.
func (*Diskv) WriteStream ¶
WriteStream writes the data represented by the io.Reader to the disk, under the provided key. If sync is true, WriteStream performs an explicit sync on the file as soon as it's written.
bytes.Buffer provides io.Reader semantics for basic data types.
type Index ¶
type Index interface { Initialize(less LessFunction, keys <-chan string) Insert(key string) Delete(key string) Keys(from string, n int) []string }
Index is a generic interface for things that can provide an ordered list of keys.
type LLRBIndex ¶
type LLRBIndex struct { sync.RWMutex LessFunction *llrb.LLRB }
LLRBIndex is an implementation of the Index interface using Petar Maymounkov's LLRB tree.
func (*LLRBIndex) Initialize ¶
func (i *LLRBIndex) Initialize(less LessFunction, keys <-chan string)
Initialize populates the LLRB tree with data from the keys channel, according to the passed less function. It's destructive to the LLRBIndex.
type LessFunction ¶
LessFunction is used to initialize an Index of keys in a specific order.
type Options ¶
type Options struct { BasePath string Transform TransformFunction CacheSizeMax uint64 // bytes PathPerm os.FileMode FilePerm os.FileMode Index Index IndexLess LessFunction Compression Compression }
Options define a set of properties that dictate Diskv behavior. All values are optional.
type TransformFunction ¶
TransformFunction transforms a key into a slice of strings, with each element in the slice representing a directory in the file path where the key's entry will eventually be stored.
For example, if TransformFunc transforms "abcdef" to ["ab", "cde", "f"], the final location of the data file will be <basedir>/ab/cde/f/abcdef