mirror of
https://source.quilibrium.com/quilibrium/ceremonyclient.git
synced 2024-12-26 08:35:17 +00:00
77 lines
2.5 KiB
Go
77 lines
2.5 KiB
Go
|
// Copyright 2011 The LevelDB-Go and Pebble Authors. All rights reserved. Use
|
||
|
// of this source code is governed by a BSD-style license that can be found in
|
||
|
// the LICENSE file.
|
||
|
|
||
|
package base
|
||
|
|
||
|
// SSTable block defaults.
|
||
|
const (
|
||
|
DefaultBlockRestartInterval = 16
|
||
|
DefaultBlockSize = 4096
|
||
|
DefaultBlockSizeThreshold = 90
|
||
|
)
|
||
|
|
||
|
// FilterType is the level at which to apply a filter: block or table.
|
||
|
type FilterType int
|
||
|
|
||
|
// The available filter types.
|
||
|
const (
|
||
|
TableFilter FilterType = iota
|
||
|
)
|
||
|
|
||
|
func (t FilterType) String() string {
|
||
|
switch t {
|
||
|
case TableFilter:
|
||
|
return "table"
|
||
|
}
|
||
|
return "unknown"
|
||
|
}
|
||
|
|
||
|
// FilterWriter provides an interface for creating filter blocks. See
|
||
|
// FilterPolicy for more details about filters.
|
||
|
type FilterWriter interface {
|
||
|
// AddKey adds a key to the current filter block.
|
||
|
AddKey(key []byte)
|
||
|
|
||
|
// Finish appends to dst an encoded filter tha holds the current set of
|
||
|
// keys. The writer state is reset after the call to Finish allowing the
|
||
|
// writer to be reused for the creation of additional filters.
|
||
|
Finish(dst []byte) []byte
|
||
|
}
|
||
|
|
||
|
// FilterPolicy is an algorithm for probabilistically encoding a set of keys.
|
||
|
// The canonical implementation is a Bloom filter.
|
||
|
//
|
||
|
// Every FilterPolicy has a name. This names the algorithm itself, not any one
|
||
|
// particular instance. Aspects specific to a particular instance, such as the
|
||
|
// set of keys or any other parameters, will be encoded in the []byte filter
|
||
|
// returned by NewWriter.
|
||
|
//
|
||
|
// The name may be written to files on disk, along with the filter data. To use
|
||
|
// these filters, the FilterPolicy name at the time of writing must equal the
|
||
|
// name at the time of reading. If they do not match, the filters will be
|
||
|
// ignored, which will not affect correctness but may affect performance.
|
||
|
type FilterPolicy interface {
|
||
|
// Name names the filter policy.
|
||
|
Name() string
|
||
|
|
||
|
// MayContain returns whether the encoded filter may contain given key.
|
||
|
// False positives are possible, where it returns true for keys not in the
|
||
|
// original set.
|
||
|
MayContain(ftype FilterType, filter, key []byte) bool
|
||
|
|
||
|
// NewWriter creates a new FilterWriter.
|
||
|
NewWriter(ftype FilterType) FilterWriter
|
||
|
}
|
||
|
|
||
|
// BlockPropertyFilter is used in an Iterator to filter sstables and blocks
|
||
|
// within the sstable. It should not maintain any per-sstable state, and must
|
||
|
// be thread-safe.
|
||
|
type BlockPropertyFilter interface {
|
||
|
// Name returns the name of the block property collector.
|
||
|
Name() string
|
||
|
// Intersects returns true if the set represented by prop intersects with
|
||
|
// the set in the filter.
|
||
|
Intersects(prop []byte) (bool, error)
|
||
|
}
|