如何在没有持久存储的情况下为内存中的Ignite Cache配置索引

问题描述 投票:0回答:1

Ignite - 在我们的应用程序中,我们尝试在应用程序启动时将数据从文件加载到缓存中。 我们正在尝试在应用程序处理期间检索值[例如,API 请求登陆到我们的应用程序,试图在请求中验证缓存中的数据。

问题

  • 我们的缓存已配置/外部化[参考下面的示例]

     <bean class="org.apache.ignite.configuration.CacheConfiguration">
       <property name="name" value="AppMaster"/>
       <property name="cacheMode" value="PARTITIONED"/>
       <property name="atomicityMode" value="ATOMIC"/>
    <property name="queryEntities">
    <list>
      <bean class="org.apache.ignite.cache.QueryEntity">
       <property name="keyType" value="java.lang.String"/>
       <property name="valueType" value="java.util.HashMap"/>
       <property name="keyFieldName" value="keyId"/>
      <property name="keyFields">
       <list>
          <value>keyId</value>
       </list>
    </property>
     <property name="fields">
       <map>
        <entry key="keyId" value="java.lang.String"/>
       </map>
      </property>
     <property name="aliases">
       <map>
       <entry key="keyId" value="keyId"/>                                                                         
      </map>
      </property>
     </bean>
     </list>
    </property>
    </bean> 

问题

  • 正常的密钥获取操作在高负载下需要 200 毫秒(大约)
  • Stripe Pool 保持默认 8 [核心数]
  • 为这样的用例定义索引有帮助吗?
ignite
1个回答
0
投票

请注意,您的密钥始终有效地被索引。因此,如果您询问向其他列添加索引,那么该列必须显示为单独且独立的列,而不是 HashMap 中的任意条目。鉴于上述情况,我的建议如下: 1.) 确定输入文件中每列的类型和名称 2.) 使用具有上述名称和值的 SQL 创建语句创建缓存。 3.) 将数据加载到上面的 SQL 表中 4.) 使用创建索引语句将索引添加到所需的列。 5.) 根据索引列使用过滤器或条件进行查询。

有关创建索引的详细信息,请参阅以下内容:

https://ignite.apache.org/docs/latest/SQL/indexes

希望有帮助!

© www.soinside.com 2019 - 2024. All rights reserved.