MappedTable 可以在运行时动态定义吗?
Can MappedTable be defined dynamically at runtime?
一段时间以来,我一直是一个快乐的 jOOQ 用户。在我的应用程序中,我从不更新或删除任何内容。我总是插入一个新行,以便整个历史记录始终可用。该应用程序具有时间机器模式,可以查看给定日期的数据。
实体的架构类似于
entity
table
id
- 实体的所有 immutable 属性
inserted_at
插入的时间戳
entity_updates
table
id
entity_id
: fk 到 entity
- 所有 mutable 属性
inserted_at
: 插入的时间戳
通过过滤 inserted_at
列,我可以让我的时间机器运转起来。
一切都很好,但是随着数据越来越多,应用程序性能越来越差。我想走捷径
我考虑执行以下操作:
- 使用最新版本的数据(与实时 table 相同的架构,与数据库触发器保持同步)与 table 保持同步:
entity_update_latest
table
- 根据用例动态决定是否命中
entity_update
tableentity_update_latest
table
为了动态决定,我考虑在我的 jOOQ 配置中求助于 MappedTable
。
在 MappedTable
的使用中是否有任何缓存层,或者我自己的 MappedTable
实现是否安全,它根据一些动态决定命中哪个 table上下文信息?
我正在考虑使用代理来做到这一点。
is there any caching layer in the usage of MappedTable
是的,否则查找会相对较慢,至少在基准测试中是这样。缓存位于您的 Configuration
.
如果你想绕过缓存,你可以为每个查询创建一个新的 Configuration
,但大多数例子建议你注入一个 Configuration
实例,因为所有缓存都位于那里.
但是根据我对您的要求的理解,您不会 per-query 刷新缓存,而是每小时/每天刷新一次?在那个时间间隔创建一个新的 Configuration
应该没问题。
or would it be safe to have my own implementation of MappedTable that dynamically decides which table to hit based on some context information
不,那个代理行不通,至少在 jOOQ 3.16 中行不通
一段时间以来,我一直是一个快乐的 jOOQ 用户。在我的应用程序中,我从不更新或删除任何内容。我总是插入一个新行,以便整个历史记录始终可用。该应用程序具有时间机器模式,可以查看给定日期的数据。
实体的架构类似于
entity
tableid
- 实体的所有 immutable 属性
inserted_at
插入的时间戳
entity_updates
tableid
entity_id
: fk 到entity
- 所有 mutable 属性
inserted_at
: 插入的时间戳
通过过滤 inserted_at
列,我可以让我的时间机器运转起来。
一切都很好,但是随着数据越来越多,应用程序性能越来越差。我想走捷径
我考虑执行以下操作:
- 使用最新版本的数据(与实时 table 相同的架构,与数据库触发器保持同步)与 table 保持同步:
entity_update_latest
table - 根据用例动态决定是否命中
entity_update
tableentity_update_latest
table
为了动态决定,我考虑在我的 jOOQ 配置中求助于 MappedTable
。
在 MappedTable
的使用中是否有任何缓存层,或者我自己的 MappedTable
实现是否安全,它根据一些动态决定命中哪个 table上下文信息?
我正在考虑使用代理来做到这一点。
is there any caching layer in the usage of MappedTable
是的,否则查找会相对较慢,至少在基准测试中是这样。缓存位于您的 Configuration
.
如果你想绕过缓存,你可以为每个查询创建一个新的 Configuration
,但大多数例子建议你注入一个 Configuration
实例,因为所有缓存都位于那里.
但是根据我对您的要求的理解,您不会 per-query 刷新缓存,而是每小时/每天刷新一次?在那个时间间隔创建一个新的 Configuration
应该没问题。
or would it be safe to have my own implementation of MappedTable that dynamically decides which table to hit based on some context information
不,那个代理行不通,至少在 jOOQ 3.16 中行不通