我如何确定这种情况始终为真: 假设我有3个表,其中包含1000、2000、3000个记录。 而且我必须将所有记录都加载到缓存中,但是我想确保所有数据都在客户端使用此缓存之前被缓存。
请注意,缓存模式已复制。
Apache Ignite有这个未来吗?
这是我打算做的事情:
我将“ atomicityMode”设置为“ TRANSACTIONAL”
我将为cacheStoreFactory创建类
此类包含从CacheStoreAdapter扩展的loadCache方法。
这是pseducode:
public void loadCache(IgniteBiInClosure<K, V> clo, Object... args) {
// Connect the all databases
/*while true:
try(Transaction transaction = Ignition.ignite().transactions().txStart(TransactionConcurrency.OPTIMISTIC, TransactionIsolation.SERIALIZABLE)){
PreparedStatement for all databases such as "select * from persons"
then take the all ResultSet from all databases
then create the corresponding object from the results and put the "clo.apply(objectID, object);"
before transaction.commit()
if there is way, find the total records number from all databases (maybe find before starting try block)
then, again if there is way, compare the cache size and total records
If 2 numbers are equals -> transaction.commmit() & break
else -> continue;
}
*/
}
答案 0 :(得分:0)
您可以使用分布式数据结构来表示某些操作已完成。例如:
https://apacheignite.readme.io/docs/countdownlatch
https://apacheignite.readme.io/docs/distributed-semaphore
https://apacheignite.readme.io/docs/atomic-types
此外,您可以检查缓存的大小或将消息从一个节点发送到另一个节点,如下所示:
但是,在将数据加载到事务中之前,其他节点将无法读取它。