外部データベースからのデータのインポート — ステップバイステップガイド

シミュレーションモデルは外部データに基づいて動作させたい場合があり、その際は、AnyLogicの内部(組み込み)データベースにデータをインポートすることをお勧めします。組み込みデータベースを使用することは、AnyLogicでモデルデータを操作するための最も便利で効率的な方法です。

まず、多くのモデルエレメントには、データベーステーブルからデータを取得するための視覚的なコントロールがあります。エージェント到着の生成に関する記事で、このような制御の例を参照してください。

次に、モデルの実行中に外部データソースに接続すると、モデルのパフォーマンスに影響を与える可能性があります。組み込みのデータベースオプションは、それを回避することができます。

この投稿では、JDBCドライバーを使用して外部データベースからデータをインポートし、シミュレーションモデルをPostgreSQLに接続し、AnyLogicでスケジュールを作成する方法を学習します。

外部データベースへの接続

数回クリックするだけで、 MS Excel/MS Access/MS SQL Serverからデータをインポートできます。しかし、データがMySQL、Oracle Database、PostgreSQLなどのデータベースに保存されている場合はどうなるでしょうか?

まず、外部データベースへの接続を確立する必要があります。実際の例を使用して、それを行う方法を学ぶことができます。

PostgreSQLの週間スケジュール
PostgreSQLの週間スケジュール

PostgreSQLが毎週のスタッフスケジュールを保存し、このデータに基づいて、リソースユニットの可用性を定義する必要があるとします。

接続を確立するには、データベース接続ツールを使用することをお勧めします。ただし、PostgreSQL用に特別に作成された適切なJDBCドライバーがないと、外部データベースに接続できません。

PostgreSQL用JDBCドライバーのダウンロードは、公式Webサイトからできます。次に、すべてのドライバーファイルをモデルのフォルダーにコピーし、ドライバーのJARファイル(Java ARchive)をモデルのプロパティのDependenciesタブにインポートします。

JDBCドライバーをモデルに接続する(モデルのプロパティのDependencies タブ)
JDBCドライバーをモデルに接続する(モデルのプロパティのDependencies タブ)

データベース接続ツールの設定と機能の使用

JDBCドライバーを使用して、データベース接続ツールを構成できるようになりました:

1. 「postgreInput」など、意味のある名前を付けます。

2. JDBC driverのプロパティにorg.postgresql.Driver と入力します。

3. PostgreSQLの場合、 Connection URL プロパティは次のいずれかの形式を取ります:


   jdbc:postgresql://host/database
   jdbc:postgresql://host:port/database 
    

パラメータの意味は次のとおりです:

host — サーバーのホスト名。
port — サーバーがリッスンしているポート番号。PostgreSQLのデフォルトのポート番号は通常5432です。
database — データベース名。

4. データベースのログインとパスワードを指定します(存在する場合)。

データベース接続ツールのプロパティ
データベース接続ツールのプロパティ

データベース接続ツールを設定した後、それを使用して、PostgreSQLからAnyLogic組み込みデータベースにプログラムでスタッフスケジュールデータをインポートできます:


    ModelDatabase modelDB = getEngine().getModelDatabase();
    Connection sourceConnection = postgreInput.getConnection();
    Connection targetConnection = modelDB.getConnection();
    try {
       modelDB.importFromExternalDB(sourceConnection, “schedule_data”, 
“db_schedule”, true, false); targetConnection.commit(); } catch (Exception e) { targetConnection.rollback(); } finally { targetConnection.setAutoCommit(true); }

この場合、ModelDatabase APIimportFromExternalDB()関数を使用します。


    public void importFromExternalDB(java.sql.Connection sourceConnection,
                                     java.lang.String sourceTableName,
                                     java.lang.String targetTableName,
                                     boolean clearTargetTable,
                                     boolean autoCommit)
         

この関数は、外部データベースから単一のテーブルをインポートします。コラムタイプは一致するか、変換可能である必要があります

パラメータ:

  • sourceConnection –外部データベースの接続オブジェクト
  • sourceTableName –データをコピーする外部データベースのテーブル(この場合は「schedule_data」)
  • targetTableName –データのコピー先となる組み込みデータベース内のテーブル(この場合はdb_schedule」)
  • clearTargetTabletrueの場合、データがコピーされる前にターゲットテーブルがクリアされます
  • autoCommitfalseの場合、このアクションはトランザクションを開いたりコミットしたりしません(場合によってはパフォーマンスが低下する可能性があります)。

毎週のスケジュールを作成するには?

上記のコードを実行すると、組み込みデータベースのテーブル( "db_schedule")に、PostgreSQLのテーブル「schedule_data」の値が入力されます。これで、すべてが組み込みデータベースからデータを取得し、シミュレーションモデルで週次スケジュールを作成する準備が整いました。そのために、AnyLogicにはScheduleエレメントがあります。

外部データソースを使用する場合は、期間タイプとしてDays/Weeksを選択し、「Loaded from database」をオンにします。
外部データソースを使用する場合は、期間タイプとしてDays/Weeksを選択し、「Loaded from database」をオンにします。
Scheduleエレメントは、組み込みデータベースからデータを取得し、週次スケジュールを作成するように設定されています。
Scheduleエレメントは、組み込みデータベースからデータを取得し、週次スケジュールを作成するように設定されています。

毎週のスケジュールの作成については、AnyLogic Helpをご覧ください。


この投稿では、ユーザーからよく寄せられる3つの質問について説明しました:MS Excel/MS Access/MS SQL Server以外の外部DBからデータをインポートする方法。JDBCドライバーを使用してAnyLogicをMySQLやPostgreSQLなどのDBに接続するにはどうすればよいのでしょうか?内部DBを使用して週次スケジュールを作成するにはどうすればよいのでしょうか?

この投稿がお役に立てば幸いです。よくある技術的な質問に対応するブログ投稿をさらにご覧になりたい場合は、以下にコメントをいただければ幸いです。

月刊ニュースレターを購読すると、最新のブログ投稿が直接受信トレイに届きます。

関連記事