将Anylogic 8.6连接到Redshift数据库

问题描述

我有兴趣将Anylogic 8.6中的模型链接到Redshift数据库中的表/视图。这样一来,该模型就可以自动提取新数据来定义我们的种群并运行,从而可以更好地进行运营决策(即,我们希望明天发生的事情,明天总是在变化)。

此版本具有与excel电子表格或sql Server数据库的本机连接。在FAQ中,是逐步链接MysqL的指南。我已经对该指南进行了调整,以适应Redshift,但是对于如何使连接真正触发,或者如何测试它是否确实有效,我还不清楚。

这就是我所做的:

  1. https://docs.aws.amazon.com/redshift/latest/mgmt/configure-jdbc-connection.html
  2. 下载了最新的JDBC驱动程序。
  3. 我已将所有驱动程序文件提取到模型的文件夹中。
  4. 我已在AnyLogic中打开模型,选择“项目”视图,并在“依赖关系”选项卡上导入了驱动程序JAR文件(引用文件 RedshiftJDBC42-no-awssdk-1.2.50.1077.jar
  5. 转到Main的'Advanced Java'属性,然后在Import部分中输入以下行:import com.amazon.redshift.jdbc42.Driver;。该模型可以正确编译/构建。

我不确定下一步该怎么做。

  • 当我进入数据库并尝试导入表时,我仍然只看到Excel / sql服务器的选项

  • 从“连接性”选项板中,将“数据库”拖到模型的“主要”部分。我已经

  • a)选择连接为“其他数据库类型”

  • b)在“ JDBC驱动程序”部分中,我输入了com.amazon.redshift.jdbc42.Driver

  • 我在以下内容中输入了连接URL中的
  • c):jdbc:redshift://<Server>:<Port>/<Database>?ssl=true&tcpKeepAlive=true&sslfactory=org.postgresql.ssl.NonValidatingFactory (这是来自workbench / dBeaver / KNIME的标准连接字符串,并与之一起使用,所有这些都是JDBC )

  • d)使用了我用于常规sql工作的常用用户名/密码

  • 执行完此操作后,我仍然只看到导入表的常用选项。因此,我从“连接性”选项板中添加一个查询”项,并执行了一个简单的“从表中选择*”-但目前尚不清楚如何将其导入本地数据库...

下一步是什么?还是我在这里浪费时间? Redshift连接性将使我们的模型适合更广泛的运营用途还有很长的路要走...

非常感谢。

解决方法

将外部数据库(DB)表导入内置的AnyLogic DB是与通过Database对象和Connectivity面板元素读取/写入外部DB分开的事情。后者不会影响/更改前者。

您可以看到,后者可以对任何符合JDBC的DB进行(这就是FAQ指令所指的)。

仅Excel / Access和SQL Server支持前者。 (如果考虑到这一点,这要求将外部数据库的模式转换为内置的AnyLogic DB的模式,该模式实际上是标准的HSQLDB数据库;因此,按定义,即使使用使用JDBC,因此为什么仅支持某些外部DB。

因此,您可以从Redshift数据库中读取数据并写入内部AnyLogic DB中以进行“手动导入”(可以将其称为模型初始化的一部分);您还可以避免使用“连接性”选项板查询元素,而仅以标准Java方式执行SELECT查询,也许使用直观添加的Database对象可以更轻松地建立连接。

但是要记住,只有 可以使您能够使用内部数据库链接的内部可视化配置,例如代理填充和库块属性;您始终可以直接通过直接查询外部数据库来执行此操作(例如,这意味着需要更多“手动”代码来设置座席人口)。另外,您还具有有效地拥有两个数据库副本的存储开销,并且尚不清楚任何性能差异(是从一次性导入成本中获得的,还是在此之后可能对“本地” HSQLDB查询进行的任何改进)。

也可以使用它用于数据库导入的基础AnyLogic Java API(例如,importFromExternalDatabase函数;搜索帮助)来使此操作稍微简单一些,但是您仍然需要预先准备好内部数据库表的设置(或编写代码来执行诸如解析外部数据库模式和创建适当的HSQLDB表之类的操作)。