`
san_yun
  • 浏览: 2663018 次
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

solr 从索引随机读性能测试

 
阅读更多

本文是对这篇文章中的一个测试: 内存缓存与硬盘缓存访问速度的比较

数据准备代码:

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

 

 

分享到:
评论

相关推荐

    hbase+solr创建二级索引完整操作

    ### hbase+solr创建二级索引完整操作 #### 一、概述 本文档详细介绍了如何利用HBase和Solr创建二级索引的过程。通过整合HBase与Solr的优势,可以构建高性能的数据存储与检索系统。HBase作为分布式列族数据库,能够...

    hbase+Coprocesser+solr实现二级索引

    在“hbase-increment-index-master”这个项目中,很可能就是利用了Coprocessor来实现实时更新Solr索引。 接下来,我们来看看如何集成Solr。Solr是Apache Lucene的一个子项目,是一个高性能、全文本搜索引擎服务器。...

    Dubbo+Solr+RabbitMQ实现Solr数据同步 DataSyncParent.zip

    1. **索引构建**:Solr允许开发者定义自己的索引模型,支持多种类型的字段,如文本、数字、日期等,并能对字段进行分词、分析。 2. **分布式搜索**:SolrCloud模式下,数据可以在多个节点间分布,通过Sharding和...

    Solr学习

    4. 自动故障检测与恢复:SolrCloud通过ZooKeeper监控节点状态,一旦检测到节点故障,会自动将该节点的分片领导权转移给其他副本,并重新分配未被覆盖的索引请求。 二、索引和查询的处理流程 1. 数据输入:索引数据...

    lucence case study

    Solritas 是一种基于 Velocity 的模板系统,旨在简化 Solr 输出的开发流程,使开发者能够更快地进行原型设计和测试。 #### LucidFind 服务 **目的**:公司技术展示和服务,构建了一个面向社区的服务,对 lucene....

    blog-sortminmax-perf:与对单值(长)字段进行排序的性能比较与对SOLR-2522中添加的2 arg“字段”函数进行排序的性能比较

    由包括的脚本在“ multi_1”字段中具有多个值的文档索引文档所生成的随机样本数据,并依靠更新的处理器来填充相应的“ min_1”和“ max_1”字段。 请注意,除了比较诸如min_l asc与field(multi_l,min) asc类的排序...

    HBase+官方文档-高清文字版

    但可以通过建立二级索引来改善查询性能,如使用Solr或者Elasticsearch进行集成。 8. **故障恢复和高可用性**:HBase利用Zookeeper实现故障检测和恢复,当Region Server失效时,Master Server能够快速重新分配其管理...

    百度持续交付项目组面试题

    **MySQL事务隔离级别**包括读未提交(READ UNCOMMITTED)、读已提交(READ COMMITTED)、可重复读(REPEATABLE READ)和串行化(SERIALIZABLE)。 - **读未提交**:允许读取尚未提交的数据。 - **读已提交**:只能...

    bigdata面试.zip

    面试可能涉及倒排索引、分词、评分机制、集群部署和性能优化等。 11. **其他技术面试题**:这部分可能涵盖大数据领域的其他重要工具和技术,如HBase、Pig、Oozie、Tez等,以及云计算平台(如AWS、Azure、Google ...

Global site tag (gtag.js) - Google Analytics