SQL 连续性的读写有必要在每条数据读写时 open 和 close 吗 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
Famio
V2EX    程序员

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

  •  
  •   Famio 2017-03-04 13:02:10 +08:00 3187 次点击
    这是一个创建于 3193 天前的主题,其中的信息可能已经有所发展或是发生改变。
    有万+条数据要连续读写, 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 恩,在数据量大,但对一致性要求不高的情况下使用。个人会把它归在性能优化里,平时开发也不考虑。
    td width="auto" valign="top" align="left">
        14
    ebony0319  
       2017-03-04 22:04:28 +08:00
    @chaleaoch 游标有点类似于 reader ,一行行读取。将查询的数据一次性装入内存当然更快,但是数据行很多这时候游标的意义就出来了。
    ebony0319
    qile1
        15
    qile1  
       2017-03-05 15:50:04 +08:00 via Android
    楼上有没有具体示例,参考下,现在我也是查询每次都打开关闭数据库一次
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3577 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 44ms UTC 04:18 PVG 12:18 LAX 20:18 JFK 23:18
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86