RocksJava should support not only BlockBased Bloomfilter
This commit is contained in:
parent
1d525891bd
commit
5e43155b3f
@ -6,32 +6,114 @@
|
||||
package org.rocksdb;
|
||||
|
||||
/**
|
||||
* This class creates a new filter policy that uses a bloom filter
|
||||
* with approximately the specified number of bits per key.
|
||||
* A good value for bitsPerKey is 10, which yields a filter
|
||||
* with ~ 1% false positive rate.
|
||||
*
|
||||
* Default value of bits per key is 10.
|
||||
* BloomFilter
|
||||
*/
|
||||
public class BloomFilter extends Filter {
|
||||
private static final int DEFAULT_BITS_PER_KEY = 10;
|
||||
private final int bitsPerKey_;
|
||||
|
||||
private static final int DEFAULT_BITS_PER_KEY = 10;
|
||||
private static final boolean DEFAULT_MODE = true;
|
||||
private final int bitsPerKey_;
|
||||
private final boolean useBlockBasedMode_;
|
||||
|
||||
/**
|
||||
* Bloom filter policy that uses a bloom filter with approximately
|
||||
* the specified number of bits per key.
|
||||
*
|
||||
* <p>
|
||||
* bits_per_key: bits per key in bloom filter. A good value for bits_per_key
|
||||
* is 10, which yields a filter with ~ 1% false positive rate.
|
||||
* <p><strong>default bits_per_key</strong>: 10</p>
|
||||
* </p>
|
||||
* <p>use_block_based_builder: use block based filter rather than full filter.
|
||||
* If you want to builder full filter, it needs to be set to false.
|
||||
* </p>
|
||||
* <p><strong>default mode: block based filter</strong></p>
|
||||
* <p>
|
||||
* Callers must delete the result after any database that is using the
|
||||
* result has been closed.</p>
|
||||
* <p>
|
||||
* Note: if you are using a custom comparator that ignores some parts
|
||||
* of the keys being compared, you must not use this {@code BloomFilter}
|
||||
* 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 {@code BloomFilter}) that does not ignore
|
||||
* trailing spaces in keys.</p>
|
||||
*/
|
||||
public BloomFilter() {
|
||||
this(DEFAULT_BITS_PER_KEY);
|
||||
this(DEFAULT_BITS_PER_KEY, DEFAULT_MODE);
|
||||
}
|
||||
|
||||
/**
|
||||
* Bloom filter policy that uses a bloom filter with approximately
|
||||
* the specified number of bits per key.
|
||||
*
|
||||
* <p>
|
||||
* bits_per_key: bits per key in bloom filter. A good value for bits_per_key
|
||||
* is 10, which yields a filter with ~ 1% false positive rate.
|
||||
* </p>
|
||||
* <p>use_block_based_builder: use block based filter rather than full filter.
|
||||
* If you want to builder full filter, it needs to be set to false.
|
||||
* </p>
|
||||
* <p><strong>default mode: block based filter</strong></p>
|
||||
* <p>
|
||||
* Callers must delete the result after any database that is using the
|
||||
* result has been closed.</p>
|
||||
* <p>
|
||||
* Note: if you are using a custom comparator that ignores some parts
|
||||
* of the keys being compared, you must not use this {@code BloomFilter}
|
||||
* 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 {@code BloomFilter}) that does not ignore
|
||||
* trailing spaces in keys.</p>
|
||||
*
|
||||
* @param bitsPerKey number of bits to use
|
||||
*/
|
||||
public BloomFilter(int bitsPerKey) {
|
||||
this(bitsPerKey, DEFAULT_MODE);
|
||||
}
|
||||
|
||||
/**
|
||||
* Bloom filter policy that uses a bloom filter with approximately
|
||||
* the specified number of bits per key.
|
||||
*
|
||||
* <p>
|
||||
* bits_per_key: bits per key in bloom filter. A good value for bits_per_key
|
||||
* is 10, which yields a filter with ~ 1% false positive rate.
|
||||
* <p><strong>default bits_per_key</strong>: 10</p>
|
||||
* </p>
|
||||
* <p>use_block_based_builder: use block based filter rather than full filter.
|
||||
* If you want to builder full filter, it needs to be set to false.
|
||||
* </p>
|
||||
* <p><strong>default mode: block based filter</strong></p>
|
||||
* <p>
|
||||
* Callers must delete the result after any database that is using the
|
||||
* result has been closed.</p>
|
||||
* <p>
|
||||
* Note: if you are using a custom comparator that ignores some parts
|
||||
* of the keys being compared, you must not use this {@code BloomFilter}
|
||||
* 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 {@code BloomFilter}) that does not ignore
|
||||
* trailing spaces in keys.</p>
|
||||
*
|
||||
* @param bitsPerKey number of bits to use
|
||||
* @param useBlockBasedMode use block based mode or full filter mode
|
||||
*/
|
||||
public BloomFilter(int bitsPerKey, boolean useBlockBasedMode) {
|
||||
super();
|
||||
bitsPerKey_ = bitsPerKey;
|
||||
|
||||
useBlockBasedMode_ = useBlockBasedMode;
|
||||
createNewFilter();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void createNewFilter() {
|
||||
createNewFilter0(bitsPerKey_);
|
||||
createNewBloomFilter(bitsPerKey_, useBlockBasedMode_);
|
||||
}
|
||||
|
||||
private native void createNewFilter0(int bitsKeyKey);
|
||||
private native void createNewBloomFilter(int bitsKeyKey,
|
||||
boolean useBlockBasedMode);
|
||||
}
|
||||
|
@ -22,6 +22,10 @@ public class FilterTest {
|
||||
blockConfig = new BlockBasedTableConfig();
|
||||
blockConfig.setFilter(new BloomFilter());
|
||||
options.setTableFormatConfig(blockConfig);
|
||||
blockConfig.setFilter(new BloomFilter(10));
|
||||
options.setTableFormatConfig(blockConfig);
|
||||
blockConfig.setFilter(new BloomFilter(10, false));
|
||||
options.setTableFormatConfig(blockConfig);
|
||||
System.out.println("Filter test passed");
|
||||
}
|
||||
}
|
||||
|
@ -18,12 +18,14 @@
|
||||
|
||||
/*
|
||||
* Class: org_rocksdb_BloomFilter
|
||||
* Method: createNewFilter0
|
||||
* Signature: (I)V
|
||||
* Method: createBloomFilter
|
||||
* Signature: (IZ)V
|
||||
*/
|
||||
void Java_org_rocksdb_BloomFilter_createNewFilter0(
|
||||
JNIEnv* env, jobject jobj, jint bits_per_key) {
|
||||
const rocksdb::FilterPolicy* fp = rocksdb::NewBloomFilterPolicy(bits_per_key);
|
||||
void Java_org_rocksdb_BloomFilter_createNewBloomFilter(
|
||||
JNIEnv* env, jobject jobj, jint bits_per_key,
|
||||
jboolean use_block_base_builder) {
|
||||
const rocksdb::FilterPolicy* fp = rocksdb::NewBloomFilterPolicy(bits_per_key,
|
||||
use_block_base_builder);
|
||||
rocksdb::FilterJni::setHandle(env, jobj, fp);
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user