java - JDBC连接池获取和关闭频率
问题描述
我有一个应用程序,我需要在数据库中存储大量事件。这些事件以 5000 个事件/分钟的频率出现,事件总数可能高达数百万。
我正在使用 c3po 连接池。我计划做的是**从池中为应用程序获取一个连接**并使用相同的连接来持久化所有事件,如下所示:
- Connection conn = //创建连接
Persistor persistor = new Peristor(conn)//注入上面创建的连接。
persistor.persistEvent(Event e) { conn.write(e); }
每次写入后语句和结果集都会关闭,但我不会在每次持久后关闭连接(将其释放回池)。相反,当应用程序停止时,连接会关闭。
我运行了应用程序,在持续了大约 600,000 个事件之后,我使用了一个 heapdump(使用:jmap -dump:format=b,file=test-dump.hprof [PID])来检查堆中发生了什么。
我可以看到有一个消耗 500 MB 堆的巨大对象“com.mchange.v2.c3p0.impl.NewPooledConnection”。在分析对象时,我可以看到它包含同一对象(com.mchange.v2.c3p0.impl.NewPooledConnection)的嵌套对象的递归。
所以,问题是,对象是巨大的,因为我没有在每次写入后将连接返回到池,还是我做错了什么?
解决方案
推荐阅读
- javascript - 为什么尝试更改 react js 中的 className 时 CSS 样式会消失?
- python-venv - Python- Venv - 访问 venv 之外的文件
- reactjs - nginx ssl + react + node,响应超时
- python - 欧洲特殊字符的正确编码是什么?
- mongodb - MongoDB - 在存储的文档之间使用 maxDistance $geoNear 而不在查询中指定坐标
- java - 什么是 java .classdata 文件扩展名
- flutter - 如何转换未来
动态的 - python - PySide6 和 QThread:如何不重叠两个不同的线程?
- typescript - React-Hook-Form:尝试在 React.js (TS) 的类模型中使用递归
- reactjs - 有没有办法在不使用 onPress 或 onClick 事件的情况下将参数传递到反应导航中的前一个屏幕?