Apache Ignite кеш к SQL и наоборот - PullRequest
0 голосов
/ 16 апреля 2019

Я работаю над системой, которая будет извлекать данные из службы и помещать части ответа в кеш и / или в таблицу SQL.

Кэш необходим для непосредственного использования другими службами Java. Эти сервисы требуют более прямого соединения, чем абстракция SQL, поэтому нам нужно подключиться напрямую к кешу.

Таблица необходима для соединения JDBC SQL с внешними клиентами SQL, например, SQL Workbench, DBeaver, Tableau, сторонние системы.

У меня вопрос, как работает Ignite в отношении кешей и таблиц. Я знаю, что он хранит свои кэши в виде карт, похожих на другие IMDG. Думаю, я не понимаю, как это превращается в таблицу или какие API доступны для установки / получения между ними.

Итак, вопрос в том, как я могу взять INSERT со стороны JDBC / SQL и запросить его через кэш? Как я могу add() в кэш и SELECT со стороны JDBC / SQL? Если у меня есть таблица с именем "foo", создает ли она также кэш с именем "foo"?

Или я должен использовать одно или другое, а не кровоточить между двумя? Я не нашел много хороших примеров этого, так что, похоже, вы используете кеши или таблицы.

Было бы чрезвычайно выгодно иметь мост между ними. Мы переходим на Ignite из реализации H2, где мы собрали вместе кэш Hazelcast и SQL H2 и надеемся, что Ignite, построенный поверх H2, уже сделал нечто подобное.

В частности, я надеялся использовать DataStreamers , но я не очень разбираюсь в том, как это связано со стороной SQL / таблиц.

Ответы [ 2 ]

1 голос
/ 16 апреля 2019

Кэш Ignite относится к типу ключ-значение базы данных nosql. Вы можете запустить SQL-подобный запрос из кода Java, чтобы зажечь кеши, так как он их поддерживает. Например,

SELECT _KEY, _VAL from "foo".val 

Здесь foo - имя вашего кэша, а val - часть значения пары ключ-значение. Поскольку это все NOSQL, привязка его к RDBMS SQL не так рациональна, тем не менее мы можем связать все неосновные столбцы в таблице SQL с полями вашего объекта значения, а первичный - с ключевой частью.
Таким образом, в datastreamer вы можете создать коллекцию ключей, значений объектов и потоковую передачу. Внутренне это ничего не вызывает, но помещает операцию в кеш.
Чтобы выбрать в SQL Fashon, вы можете запустить запрос, как показано ниже-

SqlFieldsQuery query = new SqlFieldsQuery(queryString);
FieldsQueryCursor<List<?>> cursor = cache.query(query);   

Есть несколько способов сделать это, SqlFieldsQuery - один из них.

0 голосов
/ 16 апреля 2019

На этот вопрос уже отвечали пару раз, в основном вам нужно обратиться к Объектам запросов, индексированным типам или key_type / value_type параметров CREATE TABLE , чтобы заставить его работать. То есть каждая запись в кеше правильного типа будет строкой таблицы и наоборот.

...