V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Famio
V2EX  ›  程序员

SQL 连续性的读写有必要在每条数据读写时 open 和 close 吗

  •  
  •   Famio · 2017-03-04 13:02:10 +08:00 · 2727 次点击
    这是一个创建于 2603 天前的主题,其中的信息可能已经有所发展或是发生改变。
    有万+条数据要连续读写, sql 操作类中加了 open 和 close ,每条数据都会 open 下,写完再 close ……虽然这流程很标准,但我想这种连续性写入是不是可以不用 close 了?
    现在软件跑一段时间后就会停止工作,查看错误日志时 sql 的问题……
    15 条回复    2017-03-05 15:50:04 +08:00
    Tom008
        1
    Tom008  
       2017-03-04 13:33:27 +08:00 via iPhone
    这情况不是要数据库连接池吗
    m31271n
        2
    m31271n  
       2017-03-04 13:37:02 +08:00
    不需要频繁的 open / close 连接,因为这很消耗系统资源。

    我的做法是:在内部缓存池中维护数据连接,当不再需要某连接时,就将其放回到连接池中,供下一个请求使用。

    关于停止工作的问题:对系统资源做些监控,跟数据库日志的时间和信息进行对比,来定位为题。
    Famio
        3
    Famio  
    OP
       2017-03-04 14:27:19 +08:00
    @Tom008 @m31271n

    谢谢二位回复,我这本身就是个辅助工具类的软件。结果就是要处理大量的 sql
    对连接池不是很熟练,我再研究下。
    huiyue
        4
    huiyue  
       2017-03-04 14:30:29 +08:00
    不需要事务?
    zeraba
        5
    zeraba  
       2017-03-04 17:43:50 +08:00 via Android
    用事务啊
    ebony0319
        6
    ebony0319  
       2017-03-04 17:51:33 +08:00
    关键字:连接池。
    还有一个就是静态类,只打开一次。
    chaleaoch
        7
    chaleaoch  
       2017-03-04 18:14:40 +08:00
    搭楼请教另一个问题, 什么是 cursor,游标?
    cursor 存在的意义是什么.
    例如我 connect 一个 db 之后,还要在获取一个 cursor,然后用这个句柄去 execute 或者 fetchall 什么的.最后 close cursor,close db,

    在这里我们会发现,cursor 和 db 的功能是重复的.open/connect 了两遍,close 了两遍.

    是不是有什么我不知道的高级用法?导致这个游标是有存在意义的?

    谢谢.
    greatonce
        8
    greatonce  
       2017-03-04 18:27:27 +08:00
    你应该多想想 “复用” 是什么意思
    m31271n
        9
    m31271n  
       2017-03-04 18:48:13 +08:00   ❤️ 1
    @chaleaoch 个人理解,游标是数据库中的一种控制结构,用来遍历数据库中的记录。类似于编程语言的迭代器。

    举例:一次查询有 10W 条记录,这 10W 条记录都一次读出来,还是一点一点地读呢?

    (重新开帖,搭什么车)
    chaleaoch
        10
    chaleaoch  
       2017-03-04 19:02:30 +08:00
    @m31271n 但是我可以把数据库做成一个迭代器.
    所以我还是觉得游标应该有另一些我不知道的高级用法在里面.
    chaleaoch
        12
    chaleaoch  
       2017-03-04 19:32:07 +08:00
    @m31271n 那就是说和我想的差不多,游标并不一定是必须存在的,它只是一个"工具",有它会更好.
    m31271n
        13
    m31271n  
       2017-03-04 19:39:33 +08:00
    @chaleaoch 恩,在数据量大,但对一致性要求不高的情况下使用。个人会把它归在性能优化里,平时开发也不考虑。
    ebony0319
        14
    ebony0319  
       2017-03-04 22:04:28 +08:00
    @chaleaoch 游标有点类似于 reader ,一行行读取。将查询的数据一次性装入内存当然更快,但是数据行很多这时候游标的意义就出来了。
    qile1
        15
    qile1  
       2017-03-05 15:50:04 +08:00 via Android
    楼上有没有具体示例,参考下,现在我也是查询每次都打开关闭数据库一次
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1094 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 18:39 · PVG 02:39 · LAX 11:39 · JFK 14:39
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.