93246


例えば、EC2インスタンスでnode.jsのアプリケーションが動いていて、RDSインスタンスとデータのやり取りをする場合、EC2インスタンスとRDSインスタンスはどのような通信プロトコルになるのでしょうか？

ローカルで開発している時は同じホストマシンの中でアプリケーションとDBが動いていて、ローカルとの違いも気になります（パフォーマンスの違いなど）。


CC BY-SA 4.0
2023-01-08T09:33:41.667
93245
2023-01-10T05:45:57.203
41605
question
database
アプリケーションサーバとDBサーバの通信プロトコルについて


>
> 例えば、EC2インスタンスでnode.jsのアプリケーションが動いていて、RDSインスタンスとデータのやり取りをする場合、EC2インスタンスとRDSインスタンスはどのような通信プロトコルになるのでしょうか？

どのデータベースエンジンを選択するかによります。例えば、Amazon RDS for
PostgreSQLを選択した場合は、PostgreSQLの通信プロトコルが使われます。

選択できるデータベースエンジンのリストです。[よくある質問 - Amazon RDS |
AWS](https://aws.amazon.com/jp/rds/faqs/)

> ローカルで開発している時は同じホストマシンの中でアプリケーションとDBが動いていて、ローカルとの違いも気になります（パフォーマンスの違いなど）。

~~パフォーマンスに絞って回答しますが、様々な要素から違いはあります。２つ挙げておきます。

  * インターネットを経由するアクセスである
  * ローカルのホストマシンとのスペックの差異  
~~

パフォーマンスに絞って回答しますが、RDSはAWSのデータセンターからインターネット越しに提供するサービスなので、インフラが全く異なり、ローカルで立てたデータベースと比較することに無理があると思います。

しかしながら、本番環境のデータベースと同等のパフォーマンスを、開発用途で求められるケースはあまり知りません。開発用のRDSを用意する場合でも、コスト面の理由から、本番環境より低スペックにすることが多いです。ローカルのホストマシンでデータベースを立てるなら、尚更だと思います。


CC BY-SA 4.0
2023-01-08T10:49:36.187
93246
2023-01-08T11:07:39.213
2023-01-08T11:07:39.213
4982
4982
93245
answer


EC2 使っていないので, EC2特有のことはわかりませんが ・・・

Amazon RDSは 6つのデータベースエンジンから選択できるようです。  
接続する場合たいてい  
[Open Database Connectivity
(ODBC)](https://ja.wikipedia.org/wiki/Open_Database_Connectivity),  
[Java Database Connectivity
(JDBC)](https://ja.wikipedia.org/wiki/Java_Database_Connectivity)  
など開発言語に合わせた共通インタフェースを使用することになるはず。  
(例えば Pythonならば [DB-API 2.0](https://docs.python.org/ja/3/library/sqlite3.html)
([PEP 249](https://peps.python.org/pep-0249/)) のように)

(Node.jsであれば ODBC利用できそう？)

共通インタフェースを利用することで

  * 別の RDBMSを利用する場合でも, 比較的同じように開発できる
  * デメリットとしては, 対象の RDBMSの本来の力を発揮できない **かも** しれない

そしてその「ドライバー」が, RDBMSのサーバーとのやりとりを行なうので,
プロトコルを意識する必要はないでしょう。[TCPやUDPにおけるポート番号の一覧](https://ja.wikipedia.org/wiki/TCP%E3%82%84UDP%E3%81%AB%E3%81%8A%E3%81%91%E3%82%8B%E3%83%9D%E3%83%BC%E3%83%88%E7%95%AA%E5%8F%B7%E3%81%AE%E4%B8%80%E8%A6%A7)
によるとポート番号も RDBMS毎にそれぞれ異なり, また TCP,UDP 使うのもあれば TCPのみもある模様。

プロトコルを比較してみた方もいるようで, (あくまで 記事書いた方の印象として, だけど)

> 端的に言えば、PostgreSQLは高速かつ合成的で合理的、対するMySQLの仕様は厳密で冗長的な設計の印象を持ちました。

参考:
[POSTGRESQL・MYSQLの問い合わせ(QUERY)プロトコルの比較](http://www.cybergarage.org/memo/rdbms_query_protocols/)

* * *

> ローカルとの違いも気になります（パフォーマンスの違いなど）

RDBMSが専用サーバーで動くのなら, 各種のリソース (CPU / memory / HDD など)を フロントエンドと奪い合うことなく利用できるので,
理論的にはパフォーマンスはよくなるでしょう。  
通信を行なうことでの IPCとの速度差は, 場合によっては無視できるはず  
(クエリーの違いで, パフォーマンスは異なるかもしれない)


CC BY-SA 4.0
2023-01-10T05:45:57.203
93282
2023-01-10T05:45:57.203
43025
93245
answer