/*
* Copyright (C) 2014 Indeed Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
* in compliance with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software distributed under the
* License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
* express or implied. See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.indeed.flamdex.simple;
import com.indeed.flamdex.api.DocIdStream;
import com.indeed.flamdex.api.FlamdexReader;
import com.indeed.flamdex.api.IntTermIterator;
import com.indeed.flamdex.api.StringTermIterator;
import com.indeed.flamdex.lucene.LuceneFlamdexReader;
import org.apache.lucene.index.IndexReader;
import java.io.IOException;
import java.util.Collection;
/**
* @author jsgroth
*/
public class Benchmark {
public static void main(String[] args) throws IOException, InterruptedException {
final String luceneDir = args[0];
final String simpleDir = args[1];
final FlamdexReader reader1 = new LuceneFlamdexReader(IndexReader.open(luceneDir));
final FlamdexReader reader2 = SimpleFlamdexReader.open(simpleDir);
benchmark(reader1, reader2);
}
public static void benchmark(FlamdexReader reader1, FlamdexReader reader2) throws InterruptedException {
final Collection<String> intFields = reader2.getIntFields();
// final Collection<String> intFields = Collections.emptyList();
final Collection<String> stringFields = reader2.getStringFields();
// final Collection<String> stringFields = Collections.emptyList();
for (int i = 0; i < 10; ++i) {
System.gc();
Thread.sleep(2000);
doIt(reader1, intFields, stringFields);
}
for (int i = 0; i < 10; ++i) {
System.gc();
Thread.sleep(2000);
doIt(reader2, intFields, stringFields);
}
}
private static void doIt(final FlamdexReader reader, final Collection<String> intFields, final Collection<String> stringFields) {
final int[] docIdBuf = new int[32];
long elapsed = -System.currentTimeMillis();
final DocIdStream docIdStream = reader.getDocIdStream();
long someVar = 0L;
for (final String intField : intFields) {
final IntTermIterator it = reader.getIntTermIterator(intField);
while (it.next()) {
docIdStream.reset(it);
while (true) {
final int n = docIdStream.fillDocIdBuffer(docIdBuf);
for (int i = 0; i < n; ++i) {
someVar += docIdBuf[i];
}
if (n < docIdBuf.length) break;
}
}
}
for (final String stringField : stringFields) {
final StringTermIterator it = reader.getStringTermIterator(stringField);
while (it.next()) {
docIdStream.reset(it);
while (true) {
final int n = docIdStream.fillDocIdBuffer(docIdBuf);
for (int i = 0; i < n; ++i) {
someVar += docIdBuf[i];
}
if (n < docIdBuf.length) break;
}
}
}
elapsed += System.currentTimeMillis();
System.out.println("meaninglessVariable="+someVar);
System.out.println("time for "+reader.getClass().getSimpleName()+":"+elapsed+"ms");
}
}