决定使用哪个 DAO 的逻辑在哪里(硬盘缓存与远程数据库)?

Where does the logic go for deciding on which DAO to use (hard drive cache vs remote database)?

目前,我有 2 个用于创建 DayActivity 个对象的 DAO:

我受限于我可以对数据库进行的调用次数和每个查询的大小限制,因此依赖于会话之间的缓存。我将每个 DAO 的代码分开,因为它们每个都从不同的位置获取信息。

我现在想做的是创建一个 DAO(会是吗?)来获取 DayActivities 的范围,其中一些是 缓存的 和一些来自远程,取决于某些条件。

听起来您正在尝试实现自己的数据缓存层。您使用的是像 Hibernate 或 JPA 这样内置了缓存支持的框架吗?如果是这样,我会考虑使用它。即使您正在编写普通的 JDBC 调用,我也建议构建一个简单的缓存层,利用 EHCache 或 Redis 之类的东西来执行所有繁重的工作。这些解决方案将比 reading/writing 磁盘上的文件快得多,并将提供缓存过期、数据完整性和可伸缩性的机制。

至于执行从数据库中读取一些对象并从缓存中读取一些对象的查询,这听起来不像是一种常见模式。如果整个数据集是从单个 SQL 查询返回的,那么缓存层将只缓存整个结果,这样后续相同的查询就不必返回到数据库。但是,如果您正在执行某种循环,对每个对象执行单独的查询,那么缓存层将阻止您访问数据库以获取您已经检索到的任何对象。不过,一般来说,运行 单个数据库查询 returns 所有对象通常比 运行 多个查询要快得多。