Golang Go语言中 MySQL 流式查询和游标查询方案
各位大佬,在 go 生态中是如何实现 mysql 的实现流式查询、游标查询的?查了一下网上很少有相关的资料。
在 go 对 mysql 的驱动实现中有人提了 issue ,说希望支持流式查询,如下:https://github.com/go-sql-driver/mysql/issues/1053
,没有结论说会去实现。
国内论坛也有讨论,也都没有明确的结论:
想问这个是因为之前的程序是 Java 版本的,实际业务中有从 MySQL 中导出大量的数据的场景,以前就是基于 MySQL 的流式查询和 Mybatis 的接口实现的。现在想调研在 Go 是否有对等方案。
Golang Go语言中 MySQL 流式查询和游标查询方案
更多关于Golang Go语言中 MySQL 流式查询和游标查询方案的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
mysql 自己本身都不支持 scroll cursor 吧
更多关于Golang Go语言中 MySQL 流式查询和游标查询方案的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
go 原生的 sql.db 查询的时候返回了一个 row 对象,用这个对象查询就是一行一行的返回的
游标这种歪门邪道还是别用了吧
Gorm 有游标查询啊,他的文档上叫 迭代 (Rows)
在Golang中使用MySQL进行流式查询和游标查询,都是处理大量数据时的有效策略。以下是这两种方案的简要介绍:
流式查询:
流式查询通过持续地从数据库读取数据块,而不是一次性加载所有数据到内存中,从而有效降低了内存消耗。在Golang中,你可以使用database/sql
包结合MySQL驱动(如github.com/go-sql-driver/mysql
)来实现流式查询。关键是通过Rows.Next()
在循环中逐行读取数据,并在每次迭代中处理数据。这种方式非常适合处理大数据集,因为它允许你以流的方式处理数据,避免了内存溢出。
游标查询:
游标查询允许你在数据库服务器上维护一个查询结果的上下文,并可以在客户端按需检索数据行。在MySQL中,你可以通过显式声明游标在存储过程或脚本中使用游标。然而,在Golang应用程序中直接操作MySQL游标并不常见,因为Golang的database/sql
包并未直接提供对游标的支持。通常,你会在存储过程或触发器中定义和使用游标,然后从Golang应用程序中调用这些存储过程。
总的来说,对于大多数应用场景,流式查询是处理大量数据的首选方法,因为它在Golang中有很好的支持和实现方式。而游标查询则更适合在数据库服务器端进行复杂的数据处理和控制。在选择方案时,需要根据具体的应用场景和需求来决定。