1

アプリケーションの性質上、データベースへの大量のデータの高速挿入をサポートする必要があります。executemany() を使用するとパフォーマンスが向上しますが、注意点があります。たとえば、MySQL には max_allowed_pa​​cket という構成パラメーターがあり、挿入クエリの合計サイズがその値を超えると、MySQL はエラーをスローします。

質問 #1 : SQLAlchemy にパケットをいくつかの小さなパケットに分割するように指示する方法はありますか?
質問 #2 : 他の RDBS にも同様の制約がある場合、それらを回避するにはどうすればよいですか?



PS以前にこの質問を投稿しましたが、結局この問題に遭遇しない可能性が高いと誤って想定したため、削除しました。残念ながら、そうではありません。

4

1 に答える 1

2

私は最近同様の問題を抱えていて、あまりエレガントではない回避策を使用しました:

  • 最初に my.cnf の値を解析しましたmax_allow_packets。見つからない場合は、最大値がデフォルト値に設定されます。
  • すべてのデータ項目はリストに格納されます。
  • 次に、各データ項目について、おおよそのバイト長を数えます (文字列の場合はバイト単位の文字列の長さです。他のデータ型の場合は、安全のために使用される最大バイト数を取ります)。
  • 私はそれらを合計し、約に達した後にコミットします。の 75% max_allow_packets(念のため、SQL クエリもスペースを占有するため)。

このアプローチは本当に美しいものではありませんが、私にとっては完璧に機能しました.

于 2010-07-17T10:45:54.170 に答える