[構成]
dbサーバー1台
上記サーバーにinsertするサーバー10台(仮)
[疑問点]
複数のサーバーが一台のDBサーバーに同時に複数のレコードをinsertをし続ける時(実際は多くてもinsertサーバーAが30インスタンス、insertサーバーBが5インスタンス、insertサーバーcが2インスタンス同時にinsertになる事もあるくらいなのですが)どうすれば早く処理ができるのかを教えて頂きたく質問をさせて頂きました。
insertサーバーは他のinsertサーバーの書き込む内容には一切依存はありません。
・DBサーバーのメモリーかCPU(どちら?)をあげる
・forではなく一度のクエリでまとめてinsertする
・rollback、commit処理不要?
・DBにinsertするサーバーのdb接続をしっぱなしにし一定時間ごとに接続し直す?
・一つのinsertサーバーがDBサーバーに接続をしている時他のinsertサーバーは待っているの感じがするので、待たずに同時に書き込む?ようにmysqlの設定を変える
あたりが思い浮かんだのですがどのようにすれば良いものなのでしょうか?
(mysqlにinsertするサーバー) package main import ( "database/sql" "fmt" _ "github.com/go-sql-driver/mysql" ) //table type humans struct { age int name string } func hoge(){ all_recode := []humans{humans{32,"花子"},humans{52,"イチロー"},humans{12,"敬浩"}} db, _ := sql.Open("mysql", "ユーザ名パスワードipアドレス等") defer db.Close() tx, _ := db.Begin() defer tx.Rollback() stmt, _ := tx.Prepare("INSERT INTO humans (age, name) VALUES (?, ?) defer stmt.Close() for _, one_recode := range all_recode { _, err := stmt.Exec(one_recode.age, one_recode.name) if err != nil { fmt.Println(err) } } err2 := tx.Commit() if err2 != nil { fmt.Println(err2) } } func main(){ for{ hoge() } }
goバージョン1.14
mysqlバージョン8
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/08/07 03:03
2020/08/07 03:47
2020/08/07 05:14
2020/08/07 14:27