Подключение Anylogic 8.6 к базе данных с красным смещением

#jdbc #amazon-redshift #anylogic

#jdbc #amazon-redshift #anylogic

Вопрос:

Я заинтересован в том, чтобы связать модель в Anylogic 8.6 с таблицей / представлением в базе данных Redshift. Это позволит модели автоматически собирать новые данные для определения наших совокупностей и запуска, что позволит лучше принимать оперативные решения (т. Е. Что мы ожидаем завтра, завтра всегда меняется).

Эта версия имеет встроенное подключение к электронной таблице Excel или к базе данных SQL Server. В FAQ есть пошаговое руководство по подключению к MySQL. Я адаптировал это руководство к Redshift, но мне совершенно неясно, как заставить соединение фактически сработать или как проверить, действительно ли оно работает.

Вот что я сделал:

  1. Загружен самый последний драйвер JDBC с: https://docs.aws.amazon.com/redshift/latest/mgmt/configure-jdbc-connection.html
  2. Я извлек все файлы драйверов в папку модели.
  3. Я открыл модель в AnyLogic, выбрал представление «Проекты» и импортировал файл JAR драйвера на вкладке «Зависимости» (ссылка на файл RedshiftJDBC42-no-awssdk-1.2.50.1077.jar )
  4. Перейдите к свойствам «Расширенной Java» Main и введите следующую строку в разделе импорта: import com.amazon.redshift.jdbc42.Driver; . Модель компилируется / строится без ошибок.

Я не уверен, что делать дальше.

  • Когда я захожу в базу данных и пытаюсь импортировать таблицу, я по-прежнему вижу только параметры для Excel / SQL server

  • Из палитры «Подключение» я перетащил «Базу данных» в «Основную» часть модели. Затем я

  • a) Выбрано соединение как «Другой тип базы данных»

  • б) в разделе «Драйвер JDBC» я ввел com.amazon.redshift.jdbc42.Driver

  • c) в URL-адресе подключения я ввел следующее: jdbc:redshift://<Server>:<Port>/<Database>?ssl=trueamp;tcpKeepAlive=trueamp;sslfactory=org.postgresql.ssl.NonValidatingFactory (это стандартная строка подключения из workbench / DBeaver / KNIME и работает с ними, все из которых являются JDBC)

  • d) использовал мое обычное имя пользователя / пароль, которые я использую для своей обычной работы с SQL

  • После этого я по-прежнему вижу только обычные параметры импорта таблицы. Итак, я добавил элемент «запрос» из палитры «Подключение» и выполнил простой «Выбрать * из таблицы», но неясно, как я могу перенести это в свою локальную базу данных…

Каковы мои следующие шаги? Или я зря трачу здесь свое время? Подключение к Redshift будет иметь большое значение для того, чтобы наши модели стали пригодными для более широкого использования…

Заранее большое спасибо.

Ответ №1:

Импорт таблиц внешней базы данных (DB) во встроенную базу данных AnyLogic DB отличается от чтения / записи во внешние базы данных через объект базы данных и элементы палитры подключения. Последнее не влияет / не изменяет первое.

Последнее можно сделать для любой JDBC-совместимой базы данных, как вы видели (и это то, на что ссылаются инструкции по часто задаваемым вопросам).

Первый поддерживается только для Excel / Access и SQL Server. (Если вы подумаете об этом, для этого требуется, чтобы схема внешней базы данных была преобразована в схему для встроенной базы данных AnyLogic, которая на самом деле является стандартной базой данных HSQLDB; таким образом, по определению это не «универсальная» операция даже с использованием JDBC, следовательно, почему только некоторые внешние базы данныхподдерживаются.)

Таким образом, вы можете считывать данные из базы данных Redshift и записывать во внутреннюю базу данных AnyLogic, чтобы выполнить «ручной импорт» (который вы могли бы вызвать как часть инициализации модели); вы также можете избежать элементов запроса палитры подключения и просто выполнять запросы SELECT стандартным способом Java, возможно, используя визуально-добавлен объект базы данных, чтобы упростить подключение.

Но важно помнить, что это только дает вам возможность использовать встроенную визуальную конфигурацию вещей, связанных с внутренней базой данных, таких как совокупности агентов и свойства библиотечных блоков; вы всегда можете просто сделать это с помощью запросов непосредственно к внешней базе данных (что означает немного более «ручной» код например, для настройки групп агентов). Кроме того, у вас есть накладные расходы на хранение, связанные с фактическим наличием двух копий базы данных, и любая разница в производительности неясна (в обмен на единовременную стоимость импорта и любое возможное улучшение «локальных» запросов HSQLDB после этого).

Также может быть возможно использовать базовый API AnyLogic Java, который он использует для импорта БД (например, importFromExternalDatabase функция; поиск в справке), чтобы сделать это немного проще, но вам все равно потребуется предварительно подготовленная внутренняя настройка таблиц БД (или написать код для выполнения чего-то вроде анализа внешней схемы БД исоздайте соответствующие таблицы HSQLDB).

Комментарии:

1. Привет, Стюарт — большое спасибо за это. Очень хороший ответ о различных режимах использования, хотя моя java еще недостаточно хороша, чтобы понять, как на самом деле применить ее на практике. Неважно, это придет. FWIW, план состоит в том, чтобы настроить внешние таблицы в нашей основной СХД, которые затем будут просты для запроса модели. Это значительно упрощает процесс производства. Большое спасибо, спасибо!