我读过以下文章:
http://wiki.apache.org/solr/SolrPerformanceFactors
http://wiki.apache.org/solr/SolrCaching
http://www.lucidimagination.com/content/scaling-lucene-and-solr
我有几个问题要问:
-XX:+UseCompressedStrings,我可以节省什么样的内存?为了保持一个简单的例子,如果我在omitNorms=true和omitTf=true中有一个索引字段(string)和一个存储字段(string),那么我可以期望在索引和文档缓存中节省什么呢?我猜大概有50%,但这可能太乐观了。*:*的自动臂查询会这样做吗?发布于 2011-12-25 06:00:30
6-8不肯定。
根据我在Solr性能调优方面的经验,您应该离开Solr来处理查询,而不是文档存储。你的大部分问题都集中在文档是如何占据空间的。Solr是一个搜索引擎,而不是文档存储库。如果您希望Solr快速并占用最少的内存,那么它应该保存的唯一东西是索引信息,以便进行搜索。文档本身应该存储、检索和呈现在其他地方。最好是在专门针对该工作进行优化的系统中。您应该存储在Solr文档中的唯一字段是从文档存储系统检索的ID。
发布于 2011-12-26 13:01:21
缓存
一般来说,缓存看起来是一个提高性能的好主意,但这也有很多问题:
此外,除非查询中有模式,否则缓存不太可能大大提高搜索延迟。相反,如果20%的流量是由于几个查询造成的,那么查询结果缓存可能会很有趣。配置缓存要求您很好地了解查询和文档。如果没有,则应该禁用缓存。
即使禁用所有缓存,由于OS I/O缓存,性能仍可能相当好。实际上,这意味着如果您一次又一次地读取文件的同一部分,很可能只会第一次从磁盘读取,然后从I/O缓存读取。禁用所有缓存允许您将更少的内存分配给JVM,这样I/O缓存就会有更多的内存。如果您的系统有12 2GB的内存,如果您将2GB的内存分配给JVM,这意味着I/O缓存可能能够缓存高达10G的索引(这取决于其他运行中也需要内存的应用程序)。
我建议您阅读这篇文章是为了获得更多关于应用程序级缓存和I/O缓存的信息:
https://www.varnish-cache.org/trac/wiki/ArchitectNotes
http://antirez.com/post/what-is-wrong-with-2006-programming.html
字段缓存
字符串的字段缓存的大小为(长度为maxDoc的整数数组)+(所有唯一字符串实例的一个数组)。因此,如果您有一个具有一个字符串字段的索引,该字段平均具有N个大小为S的实例,而如果索引有M个文档,则该字段的字段缓存的大小将近似为M * 4 + N * S。
字段缓存主要用于面和排序。即使是非常短的字符串(少于10个字符) > 40字节。,这也意味着如果您对具有大量唯一值的字符串字段进行排序或排序,Solr将需要大量内存。
模糊查询
FuzzyQuery在Lucene 3.x中速度慢,在Lucene 4.x中则快得多。
这取决于您选择的拼写检查器实现,但我认为Solr 3.x拼写检查器使用N-克来查找候选项(这就是为什么它需要一个专用索引),然后只计算候选人在此集合上的距离,因此性能仍然相当好。
https://stackoverflow.com/questions/8627594
复制相似问题