在启用本机持久性的情况下重新启动集群后,点燃搜索查询不返回结果
Ignite search query not returning results after Cluster restart with native persistence enabled
我们使用的是 GridGain 社区版:8.8.10,并使用 Apache Ignite 运算符在 Kubernetes 中创建了 Ignite 集群。我们还启用了本机持久性。
https://ignite.apache.org/docs/latest/installation/kubernetes/gke-deployment
在开发环境中,我们在夜间关闭集群并在早上启动。当集群出现时,它包含先前存储的数据。如果我们使用 key 搜索缓存,那么它 returns 结果,但是如果我们使用 Query API 进行部分搜索,那么它不会返回结果。我们检查了缓存大小,它与数据源记录大小相匹配。同样在我们使用缓存键搜索缓存之后,该条目在查询搜索结果中可用。
如果我们关闭 Ignite 集群的一个节点或客户端节点。 TextSearch 仍然有效。 TextSearch 仅在集群的所有节点都缩小然后使用现有磁盘放大时才起作用。
在冷启动 Ignite 集群后启用查询搜索是否需要任何配置?
<bean id="ignite.cfg" class="org.apache.ignite.configuration.IgniteConfiguration">
<property name="metricsLogFrequency" value="300000"/>
<property name="peerClassLoadingEnabled" value="true"/>
<property name="clientMode" value="true"/>
<property name="sqlConfiguration">
<bean class="org.apache.ignite.configuration.SqlConfiguration">
<property name="sqlGlobalMemoryQuota" value="300M"/>
<property name="sqlQueryMemoryQuota" value="30M"/>
<property name="sqlOffloadingEnabled" value="true"/>
</bean>
</property>
<property name="workDirectory" value="/gridgain/work"/>
<property name="dataStorageConfiguration">
<bean class="org.apache.ignite.configuration.DataStorageConfiguration">
<!-- set the size of wal segments to 128MB -->
<property name="walSegmentSize" value="#{128 * 1024 * 1024}"/>
<!-- Set the page size to 8 KB -->
<property name="pageSize" value="#{8 * 1024}"/>
<property name="defaultDataRegionConfiguration">
<bean class="org.apache.ignite.configuration.DataRegionConfiguration">
<property name="name" value="Default_Region"/>
<!-- Memory region of 20 MB initial size. -->
<property name="initialSize" value="#{20 * 1024 * 1024}"/>
<!-- Memory region of 8 GB max size. -->
<property name="maxSize" value="#{8L * 1024 * 1024 * 1024}"/>
<!-- Enabling eviction for this memory region. -->
<property name="pageEvictionMode" value="RANDOM_2_LRU"/>
<property name="persistenceEnabled" value="true"/>
<property name="warmUpConfiguration">
<bean class="org.apache.ignite.configuration.LoadAllWarmUpConfiguration"/>
</property>
<!-- Increasing the buffer size to 1 GB. -->
<property name="checkpointPageBufferSize" value="#{1024L * 1024 * 1024}"/>
</bean>
</property>
<property name="walPath" value="/gridgain/wal"/>
<property name="walArchivePath" value="/gridgain/wal"/>
</bean>
</property>
<property name="discoverySpi">
<bean class="org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi">
<property name="ipFinder">
<bean class="org.apache.ignite.spi.discovery.tcp.ipfinder.kubernetes.TcpDiscoveryKubernetesIpFinder">
<property name="namespace" value="cache"/>
<property name="serviceName" value="cache-service"/>
</bean>
</property>
<property name="NetworkTimeout" value="30000"/>
</bean>
</property>
<property name="communicationSpi">
<bean class="org.apache.ignite.spi.communication.tcp.TcpCommunicationSpi">
<property name="slowClientQueueLimit" value="2000"/>
</bean>
</property>
<property name="cacheConfiguration" ref="igniteCacheDefinition"/>
</bean>
Apache Ignite 使用 Apache Lucene(目前是 7.4.0)在引擎盖下进行文本查询。一般来说,基于 Lucene 的索引利用 org.apache.lucene.store.Directory. In Apache Ignite it's a custom one. In turn it uses RAM-based GridLuceneOutputStream 的各种实现。基本上这意味着 Ignite 本机持久性目前不会对这些类型的索引起作用。
UPD:在为分区缓存配置备份的情况下,它应该作为常规索引工作。例如,如果您向基线拓扑添加一个附加节点,您会在新节点上看到 rebalance happening. Rebalance uses regular cache operations to insert entries. Lucene index would be built。相反,如果您从集群中删除一个节点,您仍将拥有包括文本索引在内的完整数据副本。
我们使用的是 GridGain 社区版:8.8.10,并使用 Apache Ignite 运算符在 Kubernetes 中创建了 Ignite 集群。我们还启用了本机持久性。
https://ignite.apache.org/docs/latest/installation/kubernetes/gke-deployment
在开发环境中,我们在夜间关闭集群并在早上启动。当集群出现时,它包含先前存储的数据。如果我们使用 key 搜索缓存,那么它 returns 结果,但是如果我们使用 Query API 进行部分搜索,那么它不会返回结果。我们检查了缓存大小,它与数据源记录大小相匹配。同样在我们使用缓存键搜索缓存之后,该条目在查询搜索结果中可用。
如果我们关闭 Ignite 集群的一个节点或客户端节点。 TextSearch 仍然有效。 TextSearch 仅在集群的所有节点都缩小然后使用现有磁盘放大时才起作用。
在冷启动 Ignite 集群后启用查询搜索是否需要任何配置?
<bean id="ignite.cfg" class="org.apache.ignite.configuration.IgniteConfiguration">
<property name="metricsLogFrequency" value="300000"/>
<property name="peerClassLoadingEnabled" value="true"/>
<property name="clientMode" value="true"/>
<property name="sqlConfiguration">
<bean class="org.apache.ignite.configuration.SqlConfiguration">
<property name="sqlGlobalMemoryQuota" value="300M"/>
<property name="sqlQueryMemoryQuota" value="30M"/>
<property name="sqlOffloadingEnabled" value="true"/>
</bean>
</property>
<property name="workDirectory" value="/gridgain/work"/>
<property name="dataStorageConfiguration">
<bean class="org.apache.ignite.configuration.DataStorageConfiguration">
<!-- set the size of wal segments to 128MB -->
<property name="walSegmentSize" value="#{128 * 1024 * 1024}"/>
<!-- Set the page size to 8 KB -->
<property name="pageSize" value="#{8 * 1024}"/>
<property name="defaultDataRegionConfiguration">
<bean class="org.apache.ignite.configuration.DataRegionConfiguration">
<property name="name" value="Default_Region"/>
<!-- Memory region of 20 MB initial size. -->
<property name="initialSize" value="#{20 * 1024 * 1024}"/>
<!-- Memory region of 8 GB max size. -->
<property name="maxSize" value="#{8L * 1024 * 1024 * 1024}"/>
<!-- Enabling eviction for this memory region. -->
<property name="pageEvictionMode" value="RANDOM_2_LRU"/>
<property name="persistenceEnabled" value="true"/>
<property name="warmUpConfiguration">
<bean class="org.apache.ignite.configuration.LoadAllWarmUpConfiguration"/>
</property>
<!-- Increasing the buffer size to 1 GB. -->
<property name="checkpointPageBufferSize" value="#{1024L * 1024 * 1024}"/>
</bean>
</property>
<property name="walPath" value="/gridgain/wal"/>
<property name="walArchivePath" value="/gridgain/wal"/>
</bean>
</property>
<property name="discoverySpi">
<bean class="org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi">
<property name="ipFinder">
<bean class="org.apache.ignite.spi.discovery.tcp.ipfinder.kubernetes.TcpDiscoveryKubernetesIpFinder">
<property name="namespace" value="cache"/>
<property name="serviceName" value="cache-service"/>
</bean>
</property>
<property name="NetworkTimeout" value="30000"/>
</bean>
</property>
<property name="communicationSpi">
<bean class="org.apache.ignite.spi.communication.tcp.TcpCommunicationSpi">
<property name="slowClientQueueLimit" value="2000"/>
</bean>
</property>
<property name="cacheConfiguration" ref="igniteCacheDefinition"/>
</bean>
Apache Ignite 使用 Apache Lucene(目前是 7.4.0)在引擎盖下进行文本查询。一般来说,基于 Lucene 的索引利用 org.apache.lucene.store.Directory. In Apache Ignite it's a custom one. In turn it uses RAM-based GridLuceneOutputStream 的各种实现。基本上这意味着 Ignite 本机持久性目前不会对这些类型的索引起作用。
UPD:在为分区缓存配置备份的情况下,它应该作为常规索引工作。例如,如果您向基线拓扑添加一个附加节点,您会在新节点上看到 rebalance happening. Rebalance uses regular cache operations to insert entries. Lucene index would be built。相反,如果您从集群中删除一个节点,您仍将拥有包括文本索引在内的完整数据副本。