Apache Ignite Cache - получает все данные из базы данных - - PullRequest
0 голосов
/ 02 июля 2018

Насколько я уверен, что это условие всегда верно: Допустим, у меня есть 3 таблицы, которые содержат 1000, 2000, 3000 записей. И мне нужно загрузить все эти записи в кеш, но я хочу убедиться, что все данные находятся в кеше, прежде чем клиент использует этот кеш.

Обратите внимание, что режим кэширования реплицируется.

У Apache Ignite есть это будущее?

Вот что я планирую сделать:

Я установлю "atomicityMode" в "TRANSACTIONAL"

Я создам класс для cacheStoreFactory

Этот класс содержит метод loadCache, расширяемый от CacheStoreAdapter.

вот псевдокод:

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;
        }

     */
}

1 Ответ

0 голосов
/ 03 июля 2018

Вы можете использовать распределенные структуры данных, чтобы сигнализировать, что какое-то действие было выполнено. Например:

https://apacheignite.readme.io/docs/countdownlatch

https://apacheignite.readme.io/docs/distributed-semaphore

https://apacheignite.readme.io/docs/atomic-types

Также вы можете проверить размер кэша или отправить сообщение с одного узла на другой, как здесь:

https://github.com/apache/ignite/blob/master/examples/src/main/java/org/apache/ignite/examples/messaging/MessagingExample.java

Однако, пока вы не загрузите данные в транзакции, другие узлы не смогут их прочитать.

...