用于数据库的Ignite Cache Persistence服务器以及用于计算的服务器

时间:2018-09-13 00:42:15

标签: ignite

我正在使用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一起使用。

我有时需要更新类定义,即添加另一个字段。我可以关闭整个集群以更新类,因为它仍然需要应用程序更新。

  • 我相信上述配置通常可以用于Ignite吗?
  • 我是否正确理解了另一个问题(Apache Ignite persistent store recommended way for class versions),即在数据库服务器上我的类路径中没有Person类?然后,XML配置不会因为缺少索引类而失败吗?
  • 在计算服务器上,我也不使用Person类,而是从缓存中读取到BinaryObject中?是从BinaryObject手动填充我的Person类的想法吗?

当前,当我更新Person类中的字段时,出现奇怪的错误,例如:

  

未知对[platformId = 0,typeId = 1968448811]

很抱歉,如果这里有多个问题,我莫名其妙地因“未知对”问题而迷失了,现在我在质疑我的完整设置是否正确。

谢谢您的建议。

1 个答案:

答案 0 :(得分:0)

  
      
  • 我相信上述配置通常可以用于Ignite吗?
  •   

否,您不能仅为一个节点配置持久性。因此,在您的情况下,所有节点都将存储数据,但是只有一个节点将保留其数据,因此只有部分数据将被保留,这可能导致不可预测的后果。如果只希望一个节点存储数据,则需要配置node filter

使用节点过滤器,缓存将仅位于一个节点上,并且该节点将存储数据,但是在这种情况下,您的计算节点将必须执行网络IO才能从缓存中读取数据。

  
      
  • 我是否理解另一个问题(Apache Ignite持久性存储   类版本的推荐方法)正确地在数据库服务器上   类路径中是否不应包含Person类?那会不会   XML配置失败,因为它缺少索引类?
  •   

您不需要模型的类位于类路径中,但是请确保仅在服务器端使用BinaryObjects,因此所有计算任务都应使用BinaryObjects。另外,正如您提到的那样,此配置将不起作用,您需要使用Query Entity来进行索引配置。

  
      
  • 在计算服务器上,我也不使用Person类,而是从缓存中读取到BinaryObject中?是从BinaryObject手动填充我的Person类的想法吗?
  •   

好吧,如果服务器端没有Person类,那么就无法创建Person类,则需要在计算作业中使用BinaryObject。

  

当前,当我更新Person类中的一个字段时,出现奇怪的错误,例如:未知对[platformId = 0,typeId = 1968448811]

能否请您提供完整的堆栈跟踪信息,并说出在什么操作上遇到此错误?