Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/346.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从批处理端更新数据库时刷新webapp端的Hibernate缓存级别2_Java_Performance_Hibernate_Jpa_Caching - Fatal编程技术网

Java 从批处理端更新数据库时刷新webapp端的Hibernate缓存级别2

Java 从批处理端更新数据库时刷新webapp端的Hibernate缓存级别2,java,performance,hibernate,jpa,caching,Java,Performance,Hibernate,Jpa,Caching,我有一个webapp应用程序和几个批量编辑相同的数据库 WebApp是使用Tomcat数据源构建在Tomcat中部署的。此数据源使用hibernate二级缓存配置她自己的ehcache.xml文件 批处理正在运行以更新同一数据库,并使用它们自己的ehcache配置ehcache.xml 所以webapp和batch不共享相同的缓存区域 我的问题是当批量更新数据库时,我的webapp视图没有更新。这种行为是正常的,因为缓存中实体的过期不是在webapp端完成的。视图在刷新后正在更新 我的问题: 这

我有一个webapp应用程序和几个批量编辑相同的数据库

WebApp是使用Tomcat数据源构建在Tomcat中部署的。此数据源使用hibernate二级缓存配置她自己的ehcache.xml文件

批处理正在运行以更新同一数据库,并使用它们自己的ehcache配置ehcache.xml

所以webapp和batch不共享相同的缓存区域

我的问题是当批量更新数据库时,我的webapp视图没有更新。这种行为是正常的,因为缓存中实体的过期不是在webapp端完成的。视图在刷新后正在更新

我的问题: 这种并发情况的最佳实践是什么


Thx

没有最佳实践解决方案。根据您能容忍缓存变冷的时间和对无效缓存项的恢复能力,您有两种变体。 另一个标准是您正在更新的数据类型。是事务性数据(金钱?),还是每天更新一次,正确性并不重要的数据。I pressume您的批处理应用程序将与web应用程序一起部署。此按钮很重要,因为您需要能够从批处理连接到hibernate二级缓存,以便发送无效信息

  • 对更新的条目执行批处理并发送异步失效消息。将有一个很短的窗口,在该窗口中,缓存将包含过时的条目,但只要您对一致性(如金钱处理)没有极高的要求,就应该可以了。整体表现应该不错

  • 受影响缓存项的同步失效,事务跨越缓存失效和数据库更新。就性能而言,这是自杀:)此处的事务非常重要,如果无法将数据持久化到数据库,则缓存中可能会出现错误的数据

  • 关闭可能受影响的所有事务数据的缓存。联机部件的性能将受到影响。 3A)批处理完成后,您可以决定为缓存设置一些预热逻辑。 3B

  • 在维护窗口中运行批处理。你的在线申请将在这段时间内被取消。您可能会腾出开发时间:)

  • 将缓存用作主数据存储,然后放置一个后台进程,使其与数据库同步。您可能需要一定量的复制以确保不丢失数据。有些缓存还提供磁盘持久性

  • 如果批处理和web应用程序分别运行,会发生什么情况。这是一个可以通过两种方式解决的问题:

  • 您可以使用像hazelcast或infinispan这样的缓存服务器。Ehcache本身并不是一台服务器,您需要在顶部安装terracota才能使其成为一台服务器
  • 另一种方法是保留ehcache,然后需要在webb应用程序中构建一个接口,以使缓存失效。例如,您可以使用队列发送失效消息,然后使用它们并处理它们

  • 我的web应用程序部署到Tomcat容器中。它有自己的ehcache.xml来配置区域缓存


    对于我的bathc,有一个基于crontable的触发器,可以整晚触发批处理。但它在雄猫的外面。它还有她自己的ehcache.xml,用于配置她自己的区域缓存。

    Thx Alexandar关于我的事务数据,我每天更新一次,通常在晚上处理时更新。我的web应用程序部署到Tomcat容器中。它有自己的ehcache.xml来配置区域缓存。对于我的bathc,有一个基于crontable的触发器,可以整晚触发批处理。但它在雄猫的外面。它还有自己的ehcache.xml,用于配置自己的区域缓存。@patrickBAK如果您每天只更新一次,我几乎不会调用此事务数据。您的web应用程序能够执行更新吗?这些更新多久发生一次?您是否有关于批处理执行速度的SLA。当前的执行速度是多少?不要用答案来说明问题的更多细节。用细节更新您的原始问题。