質問編集履歴
5
追記
test
CHANGED
File without changes
|
test
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
##
|
1
|
+
## 現状・ここまでで分かったこと
|
2
2
|
heroku + Node.jsでWebアプリを作っています。
|
3
3
|
データベースには、herokuのMySQLアドオン[JawsDBの無料プランkitefin shared](https://www.jawsdb.com/#:~:text=%240/mo-,Kitefin,-Shared)を利用中です。
|
4
4
|
kitefin sharedプランには”Connections”が10までという制限があり、この”Connections”が何に当たるかわからず[こちらの質問](https://teratail.com/questions/mpxvybq6hwdxo7)をしたところ、
|
@@ -17,13 +17,13 @@
|
|
17
17
|
- https://www.wakuwakubank.com/posts/665-node-mysql/#index_id11
|
18
18
|
>理由の説明は省きますが、WebアプリがDBと接続するときには、DBのコネクションをコネクションプールに貯めこんで、使いまわすのが定石なのです。
|
19
19
|
|
20
|
-
##
|
20
|
+
## 質問
|
21
21
|
やっていることで考えると、コネクションプールにコネクションを10個作っておいて空いているやつを使っていくのと、必要なときに毎回DB接続→切断を繰り返すのでは、前者の方がが処理負荷が抑えられるのは想像できますが、瞬間的な”Connections”の数については、どのような違いが出るのかまだわかりません。
|
22
|
-
|
22
|
+
呼び出し方が違うとはいえ、結局どちらも、その瞬間に使われている"Connections"数は同じなのでは?という気がします。
|
23
23
|
|
24
|
-
|
24
|
+
「"Connections”数的には両者そんなに変わらないが、コネクションプールを使う手法であれば、`connectionLimit`を設定できるから、JawsDBの”Connections”上限をより確実に回避できるので、コネクションプールを使うべき」、という考え方で合っていますでしょうか?
|
25
25
|
|
26
|
-
##
|
26
|
+
## 調べてわかったことを追記していきます
|
27
27
|
[こちらの質問](https://teratail.com/questions/311564)をみると、app.get内にデータベースへの接続&切断を書くことで、
|
28
28
|
サーバ起動時`createConnection`→1接続だけ作られる
|
29
29
|
サーバ終了時→停止
|
@@ -40,3 +40,8 @@
|
|
40
40
|
>また、この値を0にすれば、自動切断自体を無効化することができます。
|
41
41
|
10秒に何回もアクセスがあるようなアプリであれば、その10秒間では1つの接続を使いまわせるということ?
|
42
42
|
|
43
|
+
ーーー
|
44
|
+
[こちらの記事](https://stackoverflow.com/questions/20692989/node-mysql-where-does-connection-end-go)にて(Deepl)
|
45
|
+
> connection.end()は、MySQLへのクエリ送信を停止するとき、つまりアプリケーションが停止するときにのみ呼び出されます。すべてのクエリに同じコネクションを使用する(またはコネクションプールを使用してより効率的にする)。
|
46
|
+
app.get内にデータベースへの接続&切断を書いてサーバ起動時のみ1回接続を作り、それを使い回す(コネクションプールを使えばより効率的?)
|
47
|
+
しかし、[毎回クエリ実行の度にconnection.endしている人](https://code-database.com/knowledges/113)もいる…
|
4
追記
test
CHANGED
File without changes
|
test
CHANGED
@@ -29,3 +29,14 @@
|
|
29
29
|
サーバ終了時→停止
|
30
30
|
とできるようです。
|
31
31
|
app.get内で作られた1接続を使い回すのに、コネクションプールが必要、ということ?
|
32
|
+
|
33
|
+
ーーー
|
34
|
+
[こちらの記事](https://qiita.com/sa9ra4ma/items/6d61ae046daeadde68e2)にて
|
35
|
+
コネクションプールを作ったとしても、デフォルトではコネクションは10秒しか維持されずにdisconnectionされるらしい。
|
36
|
+
> (コネクションプールをしても)デフォルトで10秒後に切断されるそうです。
|
37
|
+
> ということは10秒に1回アクセスのあるアプリでそのままプールを使っても、何の意味がないことになります。
|
38
|
+
>`idleTimeoutMillis: 600000 // 自動切断時間(ミリ秒)`
|
39
|
+
>これで1分はコネクションが保持されることになります。
|
40
|
+
>また、この値を0にすれば、自動切断自体を無効化することができます。
|
41
|
+
10秒に何回もアクセスがあるようなアプリであれば、その10秒間では1つの接続を使いまわせるということ?
|
42
|
+
|
3
追記
test
CHANGED
File without changes
|
test
CHANGED
@@ -24,7 +24,8 @@
|
|
24
24
|
**"Connections”数的には両者そんなに変わらないが、コネクションプールを使う手法であれば、`connectionLimit`を設定できるから、JawsDBの”Connections”上限をより確実に回避できるので、コネクションプールを使うべき**、という考え方で合っていますでしょうか?
|
25
25
|
|
26
26
|
### 調べてわかったことを追記していきます
|
27
|
-
[こちらの質問](https://teratail.com/questions/311564)をみると、データベースへの接続
|
27
|
+
[こちらの質問](https://teratail.com/questions/311564)をみると、app.get内にデータベースへの接続&切断を書くことで、
|
28
|
-
`
|
28
|
+
サーバ起動時`createConnection`→1接続だけ作られる
|
29
|
+
サーバ終了時→停止
|
29
|
-
|
30
|
+
とできるようです。
|
30
|
-
|
31
|
+
app.get内で作られた1接続を使い回すのに、コネクションプールが必要、ということ?
|
2
追記
test
CHANGED
File without changes
|
test
CHANGED
@@ -24,7 +24,7 @@
|
|
24
24
|
**"Connections”数的には両者そんなに変わらないが、コネクションプールを使う手法であれば、`connectionLimit`を設定できるから、JawsDBの”Connections”上限をより確実に回避できるので、コネクションプールを使うべき**、という考え方で合っていますでしょうか?
|
25
25
|
|
26
26
|
### 調べてわかったことを追記していきます
|
27
|
-
[こちらの質問](https://teratail.com/questions/311564)をみると、接続はサーバー起動時に1接続だけ作られる、ということのようです。
|
27
|
+
[こちらの質問](https://teratail.com/questions/311564)をみると、データベースへの接続はサーバー起動時に1接続だけ作られる、ということのようです。
|
28
28
|
`mysql.createConnection`実行の度に接続を作っている=1”Connections”カウントかと思っていましたが、そうではないのかもしれません。
|
29
29
|
そうすると、”Connections”上限の10に達する場面って、具体的にどのようなものがあり得るんでしょう?
|
30
30
|
1つのデータベースで10個のアプリ?(サーバ?)を運用するときとかでしょうか?
|
1
追記
test
CHANGED
File without changes
|
test
CHANGED
@@ -22,3 +22,9 @@
|
|
22
22
|
**呼び出し方が違うとはいえ、結局どちらも、その瞬間に使われている"Connections"数は同じなのでは**?という気がします。
|
23
23
|
|
24
24
|
**"Connections”数的には両者そんなに変わらないが、コネクションプールを使う手法であれば、`connectionLimit`を設定できるから、JawsDBの”Connections”上限をより確実に回避できるので、コネクションプールを使うべき**、という考え方で合っていますでしょうか?
|
25
|
+
|
26
|
+
### 調べてわかったことを追記していきます
|
27
|
+
[こちらの質問](https://teratail.com/questions/311564)をみると、接続はサーバー起動時に1接続だけ作られる、ということのようです。
|
28
|
+
`mysql.createConnection`実行の度に接続を作っている=1”Connections”カウントかと思っていましたが、そうではないのかもしれません。
|
29
|
+
そうすると、”Connections”上限の10に達する場面って、具体的にどのようなものがあり得るんでしょう?
|
30
|
+
1つのデータベースで10個のアプリ?(サーバ?)を運用するときとかでしょうか?
|