如果我有一个 Solr 核心,其中有六个小字段,其中加载了 1 亿个文档,那么添加一批 100 万个文档会在合理的时间内运行吗?1000万呢?合理地说,我考虑的是几个小时,而不是几天。我被告知这将需要很长时间才能运行。这真的是一个问题吗?有哪些已知的提高性能的策略?这些字段通常很小,即 5-50 个字符。
4 回答
除了其他答案中已经提到的提高性能的两个建议(第一次尝试,第二次尝试):
1) 更新时减少日志记录:在 INFO 级别 SOLR 为每个文档附加一个条目。请参阅此处了解我们是如何做到的: http: //dmitrykan.blogspot.fi/2011/01/solr-speed-up-batch-posting.html有人报告说“速度提高了 3 倍”。
2) 将 solrconfig.xml 中的段数设置为非常大的索引,例如 10000。一旦批量索引完成,将参数值改回合理的低值,例如 10。
这是一个非常“棘手”的问题,其答案因模式而异。
- 您的 solr 安装有六个字段。但是,实际上有多少被编入索引?如果只索引一个字段,那么在索引 6 个字段的情况下,添加 100 万个文档将比添加 100 万个文档更快。
- 我认为被索引的字段类型也很重要。“text_general”类型的字段在索引时被分解为标记,而“string”类型的字段则不是。“字符串”类型不被分析,而是作为一个完整的令牌存储。
- 我有一些很长的字段被索引,添加 200 万个文档需要几分钟(尽管我的安装不包含 1 亿个文档)。因此,我认为将 1000 万条记录添加到您的安装中不需要几天的时间。
- 我不确定这一点,但也许运行 solr 实例的 cpu 的配置也很重要。所以,你可能需要看看你的 cpu 和内存是否可以处理这么多的负载。
由您决定长期运行的数据帖子是否存在问题。如果您的应用程序是用户密集型的,那么我建议您遵循某种主从配置,以便在发布数据时用户不会受到高 cpu 使用率的影响。我知道的一些关于提高性能的策略是“分片”。
http://carsabi.com/car-news/2012/03/23/step-by-step-solr-sharding/
或者是否可以按某个字段划分记录并将这些不同的文档放在不同的服务器上。
1 亿条记录对于 Solr 来说是一个相当大的索引。但是在一台好机器上添加 1000 万条记录应该是几小时而不是几天。您可能会发现以下电子邮件线程很有趣,因为它包含深入的问题和一些关于调整 10M 记录索引过程的最终建议。
此外,您没有说是否“存储”字段以及索引它们。如果你这样做了,你可能还会期待Solr 4.1 字段压缩。
影响索引性能的一个重要参数(就时间而言)是您定义data-config.xml文件的方式。
如果您的字段来自数据库中的多个表,您可以通过 2 种方式对其进行配置:
- 实体中的实体
- 具有连接查询的单个实体
第二种方法在很大程度上比第一种方法快,因为对数据库发起的查询数量减少了。