node.js + express (+ TypeScript) の DB接続についての疑問!!
DB接続のサンプルプログラムで、 DB の open をプログラムの最初で、1回行うのを見かけるが、複数同時接続の場合これで良いのか?
app.ts 例
ちょっと、疑問に思ったので、ChatGTP に、聞いてみた。
先ず、最初に
>>> node.js + express でのプログラムは、マルチスレッドで動くのでしょうか?
結論から言うと、
Node.js + Express は基本的に「シングルスレッド」で動作します。
ただし、マルチスレッド的に動かす仕組みも持っています。
....
ふむふむ。
続けて、次の質問じゃ
>>> 1. Node.js の基本モデル でのサンプルプログラム app.js の中で、DBを使う際に、DB の open を最初に1度だけ、行う処理を見かけるが、複数接続の場合でも、この方法で大丈夫でしょうか?
はい、その疑問は とても重要なポイント です。
結論から言うと、
「DBの open をアプリ起動時に1回だけ行う」設計は、ほとんどの場合で正しく、推奨されます。
複数同時接続があっても問題ありません。
ただし、**「DBの種類」と「接続方式」**によって前提が変わります。
....
どうやら、
MySQL / PostgreSQL 等は、これで良いみたいじゃ。
ただし、SQLite は、これでは、NG で、接続ごとに、open、close をするみたいじゃ。
ありがとう ChatGTP
こほん、以上じゃ。
ついで、最初の質問への回答で、少し聞きたいことが出たので、
最初の質問への回答に関して、追加の質問をしてみた。
>>> 質問を、前に戻して、② Cluster(マルチプロセス)の場合について質問します。各 app は、同一の port への着信を待っていいるのでしょうか?
はい、待っています。
そしてそこが Cluster の重要な仕組み です。
結論(まず答え)
Cluster モードでは、すべての worker(各 app)が
「同一の port」で listen() します。
それでも問題ないように、Node.js が内部で振り分けしています。
....
ふむふむ。
話を、最初の疑問点に戻して、
node.js + express (+ TypeScript) の DB接続 の場合の、
アプリ app.js での DB open 、close は、使う DB エンジンによって、使い分けが必要。
MySQL、PostgreSQL では、app.js の最初で1回 open を行う。
app.js の終了のときに、必要なら、1 回 close を行う。
SQLite3 の場合は、ネットワークから、アクセスがあった場合毎に、open、close を行う。
以上じゃ!
でもまあ、SQLite3 でも、ローカルで、勉強用であれば、MySQL、PostgreSQL の様に作っておいても大丈夫じゃろう。