在内存中运行Solr?

时间:2011-10-26 15:14:25

标签: solr

有一天晚上,我在当地一家酒吧喝了一品脱,并与我旁边的小伙子进行了一次谈话。事实证明,他不仅是一名开发人员,而且还经常使用Solr。当我们谈论Solr是多么棒的时候,他提到了一些我从未弄清楚的东西。他说,“让Solr真正发挥作用的方法就是让它在记忆中运行。”

唉,我没有得到他的名字,尽管谷歌搜索答案,我从来没有真正找到任何具体的东西。你认为他的意思是什么?

4 个答案:

答案 0 :(得分:10)

对于任何希望为加速测试而这样做的人:

如果您的测试索引具有单独的核心,则可以将directoryFactory中的solrconfig.xml属性更改为:

<directoryFactory name="DirectoryFactory" class="solr.RAMDirectoryFactory"/>

毋庸置疑,将任何生产数据仅保留在内存中并不是一个好主意。

答案 1 :(得分:1)

在内存中运行SOLR实在是没有意义。 SOLR旨在成为一个Web服务器,客户端可以使用RESTless api进行查询。您可以设置复制以补偿高流量。 SOLR包裹Lucene。如果你想在内存中运行SOLR,那么你基本上在内存中运行Lucene。所以我建议只启动Lucene的一个实例并让磁盘在内存中。我很想知道其他人的想法但是在内存中运行SOLR实际上并不是故意使用的。对于Lucene,在内存中实现了一个名为DirectoryRAMDirectory

有一段时间也有类似的问题关于运行SOLR嵌入式模式,但过了一段时间Apache不赞成嵌入式服务器的东西,因为这真的是Lucene的用途。

答案 2 :(得分:1)

他可能意味着拥有足够的磁盘缓存来保存整个索引。这是一种广泛推荐的确保快速小型随机IO读取(以及索引时批量写入)的方法,这对于良好的Solr性能至关重要:https://wiki.apache.org/solr/SolrPerformanceProblems#OS_Disk_Cache

对于额外RAM成本相对较低的较小索引,这是一个很好的建议。随着索引的增长,投入更多时间进行规模测试并尝试其他硬件设置可能会更好,SSD显然是可能的。

答案 3 :(得分:0)

虽然速度是运行RAMDirectory的好理由,但您最终必须将目录保存到磁盘。您可能可以编写一个简单的包装器,而不是包装RAMDirectory和FSDirectory,并将调用镜像到两者。所有查询都来自RAMDirectory,但更改将应用​​于两者。

但另一个很好的理由是静态加密。如果您确实想要使用它,加密数据会很糟糕,因为您必须支付解密查询的开销。在静止状态下使用加密数据是不切实际的,但是如果你将内容解密到内存中并缓存它,那么它就会非常快。