我正在尝试使用SolrCloud索引大量简单文档,并且遇到了一些性能和可伸缩性限制,并且想知道可以做些什么.
硬件方面,我有一个32节点的Hadoop集群,我用它来运行所有的Solr分片,每个节点有128GB的内存.当前的SolrCloud设置被分成4个单独的32个分片的单独云,从而每个云提供4个运行分片或每8个节点分配一个云.每个分片当前分配了6GB的堆大小.我宁愿避免增加Solr分片的堆内存,以便在集群上运行其他MapReduce作业.
我目前每天在这些云中插入的文件率在两个云中为50亿,第三个为30亿,第四个为20亿; 但是,考虑到容量,目标是扩展解决方案以支持双倍数量的文档.要为这些文档编制索引,可以运行生成Solr XML文档的MapReduce作业,然后通过SolrJ的CloudSolrServer接口提交这些文档.在测试中,我发现将每个云的活动并行插入数量限制为80可以获得最佳性能,因为任何更高的性能都会导致收益递减,这很可能是由于文档在内部不断改组为SolrCloud.从索引的角度来看,正在创建过时的集合来保存一整天的文档,并且通常插入主要发生在当天(前几天只允许搜索),并且计划最多可以保留60天(或者每个云中的集合).最繁忙的云中一个集合中的单个分片索引当前占用整个集合的30G磁盘空间或960G.文档正在自动提交,提交时间为4分钟(opensearcher = false),软提交时间为8分钟.
从搜索角度来看,用例是相当通用且简单的类型搜索:,因此无需调整系统以使用任何更高级的查询功能.因此,对我来说最重要的是使索引性能能够跟上输入的速度.
在初始负载测试中,我能够实现每天每天云计算100亿个文档的预计索引率,总计每天400亿.但是,初始负载测试是在相当空的云上完成的,只有几个小集合.现在已经有几天的文档被编入索引,一旦云在两个最大的云中达到大约15个完整集合(或每个云大约80-100亿个文档),我开始看到索引性能下降相当急剧下降.根据当前的应用程序日志记录,我发现索引性能下降了40%.因此,我担心随着更多集合的添加,性能将如何保持.
我向社区提出的问题是,是否有其他人有过以这种规模使用Solr的经验(数千亿),并且如果有人观察到索引性能随着收集数量的增加而下降.我的理解是每个集合都是一个单独的索引,因此插入率应保持不变.除此之外,还可以在SolrCloud配置中进行哪些其他调整或更改以提高索引性能的速度?我是否对Solr能够处理的事情施加了严格的限制?
所以我有很多solr实例在运行并提交搜索我只是把一个快速的网站放在一起.在我发出请求URL之后,在php中我使用以下命令从solr获取XML响应:
$solr_return= file_get_contents($full_request_URL);
Run Code Online (Sandbox Code Playgroud)
现在响应不是一个简单的xml格式,如果你知道我的意思,它就有了它的解决方案.我希望能够解析返回的xml并在html中的表中的行中显示它们.
我一直在网上看,有许多不同的想法让我觉得我可能完全不在,这不是这样做的方法.如果你是我,你会怎么做?
xml $solr_return看起来像这样:
<?xml version="1.0" encoding="UTF-8"?>
<response>
<lst name="responseHeader">
<int name="status">0</int>
<int name="QTime">95</int>
<lst name="params">
<str name="indent">true</str>
<str name="rows">10</str>
<str name="start">0</str>
<str name="q">*:*</str>
<str name="shards">some shards here</str>
</lst>
</lst>
<result name="response" numFound="2403043" start="0">
<doc>
<str name="1">test1</str>
<str name="2">test2</str>
<str name="3">test3</str>
</doc>
<doc>
<str name="1">test1</str>
<str name="2">test2</str>
<str name="3">test3</str>
</doc>
</result>
</response>
Run Code Online (Sandbox Code Playgroud)
对于此示例,我想显示一个包含三列1,2和3以及两行test1,test2和test3的表.
感谢您的帮助.
使用solrcloud 4.6,假设我有一个8节点集群,每个节点上运行一个分片和许多不同的集合.基本上每天都会收集一些(用于分区数据).现在的问题是如何在不知道名字的情况下搜索所有收藏品?
维基说我可以这样做:
http://localhost:8983/solr/collection1/select?collection=collection1_NY,collection1_NJ,collection1_CT
Run Code Online (Sandbox Code Playgroud)
这基本上是同时搜索多个集合.但在我的情况下,集合是动态创建的,我不知道当前的名称.
有没有办法发送命中所有集合的通用搜索查询?
或者指定一系列集合的方式,如collection1-10或collection*2013?
我也知道我可以加入ZK并获取信息,但这对我正在做的事情来说太先进了.
谢谢.