Rumah > Artikel > pangkalan data > Cara menggunakan bahasa Go untuk operasi pemecahan data MySQL
Dengan perkembangan pesat Internet, bilangan pengguna aplikasi Web terus meningkat, dan jumlah data terus berkembang. Untuk menghadapi situasi ini, menggunakan teknologi perkongsian data untuk mencapai pembahagian data mendatar telah menjadi penyelesaian pengembangan pangkalan data yang biasa. Artikel ini akan memperkenalkan cara menggunakan bahasa Go untuk melaksanakan operasi pemecahan data MySQL.
1. Apakah pemecahan data yang besar? Apabila jumlah data adalah besar, pembahagian data mendatar boleh dicapai dengan menguraikan set data, dengan itu mengurangkan tekanan pada nod individu dan meningkatkan kestabilan prestasi aplikasi web.
2. Bahasa Go melaksanakan akses sharded kepada MySQL
Go ialah bahasa pengaturcaraan moden yang menyokong keselarasan tinggi Kerana kecekapan pelaksanaannya yang sangat tinggi dan ciri keselarasan yang sangat baik, ia digunakan dalam program pangkalan data semakin mendapat perhatian dalam perkembangannya. Berikut ialah contoh penggunaan bahasa Go untuk mengakses MySQL untuk operasi perkongsian data.
Mewujudkan sambungan pangkalan dataimport ( "database/sql" _ "github.com/go-sql-driver/mysql" ) // 数据库信息 const ( USERNAME = "root" PASSWORD = "password" NETWORK = "tcp" SERVER = "127.0.0.1" PORT = 3306 DATABASE = "test" ) func main() { // 数据库连接 db, err := sql.Open("mysql", USERNAME+":"+PASSWORD+"@"+NETWORK+"("+SERVER+":"+strconv.Itoa(PORT)+")/"+DATABASE+"?charset=utf8") if err != nil { fmt.Println("Connection Failed:", err.Error()) return } // 初始化数据库 defer db.Close() }Buat jadual yang dipecahkan
// 分片表信息 const TABLE_NAME = "user_info" const SHARD_KEY = "user_id" // 根据分片信息生成的各个分片表名称的列表 var shardTableList []string func main() { // 创建分片表 tableSql := fmt.Sprintf("CREATE TABLE `%s` (`id` int(11) NOT NULL, `user_id` int(11) NOT NULL, `username` varchar(20) DEFAULT '', `password` varchar(50) DEFAULT '', PRIMARY KEY (`id`), KEY `user_id` (`user_id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;", TABLE_NAME) _, err := db.Exec(tableSql) if err != nil { fmt.Println("Database initialization failed:", err.Error()) return } // 生成分片表 for i := 0; i < 4; i++ { shardTableName := fmt.Sprintf("%s_%d", TABLE_NAME, i) shardTableSql := fmt.Sprintf("CREATE TABLE `%s` (`id` int(11) NOT NULL, `user_id` int(11) NOT NULL, `username` varchar(20) DEFAULT '', `password` varchar(50) DEFAULT '', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;", shardTableName) shardTableList = append(shardTableList, shardTableName) _, err := db.Exec(shardTableSql) if err != nil { fmt.Println("Database initialization failed:", err.Error()) return } } }Sisipkan data
// 插入数据操作 func insertData(userId int, userName string, passWord string) error { shardIndex := userId % 4 sqlStr := fmt.Sprintf("insert into %s (`user_id`,`username`,`password`) values (?,?,?)", shardTableList[shardIndex]) _, err = db.Exec(sqlStr, userId, userName, passWord) if err != nil { fmt.Printf("Insert data failed. Error: %v ", err.Error()) return err } fmt.Printf("Insert data success. userId=%d, userName=%s, passWord=%s ", userId, userName, passWord) return nil } func main() { // 插入数据 insertData(1, "user1", "pass1") insertData(2, "user2", "pass2") insertData(3, "user3", "pass3") insertData(4, "user4", "pass4") }Mencari data
// 查询数据操作 func queryData(userId int) (string, error) { shardIndex := userId % 4 sqlStr := fmt.Sprintf("select `username`,`password` from %s where `user_id`=?", shardTableList[shardIndex]) rows, err := db.Query(sqlStr, userId) if err != nil { fmt.Printf("Query data failed. Error: %v ", err.Error()) return "", err } var userName, passWord string rows.Next() err = rows.Scan(&userName, &passWord) if err != nil { fmt.Printf("Query data failed. Error: %v ", err.Error()) return "", err } fmt.Printf("Query data success. userId=%d, userName=%s, passWord=%s ", userId, userName, passWord) return userName, nil } func main() { // 查询数据 queryData(1) }
3. Ringkasan
Artikel ini memperkenalkan cara menggunakan bahasa Go untuk melaksanakan operasi pemecahan data MySQL, terutamanya termasuk mewujudkan sambungan pangkalan data, mencipta Perkara seperti sharding jadual, memasukkan data dan pertanyaan data. Dalam pembangunan sebenar, strategi dan kaedah sharding akan berbeza untuk senario aplikasi dan volum data yang berbeza, dan perlu diselaraskan dengan sewajarnya mengikut situasi sebenar.
Atas ialah kandungan terperinci Cara menggunakan bahasa Go untuk operasi pemecahan data MySQL. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!