【发布时间】:2016-02-28 17:32:14
【问题描述】:
我有一个应用程序需要知道数据库表中一些记录的最新数量,该解决方案应该适用,而无需更改数据库代码或向其添加触发器或函数,因此我需要一个独立于数据库供应商的解决方案。 我的程序是用 java 编写的,但数据库可能是(SQLite、MySQL、PostgreSQL 或 MSSQL),现在我正在这样做: 在设置为守护进程的单独线程中,我的应用程序通过 JDBC 向数据库发送一个简单的命令,以了解最新的记录数量:
while(true){
SELECT COUNT(*) FROM Mytable WHERE exited='1'
}
这种编码会导致 DATABASE 锁定,减慢整个系统并生成巨大的数据库日志,最终导致整个系统崩溃! 我怎样才能以正确的方式始终拥有某些记录的最新数量或仅在数量发生变化时才计数?
【问题讨论】:
-
我不明白为什么这样的语句会导致巨大的数据库日志,但您可以通过在
exited上创建索引来改进系统 -
在繁忙的循环中查询数据库是一个糟糕的主意。您能否更改代码以便仅按需查询计数?您在应用程序中的什么地方使用计数?