Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Data migration from As400 to MySQL using Node

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest. →
Avatar for Nao Nao
January 21, 2025
95

Data migration from As400 to MySQL using Node

基幹システムのData migration

Avatar for Nao

Nao

January 21, 2025

Transcript

  1. システム構成での課題 • 在庫がリアルタイムではない ◦ 手作業で在庫アップロード ◦ 欠品状態での購入が起こり得る ▪ 70%在庫表示でカバー •

    ECサイトのデータは基幹に戻せない ◦ ECサイト経由の受注は、再度基幹で受注入力する必要がある 人の作業が多すぎる
  2. そもそも概念が違う • テーブル(AS400ではライブラリと呼ぶ)の連結でデータを取得する想定なし • カラム(AS400ではフィールドと呼ぶ)が全て固定長 ◦ 品名1は「”TM-96-12 ”」など ◦ 品名1はユニークキー的もの

    • テーブル名やカラム名が全て推測しにくい情報 ◦ 商品マスターは「FXMVJB00」 ◦ 品名1は、「HIN1CD」 データ連携 & マイグレーションの課題 MySQLと構造が異なるため、データマイグレーションの対応が必要
  3. 第一Phase システム構成図(ECサイトリプレイス) 社内NW Client PC CSBridge ECサイト(Rails) MacMini (サーバー) AS400

    MacMiniを使い、Cronで在庫情報をUpdate 在庫情報 その他マスターデータ
  4. • NodeでODBCを使いAS400にアクセス ◦ SQLを使い、データ取得 • Nodeで取得したJSONデータをActiveStorageに保存 • 上記をテーブル毎に繰り返し • 全てのデータ取得完了後、NodeからActiveJobをキック

    • ActiveJobでJSONデータを解析 ◦ フィールドのマッピングや変換 • 対象テーブルにデータ登録 ◦ データ登録は、Activerecord-importを利用(upsert) JSONファイル作成&利用
  5. MacMiniの仕組み(改善版) AS400 Docker node-mysql2 image pull CSVファイル as400_table_xxx • JSONファイルをCSVファイル生成に変更

    • CSVファイルをnode-mysql2を使い、LOAD DATA INFILE構文でimport ◦ そのままのデータを投入するテーブルを用意 • テーブルごとに上記を繰り返し実行 products transform
  6. LOAD DATA INFILE importの差分 & 全件import • Railsに対象テーブルの最新作成日時と最新更新日時を取得 ◦ いつ最後に処理を実行したかを判断可能

    • 次回importはその日時より後に作成されたレコードを取得する SQLとする • 作成日時と更新日時が正常に更新されないテーブル • 物理削除されるテーブル(削除レコードが追えない) 上記は、件数次第では毎回全件 importとする