ホームページ > バックエンド開発 > Golang > 効率的な行挿入のために Go で単一の Postgres DB 接続を再利用するにはどうすればよいですか?

効率的な行挿入のために Go で単一の Postgres DB 接続を再利用するにはどうすればよいですか?

Susan Sarandon
リリース: 2025-01-02 21:42:44
オリジナル
647 人が閲覧しました

How Can I Reuse a Single Postgres DB Connection in Go for Efficient Row Inserts?

行の挿入のために Go で単一の Postgres DB 接続を再利用する

データベース操作の分野では、一般的なタスクの 1 つは行の挿入です。テーブルに。データベースのパフォーマンスを最適化するには、単一の接続を確立し、それをすべての挿入操作で再利用することが重要です。このアプローチにより、多数の接続を開くオーバーヘッドが回避され、効率的なデータベース操作が確保されます。

問題: 過剰な DB 接続を開く

使用して Postgres テーブルに複数の行を挿入しようとすると、挿入操作のたびに新しい接続を開かないようにすることが重要です。コードが次のような場合:

db, err := sql.Open("postgres", "connectionURL")
if err != nil {
    log.Fatal(err)
}

for i := 0; i < 10; i++ {
    // Insert row
    _, err := db.Exec("INSERT INTO table VALUES (...)")
    if err != nil {
        log.Fatal(err)
    }
}
ログイン後にコピー

複数の接続を開くという問題が発生します。これは、db 変数が単一の接続ではなく接続プールであるためです。 Exec を呼び出すたびに、新しい接続が開かれ、プールに追加されます。

解決策: 単一の接続を再利用する

単一の接続が確実に使用されるようにするには複数の挿入を行う場合は、次の変更を行う必要があります:

  • メインの外側でグローバル *sql.DB 変数を定義する関数を作成し、init 関数で初期化します。これにより、プログラムの実行中に接続が 1 回だけ確立されることが保証されます。
  • 実際の挿入操作が実行される main 関数では、新しい接続は開かれません。代わりに、後続のすべての挿入操作にグローバル db 変数を使用する必要があります。

修正されたコードは次のようになります。

var db *sql.DB

func init() {
    var err error
    db, err = sql.Open("postgres", "connectionURL")
    if err != nil {
        log.Fatal(err)
    }

    if err = db.Ping(); err != nil {
        log.Fatal(err)
    }
}

func main() {
    for i := 0; i < 10; i++ {
        // Insert row
        _, err := db.Exec("INSERT INTO table VALUES (...)")
        if err != nil {
            log.Fatal(err)
        }
    }
}
ログイン後にコピー

これらの変更を実装すると、効果的に再利用できます。すべての挿入操作に単一の Postgres DB 接続を使用することで、過剰な接続を開く問題を排除し、データベース効率を最大化します。

以上が効率的な行挿入のために Go で単一の Postgres DB 接続を再利用するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート