go mysql id为0_go 语言中mysql操作200万数据时应该如何写?
在写一个将 discuzx 的 post 数据的 bbcode 转换成 html 的功能。
但是转换过程中,越到后面,越卡了。
本来想学学并发的,无奈不会啊。。。太菜了。
注释掉的是想要弄的。。。
求个解决方案。代码如下。
package main
import (
"database/sql"
"fmt"
"github.com/frustra/bbcode"
_ "github.com/go-sql-driver/mysql"
//"time"
//"runtime"
"strconv"
)
const (
XnFromPost = "bbs_post"
XnTopost = "bbs_post"
DxFromPost = "pre_forum_post"
)
type Hostinfo struct {
DBUser,
DBPassword,
DBname,
DBHost,
DBPort,
DBChar string
}
type post struct {
pid int
message string
}
var OldDB, NewDB *sql.DB
/**
设置数据库,并连接数据库
*/
func SetDB() (olddata, newdata *sql.DB) {
var localhost, remotehost Hostinfo
localhost = Hostinfo{
"root",
"123456",
"xiuno",
"",
"3306",
"utf8",
}
remotehost = Hostinfo{
"root",
"123456",
"gxvtc",
"",
"3306",
"utf8",
}
olddata, _ = connMysql(&localhost)
newdata, _ = connMysql(&remotehost)
return olddata, newdata
}
/**
连接数据库
*/
func connMysql(host *Hostinfo) (*sql.DB, error) {
//db, err := sql.Open("mysql", "root:123456@/"+dbs+"?charset=utf8")
if host.DBHost != "" {
host.DBHost = "tcp(" + host.DBHost + ":" + host.DBPort + ")"
fmt.Println(host.DBHost)
}
db, err := sql.Open("mysql", host.DBUser+":"+host.DBPassword+"@"+host.DBHost+"/"+host.DBname+"?charset="+host.DBChar)
return db, err
}
func main() {
OldDB, NewDB = SetDB()
defer OldDB.Close()
defer NewDB.Close()
updatePost()
}
func updatePost() {
const total = 100
//selectPost := "SELECT pid,message FROM " + XnFromPost + " ORDER BY pid ASC LIMIT 10"
selectPost := "SELECT pid,message FROM " + DxFromPost + " ORDER BY pid ASC "
/*
Data, err := OldDB.Query(selectPost)
if err != nil {
fmt.Println(err.Error())
}*/
fmt.Println(selectPost)
updatePost := "UPDATE " + XnTopost + " SET message = ? WHERE pid = ? limit 1"
fmt.Println(updatePost)
stmt, err := OldDB.Prepare(updatePost)
//insertPost := "INSERT INTO " + XnTopost + " (message,pid) VALUES (?,?)"
//fmt.Println(insertPost)
//stmt, err := OldDB.Prepare(insertPost)
if err != nil {
fmt.Println(err.Error())
}
//mypost := make(map[int]post)
i := 0
for {
tmpNum := i * total
i++
tmpSQL := selectPost + " LIMIT " + strconv.Itoa(tmpNum) + "," + strconv.Itoa(total)
fmt.Println(tmpSQL)
Data, err := NewDB.Query(tmpSQL)
//Data, err := NewDB.Query(tmpSQL)
if err != nil {
fmt.Println(err.Error())
}
tag := false
//使用并发的方式
for Data.Next() {
tag = true
var pid int
var msg string
Data.Scan(&pid, &msg)
fmt.Println(pid)
//bbcode转码html
compiler := bbcode.NewCompiler(true, true)
msg = compiler.Compile(msg)
//mypost[pid] = post{pid, msg}
_, err = stmt.Exec(msg, pid)
if err != nil {
fmt.Println("pid: ", pid, err.Error())
}
}
if tag == false {
fmt.Println("没有数据了...")
break
}
}
/*
//直接查找并更新
for Data.Next() {
var pid int
var msg string
Data.Scan(&pid, &msg)
//bbcode转码html
compiler := bbcode.NewCompiler(true, true)
msg = compiler.Compile(msg)
mypost[pid] = post{pid, msg}
//fmt.Println(mypost)
fmt.Println(pid)
_, err = stmt.Exec(msg, pid)
if err != nil {
fmt.Println("pid: ", pid, err.Error())
}
}
*/
/*
//使用并发的方式
for Data.Next() {
var pid int
var msg string
Data.Scan(&pid, &msg)
//bbcode转码html
compiler := bbcode.NewCompiler(true, true)
msg = compiler.Compile(msg)
mypost[pid] = post{pid, msg}
}
runtime.GOMAXPROCS(runtime.NumCPU())
c := make(chan post)
for _, v := range mypost {
go ShowMsg(c, v)
/*
go func() {
fmt.Println(v.pid)
c
}()
//time.Sleep(2 * time.Second)
//fmt.Println(v.pid)
}
for _, _ = range mypost {
fmt.Println(&c)
} */
}
func ShowMsg(c chan post, mypost post) {
//fmt.Println(mypost.pid)
c
}
go mysql id为0_go 语言中mysql操作200万数据时应该如何写?相关推荐
- 用 Go 操作 MySQL 的 200 万数据时应该怎么搞?
前两天看到字节一个老哥写的帖子,提到高阶开发者必须掌握的技能,其中他明确提出了"精通MySQL". 为啥MySQL对开发人员如此重要? 第一,不管你去面试哪家公司,数据库是必问项, ...
- c语言数组中逗号的作用,在C语言中,每个语句和数据定义是用( )结束。? 逗号|括号|分号|句号...
在C语言中,每个语句和数据定义是用( )结束.? 逗号|括号|分号|句号 更多相关问题 [多选题]有关商事登记的内容,下列表述哪些是不正确的: A. 商事登记不是取得商人资格的必备条件 B. 商事登记 ...
- hibernate mysql id 自增长 注解_hibernate Mysql 自增长 注解配置,表无关联的注解方式关联查询...
不同数据库 自增长ID配置 正对不同的数据库可以同时使用 @Id @GeneratedValue(strategy = GenerationType.AUTO) 2 针对mysql @Id @Gene ...
- mysql的条件求和函数_使用SQL语句统计数据时sum和count函数中使用if判断条件的讲解...
首先举个栗子(不想看的话直接下面看总结): order_type:订单类型 open_id:用户唯一标识 SELECT date(create_time) AS '当天日期', sum(real_pr ...
- c语言 1或0 结果,C语言中,在表示逻辑运算结果时,以数值1代表“真”,以0代表“假”。()...
语言中运算数He sent a telegram saying when he would arrive. 男性,表示28岁,硬脊膜外麻醉,手术过程中突然出现意识不清.血压下降.呼吸急促,并迅速出现昏 ...
- 为什么在C语言中,用scanf输入字符串时,不需加
因为字符串变量名在 scanf 语句里 表示指针 (地址) 例如: char s[80]; scanf("%s",s); --这里的 s 已是地址. 当然,写成 scanf(&qu ...
- c语言中tc和vc有什么区别,转:写C++用什么编译器好——TC,VC++6.0,DEV C++,VS2005浅显比较...
TC: 现在估计给你钱,你也不会要用TC了吧.一个复制粘帖都不觉得顺手的编译器,确实是不方便的. VC 6.0: 虽然这个软件比较小,一般就是几百兆,用起来也差强人意,不过难免还是存在一些小问题: 小 ...
- mysql中更新的命令是_MySQL 语言中,更新表数据的命令是( )。_学小易找答案
[简答题]MySQL 语言中包含数都定义语言.数据操纵语言和数据控制语言,分别有哪些功能? [单选题]查询员工工资信息时,结果按工资降序排列,正确的是( ). [简答题]arrayList测验 [填空 ...
- php mysql怎么实现,使用php与mysql怎么实现一个无限级分类
使用php与mysql怎么实现一个无限级分类 发布时间:2020-12-25 15:25:14 来源:亿速云 阅读:84 作者:Leah 本篇文章为大家展示了使用php与mysql怎么实现一个无限级分 ...
最新文章
- /etc/passwd 文件详解
- JDBC连接数据库经验集萃
- Lambda表达式的使用
- XCode 快捷键, MAC 快捷键
- php怎么写官网,PHP - Manual: 简介 (官方文档)
- 信息学奥赛一本通C++语言——1054:三角形判断
- Go语言基础环境配置(windows)
- 测试面试题集-2.测试用例设计
- TDirectory.GetParent获取指定目录的父目录
- jquery 1~6
- BGP(边界网关协议)
- python requests 安装
- 银行业会计人员技能训练系统(含文字录入、小键盘、点钞)
- 尚学堂Struts视频总结之一
- django ajax jquery csrf_exempt 设置favicon.ico
- 《方与圆》序人生控制论
- element导航菜单添加搜索功能
- 人工智能对学计算机的影响,计算机专业大学生对人工智能对人类的影响分析.docx...
- 外网远程访问群晖NAS,内网穿透
- jquery选择器连续选择_jQuery选择器简介
热门文章
- django跳转到其他页面的方式
- mysql查询操作的5种子句
- win10下zookeeper的下载以及安装
- python opencv findcontours_OpenCV之视频分析 – 背景消除与前景ROI提取
- python做马尔科夫模型预测法_Python实现HMM(隐马尔可夫模型)
- 二年级计算机认识键盘教案,认识计算机键盘教案.doc
- JAVA中修改顺序表中的元素_在Java中修改列表的每个项目
- 避免Unity变量初始化错误的8条建议
- OpenShift 4 - 了解Secret
- .net core精彩实例分享 -- 异步和并行