solrインデックスからランダムにパフォーマンステストを読み込む
4920 ワード
本文はこの文章の中の1つのテストに対してです:メモリキャッシュとハードディスクキャッシュのアクセス速度の比較
データ準備コード:
クエリーテスト:
ここではSimpleFSDirectory,MMapDirectory,RandomAccessFileの性能を比較した.
MMapDirectory:
consume:916
consume:270
consume:179
consume:169
consume:143
consume:151
consume:157
consume:172
consume:138
consume:140
SimpleFSDirectory
consume:1083
consume:443
consume:381
consume:377
consume:393
consume:374
consume:397
consume:364
consume:360
consume:395
RandomAccessFile
684
664
639
645
639
651
639
689
643
652
データ準備コード:
import java.io.File;
import java.io.IOException;
import java.io.RandomAccessFile;
import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.payloads.PayloadHelper;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.index.IndexWriterConfig;
import org.apache.lucene.index.IndexWriterConfig.OpenMode;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.SimpleFSDirectory;
import org.apache.lucene.util.Version;
public class SolrTest {
public static void main(String[] args) throws IOException {
Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_36);
RandomAccessFile randomFile = new RandomAccessFile(new File(
"DocReplication.text"), "rw");
Directory dir = new SimpleFSDirectory(new File("indexdir"));
IndexWriterConfig iwc = new IndexWriterConfig(Version.LUCENE_34,
analyzer);
iwc.setOpenMode(OpenMode.CREATE_OR_APPEND);
IndexWriter writer = new IndexWriter(dir, iwc);
for (int i = 0; i < 2000000; i++) {
//
randomFile.write(PayloadHelper.encodeInt(i));
randomFile.write(long2Array(i + 1));
randomFile.write(long2Array(i + 2));
// lucene document
Document doc = new Document();
doc.add(new Field("id", String.valueOf(i), Field.Store.YES,
Field.Index.NOT_ANALYZED_NO_NORMS));
doc.add(new Field("id2", String.valueOf(i), Field.Store.YES,
Field.Index.NOT_ANALYZED_NO_NORMS));
writer.addDocument(doc);
System.out.println("point:" + randomFile.getFilePointer());
}
writer.commit();
writer.close();
randomFile.close();
}
static byte[] long2Array(long val) {
int off = 0;
byte[] b = new byte[8];
b[off + 7] = (byte) (val >>> 0);
b[off + 6] = (byte) (val >>> 8);
b[off + 5] = (byte) (val >>> 16);
b[off + 4] = (byte) (val >>> 24);
b[off + 3] = (byte) (val >>> 32);
b[off + 2] = (byte) (val >>> 40);
b[off + 1] = (byte) (val >>> 48);
b[off + 0] = (byte) (val >>> 56);
return b;
}
}
クエリーテスト:
public static void test1() throws Exception {
RandomAccessFile randomFile = new RandomAccessFile(new File(
"/home/yunpeng/ali_workspace2/dtrace/DocReplication.text"), "rw");
long current = System.currentTimeMillis();
for (int i = 0; i < 100000; i++) {
int docid = (int) (Math.random() * 2000000);
randomFile.seek(docid * 20 + 4);
randomFile.readLong();
randomFile.readLong();
}
System.out.println((System.currentTimeMillis() - current));
randomFile.close();
}
public static void test2() throws Exception {
// Directory dir = new SimpleFSDirectory(new File("/home/yunpeng/ali_workspace2/dtrace/indexdir"));
Directory dir = new MMapDirectory(new File("/home/yunpeng/ali_workspace2/dtrace/indexdir"));
long start = System.currentTimeMillis();
IndexReader reader = IndexReader.open(dir);
Document doc = null;
for (int i = 0; i < 100000; i++) {
int docid = (int) (Math.random() * 2000000);
doc = reader.document(docid);
doc.get("id");
doc.get("id2");
}
System.out.println("consume:" + (System.currentTimeMillis() - start));
}
public static void main(String[] args) throws Exception {
for (int i = 0; i < 10; ++i) {
test2();
}
}
ここではSimpleFSDirectory,MMapDirectory,RandomAccessFileの性能を比較した.
MMapDirectory:
consume:916
consume:270
consume:179
consume:169
consume:143
consume:151
consume:157
consume:172
consume:138
consume:140
SimpleFSDirectory
consume:1083
consume:443
consume:381
consume:377
consume:393
consume:374
consume:397
consume:364
consume:360
consume:395
RandomAccessFile
684
664
639
645
639
651
639
689
643
652