Javaトランザクションを使用したOracle DBMSでのオーバークロックインサートパフォーマンス
に関する記事を読みまし
た 。 私は現在postgresqlで作業しているので、このDBMSがgolangと連動してどれだけ生成するかをチェックすることにしました。
使用済みスタック:golang-1.1.2 + postgresql-9.3.1。
プログラムを実行するには、postgresql用のGolangドライバーが必要です。 go get -u github.com/lib/pqコマンドでインストールしたgithub.com/lib/pqドライバーを使用します。
テスト環境。
archlinux-x86_64、kernel-3.11.5、4GB RAM(テスト時に約1.2GBが無料)、通常の古いスピンドルHDDを備えたホームデスクトップ。 Postgresは多かれ少なかれ設定されています(shared_buffersを768MBに、max_connectionsを1000に増やし、さらに調整を加えています)が、ハードコアはありません。
実験の純度のために、私はゴルーチンを作成しませんでした-すべて1スレッドで。
プログラムテキスト package main import ( _ "github.com/lib/pq" "database/sql" "fmt" "time" ) const DB_CONNECT_STRING = "host=localhost port=5432 user=your_role password=your_password dbname=your_database sslmode=disable" func main() { db, err := sql.Open("postgres", DB_CONNECT_STRING) defer db.Close() if err != nil { fmt.Printf("Database opening error -->%v\n", err) panic("Database error") } init_database(&db) make_insertion(&db) } func init_database(pdb **sql.DB) { db := *pdb init_db_strings := []string{ "DROP SCHEMA IF EXISTS sb CASCADE;", "CREATE SCHEMA sb;",
テキストからわかるように、トランザクション、horoutin、一時テーブル、およびその他のトリックに特別な割り当てはありません-直接入力。
まあ、もちろん、prepare-execの束。
結果
結果は、マシン上で1秒あたり16,000〜17,000回の挿入です。
結果は定数TEST_NUMBERに依存しません(1000、2000、4000、40000を設定し、400000で停止します)。 おそらく大きな値ではプラグが発生しますが、現在の目的ではこのパフォーマンスで十分だと思います。
彼は最悪の数字を得ることを望み、トランザクションをいじくり回すことを計画しましたが、それは必要ではありませんでした。
結論
テストはまだやや総合的だと思います-データがキャッシュに収まるだけです。 いくつかのパラメーターを使用してディスクサブシステムのパフォーマンスに依存するという感覚は残りません。 また、デスクトップカーネルは、サーバーカーネルよりも速くメモリを割り当てます。
ドライバーの作成者が何らかのトリックを使用している可能性があります。 それでも、このアプリケーションのバンドルは非常に使いやすいと思います。