I have 250,000 records for each cache store and when I tried to join they are
pretty slow. 
Is annotation -> @affinityKey, @SqlQueryField works in java version? I am
using JDK1.8 version AND NOT Spring version. 

Can someone help how to use @affinitykey in group for below example in
'PARTIONED' without creating too much index. I am using REPLICATE mode now.
The example in ignite website is not clear with just two tables. What are
various recommendation to get good response from query execution.


Cache1
-------

package com.test.config
public class Account implements Serializable {
    /** */
    private static final long serialVersionUID = 0L;

    /** Value for dwId. */
    private long dwId;

    /** Value for accountNumber. */
    private Long accountNumber;

    /** Value for accountType. */
    private String accountType;
}

-------
package com.test.config
public class AccountCache {
        
        public static CacheConfiguration createAccountCache() throws Exception {
        CacheConfiguration ccfg = new CacheConfiguration();
        ccfg.setName(cacheName);
        ccfg.setCacheMode(CacheMode.REPLICATED);
        cacheStoreFactory.setTypes(jdbcTypeAccount("Account");
        ccfg.setCacheStoreFactory(cacheStoreFactory);

        ArrayList<QueryEntity> qryEntities = new ArrayList<>();
        QueryEntity qryEntity = new QueryEntity();
        qryEntity.setKeyType("java.lang.Long");
        qryEntity.setValueType("com.test.Account");
        qryEntity.setTableName("Account");
        qryEntity.setKeyFieldName("dwId");
        HashSet<String> keyFields = new HashSet<>();
        keyFields.add("dwId");
        qryEntity.setKeyFields(keyFields);
        LinkedHashMap<String, String> fields = new LinkedHashMap<>();
        fields.put("dwId", "java.lang.Long");
        fields.put("accountNumber", "java.lang.Long");
        fields.put("accountType", "java.lang.String");
        }


     **/
    private static JdbcType jdbcTypeAccount(String cacheName) {
        JdbcType type = new JdbcType();

        type.setCacheName(cacheName);
        type.setKeyType(Long.class);
        type.setValueType("com.test.Account");
        type.setDatabaseSchema("dbo");
        type.setDatabaseTable("Account");
        type.setKeyFields(new JdbcTypeField(Types.BIGINT, "DW_Id",
long.class, "dwId"));
        type.setValueFields(
                new JdbcTypeField(Types.BIGINT, "Account_Number",
Long.class, "accountNumber"),
                new JdbcTypeField(Types.VARCHAR, "Account_Type",
String.class, "accountType"),
        );

        return type;
    }
}
========
Cache 2

package com.test.config
public class AccountAddress implements Serializable {
    /** */
    private static final long serialVersionUID = 0L;

    /** Value for dwId. */
    private long dwId;

    /** Value for accountNumber. */
    private Long accountNumber;

    /** Value for accountType. */
    private String accountType;

    /** Value for addressId. */
    private Long addressId;
}

-----
package com.test.config
public class AccountAddressCache {

public static CacheConfiguration createAccountAddressCache() throws
Exception {
        CacheConfiguration ccfg = new CacheConfiguration();
        ccfg.setName(cacheName);
        ccfg.setCacheMode(CacheMode.REPLICATED);
        cacheStoreFactory.setTypes(jdbcTypeAccountAddress("AccountAddress");
        ccfg.setCacheStoreFactory(cacheStoreFactory);

        ArrayList<QueryEntity> qryEntities = new ArrayList<>();

        QueryEntity qryEntity = new QueryEntity();
        qryEntity.setKeyType("java.lang.Long");
        qryEntity.setValueType("com.test.AccountAddress");
        qryEntity.setTableName("Account_Address");
        qryEntity.setKeyFieldName("dwId");
        HashSet<String> keyFields = new HashSet<>();
        keyFields.add("dwId");
        qryEntity.setKeyFields(keyFields);

        LinkedHashMap<String, String> fields = new LinkedHashMap<>();

        fields.put("dwId", "java.lang.Long");
        fields.put("accountNumber", "java.lang.Long");
        fields.put("accountType", "java.lang.String");
        
        qryEntity.setFields(fields);
        ArrayList<QueryIndex> indexes = new ArrayList<>();
        QueryIndex index = new QueryIndex();
        index.setName("NonClustered_Index_AC_ID");
        index.setIndexType(QueryIndexType.SORTED);
        LinkedHashMap<String, Boolean> indFlds = new LinkedHashMap<>();
        indFlds.put("dwId", true);
        indFlds.put("accountNumber", true);
        indexes.add(index);
        qryEntity.setIndexes(indexes);
       
        qryEntities.add(qryEntity);
       //ccfg.setIndexedTypes(Long.class,Address.class);
        ccfg.setQueryEntities(qryEntities);

        return ccfg;
    }

    /**
     * Create JDBC type for "jdbcTypeAccountAddress".
     * 
     * @param cacheName Cache name.
     * @return Configured JDBC type.
     **/
    private static JdbcType jdbcTypeAccountAddress(String cacheName) {
        JdbcType type = new JdbcType();

        type.setCacheName(cacheName);
        type.setKeyType(Long.class);
        type.setValueType("com.test.AccountAddress");
        type.setDatabaseSchema("dbo");
        type.setDatabaseTable("Account_Address");
        type.setKeyFields(new JdbcTypeField(Types.BIGINT, "DW_Id",
long.class, "dwId"));
        type.setValueFields(
                new JdbcTypeField(Types.BIGINT, "Account_Number",
Long.class, "accountNumber"),
                new JdbcTypeField(Types.VARCHAR, "Account_Type",
String.class, "accountType"),
                new JdbcTypeField(Types.BIGINT, "Address_ID", Long.class,
"addressId"),
                new JdbcTypeField(Types.VARCHAR, "Address_Type",
String.class, "addressType"),
        );

        return type;
    }

}
======================================
selet * from AccountAddress a, AccountAddress b
where a.accountNumber=b.accountNumber
and a.accountType=b.accountType

The above query returns results in .08 seconds in ms-sql against 1.2 seconds
in ignite.




--
Sent from: http://apache-ignite-users.70518.x6.nabble.com/

Reply via email to