1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 |
- // 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>
- #include "leveldb/export.h"
- namespace leveldb {
- class Slice;
- class LEVELDB_EXPORT 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.
- LEVELDB_EXPORT const FilterPolicy* NewBloomFilterPolicy(int bits_per_key);
- } // namespace leveldb
- #endif // STORAGE_LEVELDB_INCLUDE_FILTER_POLICY_H_
|