Ignite 如何确定CacheJdbcBlobStore表项的正确大小?
我正在尝试为我的ApacheIgnite应用程序设置一个持久缓存存储。我尝试使用的缓存存储是CacheJdbcBlobStore。以下是我在原型中使用的软件列表:Ignite 如何确定CacheJdbcBlobStore表项的正确大小?,ignite,Ignite,我正在尝试为我的ApacheIgnite应用程序设置一个持久缓存存储。我尝试使用的缓存存储是CacheJdbcBlobStore。以下是我在原型中使用的软件列表: JDK 1.8.0_66 ApacheTomcat 7.0.68 ApacheIgnite1.6.0 HyperSQL 2.3.4 我的数据源在春季设置如下: 以及点火配置: 但是,当我运行应用程序时,出现了以下异常: ERROR - root - Failed to updat
- JDK 1.8.0_66
- ApacheTomcat 7.0.68
- ApacheIgnite1.6.0
- HyperSQL 2.3.4
以及点火配置:
但是,当我运行应用程序时,出现了以下异常:
ERROR - root - Failed to update web session: null
class org.apache.ignite.IgniteException: Failed to save session: C56AF4E1DA01A439E43E512950D32D45
Caused by: javax.cache.integration.CacheWriterException: class org.apache.ignite.internal.processors.cache.CachePartialUpdateCheckedException: Failed to update keys (retry update if possible).: [C56AF4E1DA
01A439E43E512950D32D45]
Caused by: class org.apache.ignite.internal.processors.cache.CachePartialUpdateCheckedException: Failed to update keys (retry update if possible).: [C56AF4E1DA01A439E43E512950D32D45]
Suppressed: class org.apache.ignite.IgniteCheckedException: Failed to put object [key=C56AF4E1DA01A439E43E512950D32D45, val=WebSessionEntity [id=C56AF4E1DA01A439E43E512950D32D45, createTime=1464182374328, accessTime=1464182374330, maxInactiveInterval=1800, attributes=[]]]
at org.apache.ignite.internal.processors.cache.store.GridCacheStoreManagerAdapter.put(GridCacheStoreManagerAdapter.java:583)
at org.apache.ignite.internal.processors.cache.GridCacheMapEntry.innerUpdate(GridCacheMapEntry.java:2358)
at org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridDhtAtomicCache.updateSingle(GridDhtAtomicCache.java:2246)
... 37 more
Caused by: javax.cache.integration.CacheWriterException: Failed to put object [key=C56AF4E1DA01A439E43E512950D32D45, val=WebSessionEntity [id=C56AF4E1DA01A439E43E512950D32D45, createTime=1464182374328, accessTime=1464182374330, maxInactiveInterval=1800, attributes=[]]]
at org.apache.ignite.cache.store.jdbc.CacheJdbcBlobStore.write(CacheJdbcBlobStore.java:281)
at org.apache.ignite.internal.processors.cache.store.GridCacheStoreManagerAdapter.put(GridCacheStoreManagerAdapter.java:575)
... 39 more
Caused by: java.sql.SQLDataException: data exception: string data, right truncation; table: ENTRIES column: AKEY
at org.hsqldb.jdbc.JDBCUtil.sqlException(Unknown Source)
at org.hsqldb.jdbc.JDBCUtil.sqlException(Unknown Source)
at org.hsqldb.jdbc.JDBCPreparedStatement.fetchResult(Unknown Source)
at org.hsqldb.jdbc.JDBCPreparedStatement.executeUpdate(Unknown Source)
at org.apache.ignite.cache.store.jdbc.CacheJdbcBlobStore.write(CacheJdbcBlobStore.java:277)
... 40 more
我发现您需要将createTableQuery属性添加到jdbc.cachejdbcbBlobstoreFactory:
...
以便覆盖默认值:
create table if not exists ENTRIES (akey binary primary key, val binary)
我的问题是:如何确定表条目(尤其是val列)的大小?目前我投了10公里。如果我将大小设置得太高,那将是浪费,但是如果我将大小设置得太低,我迟早会遇到上面提到的异常。谢谢。也许您不必担心表条目的列大小。例如,在HyperSQL数据库中,如果按以下方式创建表:
如果不存在条目,则创建表(akey VARBINARY(100)主键,val BLOB(10k))
10k是列val的最大大小,而不是实际占用的空间。因此,如果实际长度低于最大限制,则不会造成浪费
在Oracle中,您可以按如下方式创建表:
创建表条目(akey VARCHAR2(100)主键,val BLOB);
同样,您不必担心列val的大小。在Oracle中,BLOB类型的列的大小可以被视为是无限制的。实际占用的空间取决于缓存的实际大小。不会浪费任何空间