Sql-запрос через Ignite CacheStore или базу данных

Я новичок в Ignite, поэтому у меня есть несколько головоломок, одна из которых заключается в следующем: когда я пытаюсь запросить кеш, может ли он посмотреть, есть память или нет. Если нет, то будет ли он запрашивать базу данных? Если нет, то как добиться такого? Пожалуйста, помогите мне, если вы знаете. Спасибо.


person Xijie.Hu    schedule 25.07.2016    source источник


Ответы (1)


Запросы работают только с данными в памяти. Вы можете использовать ключевой доступ (такие операции, как get(), getAll() и т. д.) и использовать автоматическое считывание из хранилища сохраняемости или предварительно загружать данные вручную перед выполнением запросов. Информацию о том, как эффективно загружать большие наборы данных в кеш, см. на этой странице: https://apacheignite.readme.io/docs/data-loading

person Valentin Kulichenko    schedule 25.07.2016
comment
Спасибо,Валентин.Я поставил read-through true,однако похоже,что он не применяется.Почему? - person Xijie.Hu; 26.07.2016
comment
На самом деле, я имею в виду, что если в моем кеше хранится какое-то лицо, чей идентификатор меньше 5, и теперь я хочу запросить какое-то лицо, чей идентификатор меньше 6, но, как вы можете видеть, кеш не хранит человека, чей идентификатор равен 5 ! Так будет ли Ignite автоматически получать номер 5 из базы данных? Если нет, то как получить человека №5? - person Xijie.Hu; 26.07.2016
comment
Запросы не поддерживают сквозное чтение, т.к. для автоматической загрузки из БД нужно знать набор ключей, которых вы не знаете при выполнении запроса (знаете только некоторые критерии, например id‹6). При этом перед выполнением запросов необходимо убедиться, что все необходимые данные находятся в кеше. С другой стороны, если вы выполните операцию get() для этого идентификатора, запись будет загружена из базы данных автоматически. - person Valentin Kulichenko; 26.07.2016
comment
Если я хочу запросить, чей id‹10, то Ignite запросит кеш и вернет людей, чей id‹5 (потому что мой кеш хранит только таких людей). однако пользователь (например, я) не знает, хранится ли в базе данных человек, чей идентификатор находится в диапазоне от 5 до 10, так как же получить других людей из базы данных? Другими словами, если запрос по кешу возвращает нулевые объекты или меньше объектов, как сделать запрос на запуск по базе данных? Как вы сказали, перед выполнением запросов убедитесь, что все необходимые данные находятся в кеше, но как это сделать? Загрузить все данные из базы данных в кеш? Я не думаю, что это хорошая идея. - person Xijie.Hu; 27.07.2016
comment
Если даже вы не знаете, какие данные хранятся в вашей базе данных, почему вы ожидаете, что Ignite будет знать это? :) Вам не нужно загружать все данные, метод CacheStore.loadCache() поддерживает необязательные параметры, которые вы можете использовать для ограничения набора данных (см. страницу, которую я предоставил в ответе). Как правило, вы загружаете рабочий набор данных, который в настоящее время требуется для быстрого доступа в памяти, оставляя исторические данные в базе данных. - person Valentin Kulichenko; 27.07.2016
comment
Но как убедиться, что набор запросов по кешу - это все, что я хочу получить от базы данных - person Xijie.Hu; 28.07.2016
comment
@ Xijie.Hu Для этого нет универсального решения. loadCache() позволяет загружать что угодно из базы данных, и точный набор данных зависит только от вашего варианта использования. Вам нужно выяснить, какие данные вам нужно иметь в памяти, оценить ее размер, настроить соответствующий кластер, а затем загрузить данные. После этого вы можете запускать запросы. - person Valentin Kulichenko; 28.07.2016
comment
Теперь мой разум прояснился. Большое спасибо за ваше терпение! - person Xijie.Hu; 29.07.2016