- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在MySQL数据库中有一张大表,我正试图尽可能高效地读取该表。我当时在考虑通过添加多个工作程序来加速代码,但是当我这样做时,在运行它的开始(并且仅在开始时)出现编码(marshal)处理错误,它看起来像这样:
{"caller":"mysql.go:repository.(*MySQLRepo).GetNextBatch#428","error":"DBGetRecordException:could not marshal episode comments: sql: Scan error on column index 4,name "created_at": unsupported Scan, storing driver.Value type[]uint8 into type*time.Time","level":"error","ts":"2020-07-13T20:42:03.9621 658Z"}
import (
_ "github.com/go-sql-driver/mysql"
"github.com/jmoiron/sqlx"
)
type BatchResult struct {
rows *sqlx.Rows
}
func (m *MySQLRepo) GetNextBatch(b *BatchResult) ([]model.EpisodeComment, error) {
var episodeComments []model.EpisodeComment
for i := 0; i < 1000 && b.rows.Next(); i++ {
var episodeComment model.EpisodeComment
err := b.rows.StructScan(&episodeComment)
if err != nil {
return nil, err
}
episodeComments = append(episodeComments, episodeComment)
}
return episodeComments, nil
}
func (m *MySQLRepo) FetchAllEpisodeComments() (*BatchResult, error) {
rows, err := m.db.Queryx("SELECT * FROM episode_comment")
if err != nil {
return nil, err
}
return &BatchResult{
rows: rows,
}, nil
}
func (svc *ImportService) ImportLegacyComments(ctx context.Context) error {
batchResult, err := svc.legacyCommentsRepo.FetchAllEpisodeComments()
var wg sync.WaitGroup
processor := func() {
comments, err := svc.legacyCommentsRepo.GetNextBatch(batchResult)
if err != nil {
svc.logger.Error(err)
}
for len(comments) > 0 {
comments, err = svc.legacyCommentsRepo.GetNextBatch(batchResult)
if err != nil {
svc.logger.Error(err)
}
svc.logger.Info("batch", "completed 1000")
}
wg.Done()
}
for i := 0; i < 20; i++ {
go processor()
wg.Add(1)
}
wg.Wait()
return err
}
最佳答案
sqlx.Next
和sqlx.StructScan
不能安全同时使用。
如果您为代码组合了一个简单的单元测试,并使用竞速检测器go test -race
运行它,它将在"database/sql".Rows
结构的未导出字段上报告竞态条件:
Write at 0x00c00000e080 by goroutine 22:
github.com/lib/pq.(*rows).Next()
/Users/blackgreen/go/pkg/mod/github.com/lib/pq@v1.2.0/conn.go:1464 +0x8ec
...
Previous read at 0x00c00000e080 by goroutine 20:
database/sql.(*Rows).Scan()
/usr/local/go/src/database/sql/sql.go:3041 +0x2fa
...
如果我们找出哪个字段使种族探测器感到提示,我们可以看到正确记录了并发使用的迹象:
// lastcols is only used in Scan, Next, and NextResultSet which are expected
// not to be called concurrently.
lastcols []driver.Value
关于multithreading - sqlx.Next和sqlx.StructScan是否可以安全同时使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62884143/
我正在使用 jmoiron sqlx我的 golang 项目的库。我试图创建一个数据库连接mysql。所以,我找到了这两个函数:sqlx.Connect() 和 sqlx.Open(),但没有发现区别
我正在尝试实现一个 sql 查询,它以 jQuery Datatables 期望的方式返回数据,同时允许用户自定义查询(我正在做很多输入验证以确保没有任何 sql 注入(inject))。查询是应该按
前言 上次咱们学习了如何使用Go操作Mysql,并且实现了简单的增删改查。 但是相对来说,还有有点复杂的,可能那些大佬也都觉得繁琐叭。 就又开发出了增强版查询Mysql操作库Sqlx。
我有不同类型的 REST API,它们有一些共同点: 所有类型都有Id 所有类型都有类型 所有类型都有属性,但属性不同 因为我不想有大量不必要的类型,所以我提出了一种类型格式,但它似乎不能被 sqlx
如果我尝试如下使用SQLx Rust的postgres功能, [dependencies] sqlx = { version = "0.3.3", default-features=false , f
我正在尝试使用准备好的语句从 postgress 表中获取一些数据 如果我尝试使用 database.Get() 返回所有内容。 表格: create table accounts ( id
假设我有两个模型, type Customer struct { Id int `json:"id" db:"id"` Name strin
main.rs: #[async_std::main] async fn main() -> Result { use sqlx::Connect; let mut conn = sq
在 sqlx有一个 Transaction type 允许您在一个事务中运行多个查询。 我试图弄清楚如何做到这一点,遗憾的是没有记录,尽管有自动生成的 API 文档。 我的第一次尝试: async f
我在MySQL数据库中有一张大表,我正试图尽可能高效地读取该表。我当时在考虑通过添加多个工作程序来加速代码,但是当我这样做时,在运行它的开始(并且仅在开始时)出现编码(marshal)处理错误,它看起
我在 Go 中使用 sqlx,这非常有帮助,但是当我使用 struct scan 并且 struct 的类型与 sql 类型不匹配时,它似乎没有抛出错误。例如,我在这里设置了一个数据库,使其具有名称(
我正在使用 sqlx 在我的 Go 代码中执行查询。该查询有一长串值(~10,000),我需要在 WHERE IN (?) 子句中对其进行过滤。这会导致性能大幅下降。我该如何优化这样的查询?此外,此查
此问题特定于 github.com/jmoiron/sqlx .我想用命名查询插入一个已知的时间戳或日期。我怎么做?我使用 time.Now() 作为给定时间戳的示例。 这是我在 MySQL 中的表:
我正在尝试使用一个简单的查询将两个表 person 和 profile 内部连接起来,这似乎适用于 mysql 但不适用于 sqlx。这是我的代码: package main import (
我正在使用 go 1.10.3,我正在尝试使用 sqlx 包获取一行并将其输入到带有 Get() 的结构中,或者获取多行并输入它们使用 Select() slice 。 让我们从将一行放入结构开始。
我想在单个查询中更新多行: //threadIDs is a variable length slice of integers like [3 5 6] query := "UPDATE messa
考虑以下示例: package main import ( "fmt" "github.com/jmoiron/sqlx" _ "github.com/go-sql-drive
但是下面粘贴的代码永远不起作用,而不是一个一个地迭代和扫描结果,是否有可能让下面的代码起作用?? 非常感谢您的投入。谢谢 type CustomData struct { ID
我正在尝试执行包含自定义 geoPoint 类型的 postgres 查询,但收到意外的 EOF 错误。对我做错了什么有什么想法吗? type Account struct { Id
我正在学习 Go 并尝试创建一个具有“字段”参数的 API 端点。当我尝试将 sqlx 结果行扫描到结构中时,但是用户省略的字段将作为空字符串返回。有没有办法可以更改结构以仅反射(reflect)用户
我是一名优秀的程序员,十分优秀!