0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Nest.js x TypeORMでinitializeが遅い時

Posted at

Nest.js x TypeORMでinitializeが遅い時

何があったのか?

Nest.jsとTypeORMの構成でバックエンドを作成していた時に、異様にinitializeが遅い時があった。
TypeOrmModule dependencies initialized +0ms

詳しい構成としては、Nest.jsとTypeORMのwebサービスとmysqlのDBをDockerizeした構成。
普段の時は問題なかったが、データを更新するためのスクリプトを作成している時にローカルに大量のデータ(gzファイルで2GBくらい)入れたところ、TypeORMのモジュールの初期化がめっちゃ遅くなった。

現状、ファイルを保存するごとに再ビルドしてくれるようになっていたのだが、如何せんアプリの起動が遅すぎるので開発が全然進められずに困っていました。

何をやったか

最初はTypeORMモジュールで渡すEntityの指定の仕方を変えてみたり(ファイルのパスから定義配列に変える)、マイグレーションがおかしくなっていないかどうか確認してみたのですが、効果なく。。。

色々試したりしているところで、本番環境では問題なく動いているため、おそらくローカル環境の問題だろうということに気づき始め、ormconfig周りを調べ変更してみたところ。。。解決しました!

その設定というのがormconfigのsynchronizeでした。
結論、これがtrueになっていたことが原因だったようで、これをfalseにし、サービスを再起動してみたところ問題なくアプリが起動されました!

なぜこのようなことが起こったのか?

結局、synchronizetrueのだとなぜこのようなことが起こるのかについてですが、そもsynchronizeとは

Setting synchronize makes sure your entities will be synced with the database, every time you run the application.

TypeORM公式

でも書かれているように、Entityファイルとデータベースとを同期してくれる設定です。これをONにすることで、Entityに何か変更があった際に自動でデータベースの方にも反映してくれるのですが、データ量が多いとどうやら初期の同期に時間がかかるっぽくこのような現象が起こったようです。

開発時はEntityを変更したら自動でDBの構成も変更してくれるので便利ですが、ローカルで大量のデータを使う際はオフにしておくのがよさそうですね!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?