Ignite Cache Persistence server for DB с серверами для вычислений - PullRequest
0 голосов
/ 13 сентября 2018

Я использую Ignite 2.5 и развернул пару таких серверов:

  1. Один компьютер работает как сервер БД с включенным постоянством.
  2. Три других компьютера являются вычислительными серверамис тем же кэшем, что и на сервере БД, но без постоянства.

У меня есть такие классы:

public class Address implements Serializable
{
  String streetName;
  String houseNumber;
  String cityName;
  String countryName;
}

public class Person implements Serializable
{
  @QuerySqlField
  String firstName;

  @QuerySqlField
  String lastName;

  @QuerySqlField
  Address homeAddress;
}

Кэш настроен на всех серверах с этим XML:

 <bean class="org.apache.ignite.configuration.CacheConfiguration">
    <property name="name" value="Persons" />
    <property name="cacheMode" value="PARTITIONED" />
    <property name="backups" value="0" />
    <property name="storeKeepBinary" value="true" />
    <property name="atomicityMode" value="TRANSACTIONAL"/> 
    <property name="writeSynchronizationMode" value="FULL_SYNC"/>
    <property name="indexedTypes">
        <list>
            <value>java.lang.String</value>
            <value>Person</value>
        </list>
    </property>
 </bean>

Кроме того, на сервере БД поддерживается постоянство, например:

<property name="dataStorageConfiguration">
    <bean class="org.apache.ignite.configuration.DataStorageConfiguration">
        <property name="storagePath" value="/data/Storage" />
        <property name="walPath" value="/data/Wal" />
        <property name="walArchivePath" value="/data/WalArchive" />
        <property name="defaultDataRegionConfiguration">
            <bean class="org.apache.ignite.configuration.DataRegionConfiguration">
                <property name="initialSize" value="536870912" />
                <property name="maxSize" value="1073741824" />
                <property name="persistenceEnabled" value="true" />
            </bean>
        </property>
    </bean>
</property>

<property name="binaryConfiguration">
    <bean class="org.apache.ignite.configuration.BinaryConfiguration">
        <property name="compactFooter" value="false" />
    </bean>
</property>

Кэш используется с put / get, но также с SqlQuery и SqlFieldsQuery.

From timeко времени я должен обновить определения классов, то есть добавить другое поле или около того.Я в порядке, чтобы отключить весь кластер для обновления классов, так как это все равно требует обновления приложения.

  • Я полагаю, что вышеуказанная конфигурация в целом подходит для Ignite?
  • Правильно ли я понимаю этот другой вопрос ( Apache Ignite для постоянного хранилища, рекомендуемый путь для версий классов ) правильно, что на сервере БД у меня не будет классов Person в пути к классам?Разве конфигурация XML не потерпит неудачу, потому что в ней отсутствуют классы индекса?
  • На вычислительных серверах я также не буду использовать классы Person, а вместо этого буду читать данные из кэша в BinaryObject?Идея вручную заполнить мой класс Person из BinaryObject?

В настоящее время, когда я обновляю поле в классе Person, я получаю странные ошибки, такие как:

Неизвестная пара [platformId = 0, typeId = 1968448811]

Извините, если здесь есть несколько вопросов, я почему-то теряюсь с проблемами "Неизвестная пара" и теперь спрашиваю, верна ли моя полная настройка.

Спасибо за любые советы.

1 Ответ

0 голосов
/ 13 сентября 2018
  • Я полагаю, что вышеуказанная конфигурация в целом подходит для Ignite?

Нет, вы не можете настроить постоянство только для одного узла.Таким образом, в вашем случае все узлы будут хранить данные, но только один узел сохранит свои данные, поэтому будет сохраняться только часть данных, и это может привести к непредсказуемым последствиям.Если вы хотите, чтобы только один узел сохранял данные, вам нужно настроить фильтр узла .

. С помощью фильтра узла кэш будет расположен только на одном узле, и этот узел будет хранить данные, однаков этом случае ваши вычислительные узлы должны будут выполнять сетевой ввод-вывод для чтения из кэша.

  • Правильно ли я понимаю этот другой вопрос (рекомендуемый способ хранения в постоянном хранилище Apache Ignite для версий классов), что наСервер БД у меня не будет классов Person в classpath?Разве конфигурация XML не потерпит неудачу, потому что в ней отсутствуют классы индекса?

Вам не нужно, чтобы классы вашей модели находились в пути к классам, но, пожалуйста, убедитесь, что вы работаете с BinaryObjects только на стороне сервера, поэтому все вычислительные задачи должны использовать BinaryObjects,Также, как вы упомянули, эта конфигурация не будет работать, вам нужно использовать Query Entity вместо конфигурации индекса.

  • На вычислительных серверах я также не буду использоватьКлассы Person, но вместо этого читать из кэша в BinaryObject?Есть ли идея вручную заполнить мой класс Person из BinaryObject?

Ну, если у вас нет класса Person на стороне сервера, вы просто не можете создать класс Person, вынеобходимо использовать BinaryObject в ваших вычислительных заданиях.

В настоящее время при обновлении поля в классе Person возникают странные ошибки, такие как: Неизвестная пара [platformId = 0, typeId = 1968448811]

Не могли бы вы предоставить полную трассировку стека и сказать, при какой операции вы получаете эту ошибку?

...