一. 索引存储
当文档提交到索引之后, directory 目录组件会将它们写入到持久化存储器. Solr 的目录组件具有以下重要特点:
1. 隐藏持久存储的读写细节, 例如, 将文档写入到磁盘或通过 JDBC 在数据库中存储文档.
2. 实现特定的存储锁定机制, 防止索引出错. 例如, 在操作系统级别上基于文件系统的存储锁定.
3. 将 Solr 从 JVM 和操作系统的专有性中解脱出来.
4. 启用基础目录方案的扩展机制, 以支持特定应用, 如近实时搜索.
Solr 提供了不同的目录方案, 但没有所谓的适用于所有 Solr 装机情况的最佳目录方案. 根据 Solr 应用的具体情况, 思考如何确定最佳方案. 实践中取决于操作系统本身, JVM 类型及应用场景等.
二. 默认存储配置
默认情况下, Solr 为一个内核设置一个数据目录, 将数据存储在本地文件系统中. 默认情况下, 将索引数据存储在 conf 配置目录同级的 data 目录下. 在 Solr4.x 及之前的版本中, 可以直接配置 Solr core 的一些基本信息, 如下:
<core loadOnStartup="true" instanceDir="collection1/" transient="false" name="collection1" dataDir="/usr/local/solr-data/collection1" />
但是在之后版本就不建议这样配置, 随着版本更新, 新版本逐渐从之前的单机 Solr 转向 SolrCloud 集群, 在集群模式中, 索引数据的配置都是一直的, 不需要单独指定.
首先要考虑, 索引的数据目录是否有足够的存储容量. 此外, 数据目录支持快速读写也是非常重要的, 其中对读性能要求更高 [Solr 的目的是快速查询而不是批量更新] . 因此, 在设置 Solr 时需要考虑一下问题:
1. 每个内核不应与其他进程争夺磁盘空间.
2. 如果同一台服务器上有多个内核, 建议为每个索引单独设置独立的物理磁盘进行存储.
3. 如果预算允许, 考虑使用高质量, 高速磁盘, 如固态硬盘 SSD.
4. 考虑服务器 RAID[磁盘阵列] 策略对 Solr 的影响.
5. 操作系统中用于缓存的内存容量也会对磁盘 I/O 需求产生不可小觑的影响.
三. 选择一个目录方案
一旦解决了存储方面的问题, 还需要考虑存储方案的最佳目录方案. Solr 使用 Solr.NRTCachingDirectoryFactory 启用默认目录, 在 solrconfig.xml 中配置 < directoryFactory > 元素来指定此目录.
NRTCachingDirectoryFactory 是 Solr.StandDirectoryFactory 的一个封装类, 用来添加对近实时搜索的支持. 在运行时, StandardDirectoryFactory 根据操作系统与 JVM 类型来选择一个具体的目录方案.
详解:
1.MMapDirectory: 读取索引时使用内存映射 I/O. 这是安装了 Oracle JVM 的 64 位 Windows,Solaris 或 Linux 类操作系统的最佳选择.
2.SimpleFSDirectory: 使用 Java 的 RandomAccessFile 方法. 除非是 32 位 Windows 操作系统, 否则应避免使用此方法.
3.NIOFSDirectory: 通过 java.nio 进行优化, 以避免同一个文件的同步读操作. 这是 JVM 长期存在的一个问题, 应避免在 Windows 上使用此方法.
通过 Solr 控制台的内核管理页, 可以看见 Solr 服务器指定的数据目录 [单机模式] :
注意, 在 SolrCloud 集群模式时是看不到这是设置的!
来源: http://www.bubuko.com/infodetail-3321137.html