我正在使用Ignite 2.5,并已部署了几台这样的服务器:
我有这样的课程:
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一起使用。
我有时需要更新类定义,即添加另一个字段。我可以关闭整个集群以更新类,因为它仍然需要应用程序更新。
当前,当我更新Person类中的字段时,出现奇怪的错误,例如:
未知对[platformId = 0,typeId = 1968448811]
很抱歉,如果这里有多个问题,我莫名其妙地因“未知对”问题而迷失了,现在我在质疑我的完整设置是否正确。
谢谢您的建议。
答案 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]
能否请您提供完整的堆栈跟踪信息,并说出在什么操作上遇到此错误?