
私の表現が完全に正確でない場合はお詫び申し上げます。私はこのすべてに関して全くの初心者です。
ゴール:データベースからデータを取得する速度を改善しようとしています
設定:
私はサーバー A で DB をホストしています。この DB には、www.mydbweb.com などの Web サイト (もちろん私の実際の Web サイトではありません) からもアクセスできます。サーバー側でのこのアクセスは、次のようなルートを持つ Nginx 経由で行われますlocalhost:1234
。
質問:サーバーにログインして、Web サイト (つまり ) 経由で DB にリクエストを送信すると、www.mydbweb.com
データはネットワーク経由で取得されます (そうですか?)。しかし、 経由でlocalhost:1234
直接リクエストを送信すると、データはネットワーク経由で渡されないことになりますか?
一般的に、ネットワーク経由で取得されるデータをスキップする方法は何ですか? 大規模なデータ クエリでは、ネットワークによって何らかの遅延やボトルネックが発生するように感じます。
答え1
OS とネットワーク構成によって多少異なりますが、通常、サーバーの外部 IP アドレスまたはローカルホスト / ループバック IP アドレスとの通信では、速度に大きな違いはありません。これは、通常、オペレーティング システムとネットワーク スタックが、外部 IP アドレスも「このマシン」であることを認識しており、パケットはネットワーク上に送信されずにメモリ内に残るためです。
ただし、アプリケーションとデータベース間のパスに nginx の抽象化レイヤーが追加されると、これら 2 つが直接通信する場合と比べて遅延が増加します。
アプリケーションをデータベースに接続する最も速い方法 (両方が同じホスト上で実行されている場合) は、Unix ソケット (Linux または同様の Unix OS 上で実行されているデータベースの場合) または同様の直接接続を使用することです。このような接続では、リクエストと応答をネットワーク パケットにカプセル化する必要がありません。