有一个数据库包含大约 300-400 条记录。我可以进行一个简单的查询来获取 30 条记录,例如:
SELECT * FROM table
WHERE isValidated = false
LIMIT 30
关于数据库表内容的更多说明。有一个名为 isValidated 的列,它可以(正如您正确猜测的那样)采用两个值之一:true 或 false。查询后,应验证某些记录 (isValidated=true)。每组 30 条记录中大约有 5-6 条记录。相应地,在每个查询之后,我将从上一个查询中获取记录(isValidated=false)。事实上,我永远不会用这种方法到达表的末尾。
验证过程是用Java + Hibernate 完成的。我是 Hibernate 新手,所以我使用 Criterion 来进行这个简单的查询。
此类任务有最佳实践吗?添加标志字段(标记已获取的记录)的变体是不合适的(对此数据库进行过度设计)。 也许有机会创建一些虚拟表,其中将存储已处理的记录或类似的内容。顺便说一句,在处理完所有记录后,计划再次开始处理它们(有可能其中一些记录需要验证)。
感谢您提前提供的帮助。
最佳答案
我可以想象几种解决方案:
- 将所有内容存储在内存中。您只有 400 条记录,考虑到这个数字,这可能是一个完美的解决方案
- 在唯一列(例如 PK)上使用 order by 子句(无论如何您都应该这样做),存储最后加载的记录的 ID,并确保下一个查询使用
where ID > :最后ID
关于java - 从 PostgreSql DB 中逐条获取记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10659142/