You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
70 lines
2.9 KiB
70 lines
2.9 KiB
// Copyright (c) 2012 The LevelDB Authors. All rights reserved. |
|
// Use of this source code is governed by a BSD-style license that can be |
|
// found in the LICENSE file. See the AUTHORS file for names of contributors. |
|
// |
|
// A database can be configured with a custom FilterPolicy object. |
|
// This object is responsible for creating a small filter from a set |
|
// of keys. These filters are stored in leveldb and are consulted |
|
// automatically by leveldb to decide whether or not to read some |
|
// information from disk. In many cases, a filter can cut down the |
|
// number of disk seeks form a handful to a single disk seek per |
|
// DB::Get() call. |
|
// |
|
// Most people will want to use the builtin bloom filter support (see |
|
// NewBloomFilterPolicy() below). |
|
|
|
#ifndef STORAGE_LEVELDB_INCLUDE_FILTER_POLICY_H_ |
|
#define STORAGE_LEVELDB_INCLUDE_FILTER_POLICY_H_ |
|
|
|
#include <string> |
|
|
|
namespace leveldb { |
|
|
|
class Slice; |
|
|
|
class FilterPolicy { |
|
public: |
|
virtual ~FilterPolicy(); |
|
|
|
// Return the name of this policy. Note that if the filter encoding |
|
// changes in an incompatible way, the name returned by this method |
|
// must be changed. Otherwise, old incompatible filters may be |
|
// passed to methods of this type. |
|
virtual const char* Name() const = 0; |
|
|
|
// keys[0,n-1] contains a list of keys (potentially with duplicates) |
|
// that are ordered according to the user supplied comparator. |
|
// Append a filter that summarizes keys[0,n-1] to *dst. |
|
// |
|
// Warning: do not change the initial contents of *dst. Instead, |
|
// append the newly constructed filter to *dst. |
|
virtual void CreateFilter(const Slice* keys, int n, std::string* dst) |
|
const = 0; |
|
|
|
// "filter" contains the data appended by a preceding call to |
|
// CreateFilter() on this class. This method must return true if |
|
// the key was in the list of keys passed to CreateFilter(). |
|
// This method may return true or false if the key was not on the |
|
// list, but it should aim to return false with a high probability. |
|
virtual bool KeyMayMatch(const Slice& key, const Slice& filter) const = 0; |
|
}; |
|
|
|
// Return a new filter policy that uses a bloom filter with approximately |
|
// the specified number of bits per key. A good value for bits_per_key |
|
// is 10, which yields a filter with ~ 1% false positive rate. |
|
// |
|
// Callers must delete the result after any database that is using the |
|
// result has been closed. |
|
// |
|
// Note: if you are using a custom comparator that ignores some parts |
|
// of the keys being compared, you must not use NewBloomFilterPolicy() |
|
// and must provide your own FilterPolicy that also ignores the |
|
// corresponding parts of the keys. For example, if the comparator |
|
// ignores trailing spaces, it would be incorrect to use a |
|
// FilterPolicy (like NewBloomFilterPolicy) that does not ignore |
|
// trailing spaces in keys. |
|
extern const FilterPolicy* NewBloomFilterPolicy(int bits_per_key); |
|
|
|
} |
|
|
|
#endif // STORAGE_LEVELDB_INCLUDE_FILTER_POLICY_H_
|
|
|