List of usage examples for com.google.common.hash PrimitiveSink putBytes
PrimitiveSink putBytes(byte[] bytes);
From source file:com.jordanwilliams.heftydb.test.performance.table.file.TableBloomFilterPerformance.java
public static void main(String[] args) throws Exception { TestFileHelper.createTestDirectory(); KeyValueGenerator keyValueGenerator = new KeyValueGenerator(); Value value = new Value(keyValueGenerator.testValue(100)); System.out.println("Writing bloom filter"); Paths paths = ConfigGenerator.testPaths(); TableBloomFilterWriter filterWriter = TableBloomFilterWriter.open(1, paths, RECORD_COUNT); BloomFilter<Key> guavaFilter = BloomFilter.create(new Funnel<Key>() { @Override/*from w w w .j a v a 2 s.c om*/ public void funnel(Key key, PrimitiveSink primitiveSink) { primitiveSink.putBytes(key.data().array()); } }, RECORD_COUNT, 0.01); for (int i = 0; i < RECORD_COUNT; i++) { value.data().rewind(); filterWriter.write(new Key(ByteBuffers.fromString(i + ""), i)); guavaFilter.put(new Key(ByteBuffers.fromString(i + ""), i)); } filterWriter.finish(); System.out.println("Reading bloom filter"); TableBloomFilter tableBloomFilter = TableBloomFilter.read(1, paths); double hits = 0; double misses = 0; double ghits = 0; double gmisses = 0; for (int i = RECORD_COUNT * 2; i > RECORD_COUNT; i--) { if (tableBloomFilter.mightContain(new Key(ByteBuffers.fromString(i + ""), i))) { hits++; } else { misses++; } if (guavaFilter.mightContain(new Key(ByteBuffers.fromString(i + ""), i))) { ghits++; } else { gmisses++; } } System.out.println("False positive rate: " + hits / (hits + misses)); System.out.println("Guava positive rate: " + ghits / (ghits + gmisses)); TestFileHelper.cleanUpTestFiles(); }
From source file:com.cinchapi.concourse.server.storage.cache.ByteableFunnel.java
@Override public void funnel(Composite from, PrimitiveSink into) { into.putBytes(ByteBuffers.toByteArray(from.getBytes())); }
From source file:iox.easycache.internal.AnyFunnel.java
@Override public void funnel(Object data, PrimitiveSink sink) { sink.putByte(MARK);//w ww. j a v a2s. com if (data == null) sink.putByte(NUL); else if (data instanceof byte[]) sink.putBytes((byte[]) data); else if (data instanceof char[]) sink.putString(new CharArray((char[]) data), Util.UTF); else if (data instanceof String) sink.putString((String) data, Util.UTF); else if (data instanceof boolean[]) { for (boolean e : (boolean[]) data) sink.putBoolean(e); } else if (data instanceof short[]) { for (short e : (short[]) data) sink.putShort(e); } else if (data instanceof int[]) { for (int e : (int[]) data) sink.putInt(e); } else if (data instanceof long[]) { for (long e : (long[]) data) sink.putLong(e); } else if (data instanceof float[]) { for (float e : (float[]) data) sink.putFloat(e); } else if (data instanceof double[]) { for (double e : (double[]) data) sink.putDouble(e); } else if (data instanceof Object[]) { for (Object e : (Object[]) data) funnel(e, sink); } else if (data instanceof Boolean) sink.putBoolean((Boolean) data); else if (data instanceof Byte) sink.putByte((Byte) data); else if (data instanceof Character) sink.putChar((Character) data); else if (data instanceof Short) sink.putShort((Short) data); else if (data instanceof Integer) sink.putInt((Integer) data); else if (data instanceof Long) sink.putLong((Long) data); else if (data instanceof Float) sink.putFloat((Float) data); else if (data instanceof Double) sink.putDouble((Double) data); else { putObject(data, sink); } }
From source file:io.github.maxymania.powercache.hash.AnyFunnel.java
private void funnel(Object data, PrimitiveSink sink, int dept) { if (dept > 80) { sink.putByte(ONE);//from www .ja va 2 s .com return; } sink.putByte(MARK); if (data == null) { sink.putByte(NUL); } else if (data instanceof byte[]) { sink.putBytes((byte[]) data); } else if (data instanceof char[]) { sink.putString(new CharArray((char[]) data), Util.UTF); } else if (data instanceof String) { sink.putString((String) data, Util.UTF); } else if (data instanceof boolean[]) { for (boolean e : (boolean[]) data) { sink.putBoolean(e); } } else if (data instanceof short[]) { for (short e : (short[]) data) { sink.putShort(e); } } else if (data instanceof int[]) { for (int e : (int[]) data) { sink.putInt(e); } } else if (data instanceof long[]) { for (long e : (long[]) data) { sink.putLong(e); } } else if (data instanceof float[]) { for (float e : (float[]) data) { sink.putFloat(e); } } else if (data instanceof double[]) { for (double e : (double[]) data) { sink.putDouble(e); } } else if (data instanceof Object[]) { for (Object e : (Object[]) data) { funnel(e, sink); } } else if (data instanceof Boolean) { sink.putBoolean((Boolean) data); } else if (data instanceof Byte) { sink.putByte((Byte) data); } else if (data instanceof Character) { sink.putChar((Character) data); } else if (data instanceof Short) { sink.putShort((Short) data); } else if (data instanceof Integer) { sink.putInt((Integer) data); } else if (data instanceof Long) { sink.putLong((Long) data); } else if (data instanceof Float) { sink.putFloat((Float) data); } else if (data instanceof Double) { sink.putDouble((Double) data); } else { putObject(data, sink, dept); } }
From source file:com.heliosapm.opentsdb.client.opentsdb.OTMetric.java
/** * Creates a new OTMetric// ww w.j a v a 2 s. co m * @param flatName The plain flat name from the Metric name * @param nprefix The optional prefix which is prefixed to the flat name * @param extension The optional extension which is appended to the TSDB metric name * @param extraTags The optional extra tags to add */ OTMetric(final String flatName, final String nprefix, final String extension, final Map<String, String> extraTags) { if (flatName == null) throw new IllegalArgumentException("The passed flat name was null"); final SplitFlatName sfn = OTMetric.splitFlatName(flatName); sfn.addTags(extraTags); final String fprefix = pref(nprefix); final String fext = suff(extension); final boolean isext = !"".equals(fext); final byte[] metricName = (fprefix + sfn.getMetricName() + fext).getBytes(UTF8); final Hasher hasherx = OTMETRIC_HASH.newHasher(); PrimitiveSink hasher = new CapturingPrimitiveSink(hasherx); if (!"".equals(fprefix)) { hasher.putBytes(fprefix.getBytes(UTF8)); // hasher.putBytes(DOT); } hasher.putBytes(sfn.getMetricName().getBytes(UTF8)); if (isext) { // hasher.putBytes(DOT); hasher.putBytes(fext.getBytes(UTF8)); } //hasher.putBytes(metricName); ByteBuffer buff = null; try { buff = ByteBuffer.allocateDirect((metricName.length + sfn.estimateSize()) * 3); // FIXME: Need a closer estimate buff.putLong(0) // the long hash code, Zero for now .putInt(0) // the java hash code, Zero for now .putLong(0) // the last trace time, Zero .put(sfn.hasAppTag() ? ONE_BYTE : ZERO_BYTE) // App Tag .put(sfn.hasHostTag() ? ONE_BYTE : ZERO_BYTE) // Host Tag .put(isext ? ONE_BYTE : ZERO_BYTE) // Ext flag .putLong(0L) // Parent long hash code .put(ZERO_BYTE) // CHMetric type mask .putInt(0) // The measurement mask .putInt(0) // SubMetric type flag .putInt(0) // Total Length, Zero for now .putInt(metricName.length) // Length of the prefix .putInt(sfn.getTags().size()) // Tag count .put(metricName); // The metric name bytes // IS_EXT_TAG || PARENT_TAG(8), CHMETRIC_TAG(1), MEASUREMENT_TAG(4), SUB_METRIC_TAG(4) int totalLength = metricName.length; if (!sfn.getTags().isEmpty()) { for (Map.Entry<String, String> entry : sfn.getTags().entrySet()) { final byte[] key = entry.getKey().getBytes(UTF8); final byte[] value = entry.getValue().getBytes(UTF8); int tagLength = key.length + value.length + TAG_OVERHEAD; hasher.putBytes(key); hasher.putBytes(value); buff.putInt(tagLength).put(QT).put(key).put(QT).put(COLON).put(QT).put(value).put(QT); totalLength += tagLength; } } final int pos = buff.position(); final HashCode hashCode = hasherx.hash(); buff.putLong(LONG_HASH_CODE, hashCode.padToLong()); buff.putInt(HASH_CODE, hashCode.hashCode()); buff.putInt(TOTAL_SIZE_OFFSET, totalLength); buff.limit(pos); buff.position(0); nameBuffer = ByteBuffer.allocateDirect(buff.limit()).put(buff); //.asReadOnlyBuffer(); } finally { OffHeapFIFOFile.clean(buff); } }