Позволяет ли Apache ignite запрашивать ключ раздела таблицы Cassandra без учета ключа кластера?

моя структура таблицы;

CREATE TABLE mydb.person (
    firstname text,
    lastname text,
    age int,
    birthdate timestamp,
    married boolean,
    phone text,
    PRIMARY KEY (firstname, lastname)
);

и я хочу, чтобы все данные о человеке имели имя "abc". поскольку я предоставляю только ключ раздела, а не ключ кластера.

получение результата из кеша только при указании и раздела, и ключа кластера.

попробовал запрос sql также, но дает таблицу ошибок, которая не найдена.

[изображение ошибки] [1] https://i.stack.imgur.com/OFem2.png

Конфигурация кеша выглядит следующим образом:

<!-- 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>
            </bean>
        </list>
    </property>
    <property name="clientMode" value="false"/>
    <!-- Explicitly configure TCP discovery SPI to provide list of initial nodes. -->
    <property name="discoverySpi">
        <bean class="org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi">
            <property name="ipFinder">
                <!--
                    Ignite provides several options for automatic discovery that can be used
                    instead os static IP based discovery. For information on all options refer
                    to our documentation: http://apacheignite.readme.io/docs/cluster-config
                -->
                <!-- Uncomment static IP finder to enable static-based discovery of initial nodes. -->
                <!--<bean class="org.apache.ignite.spi.discovery.tcp.ipfinder.vm.TcpDiscoveryVmIpFinder">-->
                <bean class="org.apache.ignite.spi.discovery.tcp.ipfinder.multicast.TcpDiscoveryMulticastIpFinder">
                    <property name="addresses">
                        <list>
                            <!-- In distributed environment, replace with actual host IP address. -->
                            <value>192.168.0.3:47500..47509</value>
                        </list>
                    </property>
                </bean>

и использовали стратегию pojo для ключа и значения.


person Manish Jaiswal    schedule 27.09.2017    source источник


Ответы (2)


Apache Ignite позволяет производить поиск в кеше по любым полям (не обязательно по ключам раздела и кластера). Как правильно настроить SQL в Apache Ignite читайте там: https://apacheignite.readme.io/docs#queryentity-based-configuration

person Nikolay Tikhonov    schedule 27.09.2017
comment
Я пробовал, чтобы имя моего кеша было cache1, а таблица - это человек, пробовал, но не смог найти это, даже использовал AffinityKeyMapped и QuerySqlField. - person Manish Jaiswal; 28.09.2017
comment
Не могли бы вы поделиться своим файлом конфигурации? - person Nikolay Tikhonov; 28.09.2017
comment
Вы не настраиваете Ignite Indexing. Вам нужно настроить их с помощью аннотаций или QueryEntity. Прочтите эту страницу apacheignite.readme.io/docs/indexes - person Nikolay Tikhonov; 01.10.2017
comment
извините за поздний ответ, но я нашел это и настроил тоже даже в файле конфигурации, теперь sql и запрос сканирования тоже работают нормально, и спасибо за помощь @nikolay - person Manish Jaiswal; 03.10.2017
comment
У меня есть еще одна проблема, которую я читал, но не работал должным образом. см. Прочитать - person Manish Jaiswal; 04.10.2017

Я обнаружил, что это из-за конфигурации индекса в файле конфигурации кеша, обратитесь к этой ссылке config index и Не удалось выполнить SQL. его работа просто добавлением строк ниже

 <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>
person Manish Jaiswal    schedule 03.10.2017