2017-10-04 113 views
0

第一次當我啓動遠程緩存服務器它給出的輸出,但第二次查詢不工作,但我在客戶端節點上獲取緩存大小。即使我可以通過cache.iterator()獲取數據,但不是通過緩存查詢而不是通過sql來獲取,也不能通過文本查詢來掃描。點燃緩存查詢不起作用

代碼: -

List<Cache.Entry<PersonKey, Person>> as = cache.query(new SqlQuery<PersonKey, Person>(Person.class, sql). 
       setArgs("Manish")).getAll(); 

     System.out.println("data " + as); 
     System.out.println("size " + cache.size()); 
     Iterator<Cache.Entry<PersonKey, Person>> abc = cache.iterator(); 
     while (abc.hasNext()) { 
      Cache.Entry<PersonKey, Person> data = abc.next(); 
      System.out.println("data " + data); 
     } 
     for (Cache.Entry<PersonKey, Person> e : as) { 
      System.out.println(e.getValue().toString()); 
     } 

     SqlFieldsQuery qry = new SqlFieldsQuery("select firstname, lastname from Person where firstname='Manish'"); 

     try (FieldsQueryCursor<List<?>> cursor = cache.query(qry)) { 
      for (List<?> row : cursor) { 
       System.out.println("firstname:" + row.get(0) + ", lastname:" + row.get(1)); 
      } 
     } 

我的緩存配置: -

<import resource="classpath:cassandra/connection-settings.xml" /> 

<!-- Persistence settings for 'cache1' --> 
<bean id="cache1_persistence_settings" class="org.apache.ignite.cache.store.cassandra.persistence.KeyValuePersistenceSettings"> 
    <constructor-arg type="org.springframework.core.io.Resource" value="classpath:persistence/primitive/persistence-settings-1.xml" /> 
</bean> 

<!-- Ignite configuration --> 
<bean id="ignite.cfg" class="org.apache.ignite.configuration.IgniteConfiguration"> 
    <property name="cacheConfiguration"> 
     <list> 
      <!-- Configuring persistence for "cache1" cache -->  
      <bean class="org.apache.ignite.configuration.CacheConfiguration"> 
       <property name="name" value="cache1"/> 
       <property name="readThrough" value="false"/> 
       <property name="writeThrough" value="true"/> 
       <property name="writeBehindEnabled" value="true"/> 
       <property name="writeBehindFlushSize" value="2"/> 
       <!--     <property name="atomicityMode" value="TRANSACTIONAL"/> 
       <property name="backups" value="1"/>--> 
       <property name="cacheStoreFactory"> 
        <bean class="org.apache.ignite.cache.store.cassandra.CassandraCacheStoreFactory"> 
         <property name="dataSourceBean" value="cassandraAdminDataSource" /> 
         <property name="persistenceSettingsBean" value="cache1_persistence_settings"/> 
        </bean> 
       </property> 
       <property name="queryEntities"> 
        <list> 
         <bean class="org.apache.ignite.cache.QueryEntity"> 
          <property name="keyType" value="com.manish.igniteexample.PersonKey"/> 
          <property name="valueType" value="com.manish.igniteexample.Person"/> 

          <property name="fields"> 
           <map> 
            <entry key="firstname" value="java.lang.String"/> 
            <entry key="lastname" value="java.lang.String"/> 
            <entry key="age" value="java.lang.Integer"/> 
            <entry key="married" value="java.lang.Boolean"/> 
            <entry key="birthDate" value="java.util.Date"/> 
            <entry key="phone" value="java.lang.Integer"/> 
           </map> 
          </property> 

          <property name="indexes"> 
           <list> 
            <bean class="org.apache.ignite.cache.QueryIndex"> 
             <constructor-arg value="firstname"/> 
            </bean> 
            <bean class="org.apache.ignite.cache.QueryIndex"> 
             <constructor-arg value="lastname"/> 
            </bean> 
           </list> 
          </property> 
         </bean> 
        </list> 
       </property> 
      </bean> 
     </list> 
    </property> 
    <property name="clientMode" value="false"/> 

,併爲如下的PIC

first time execution我的輸出方案,Second time execution

+0

當您禁用索引時會重現嗎? – Denis

+0

您能提供帶有-DIGNITE_QUIET = false系統屬性的Ignite日誌嗎? – alexfedotov

+0

它也工作沒有「where firstname ='Manish'」條件? – Denis

回答

1

解決這個問題,通過糾正我的POJO類,在QuerySqlFiel中添加名稱屬性d。

public class Person { 

    @QuerySqlField(name = "firstname" , index = true) 
    private String firstname; 

    @QuerySqlField(name = "last_name" , index = true) 
    private String lastname; 

    @QuerySqlField(name = "age") 
    private int age; 

    @QuerySqlField(name = "married") 
    private boolean married; 

    @QuerySqlField(name = "birth_date") 
    private Date birthDate; 

    @QuerySqlField(name = "phones") 
    private String phones; 

    /** 
    * getter and setter methods ... 
    */ 
}