MySQL と GORM の間の同時書き込みの問題は、開発者にとって常に頭の痛い問題です。同時実行性が高い状況では、複数のスレッドが同時にデータベースに書き込むと、データの不整合や誤った結果が生じる可能性があります。 PHP エディタ Baicao は、この問題の原因と解決策を分析し、同時書き込みによって引き起こされる問題を回避するのに役立ちます。合理的な設計と最適化により、MySQL と GORM の同時書き込みの問題を効果的に解決して、データの一貫性と正確性を確保できます。
複雑なcsvインポートスクリプトをgolangで実装しました。 ワーカープール実装を使用します。このワーカー プールでは、ワーカーは製品を分類、ラベル付け、ブランド化する 1,000 個の小さな CSV ファイルを実行します。 これらはすべて同じデータベース テーブルに書き込みます。ここまでは順調ですね。
私が直面している問題は、3 つ以上のワーカーを選択すると、次のメッセージが表示されてプロセスがランダムにクラッシュすることです。
ワークフローはリーリー
save() 呼び出しをトランザクションにラップしようとしましたが、役に立ちませんでした。次のような質問があります:
MySQL のプロトコルはステートフルです。つまり、複数のゴルーチンが同じ接続を使用しようとすると、リクエストと応答が非常に混乱する可能性があります。
ゴルーチン間で他のタイプのステートフル プロトコル接続を共有しようとすると、同じ問題が発生します。
たとえば、ftp もステートフル プロトコルなので、こちらの方が理解しやすいかもしれません。クライアントのゴルーチンは「Get file x」のようなメッセージを送信する場合があり、その応答はファイルの内容を含む一連のメッセージである必要があります。リクエスト/レスポンスの進行中に別のゴルーチンが同じ接続を使用しようとすると、両方のクライアントが混乱します。 2 番目のゴルーチンは、要求していないファイルに属するパケットを読み取ります。ファイルをリクエストする最初のゴルーチンは、予期していたパケットの一部が読み取られていることがわかります。
同様に、MySQL のプロトコルは、単一の接続を共有する複数のクライアントのゴルーチンをサポートしていません。
以上がMySQL と GORM の同時書き込みによりエラーが発生するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。