- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在寻找有关如何在集群或使用同一域的多个 JVM 中运行时最佳配置 cayenne 的资源。我一直在阅读文档,我看到了这一点:
“有多种方法可以通知其他堆栈有关对象更改的信息。这可以在 Modeler 中设置。但是,每个更改的完全同步通常会导致过多的网络流量和 CPU 消耗,并且通常会避免有利于查询本章其他地方描述了缓存方法。”
链接到“查询结果缓存”页面。据我了解,当通过 getter 检索关联对象或通过其 id 检索对象时,会使用对象缓存。这句话是否告诉我,如果我配置查询缓存,则不会使用对象缓存?或者我需要避免这样做会影响应用程序代码中的对象缓存?我应该完全禁用对象缓存吗(如果可能的话)?如果我不设置辣椒来通知其他堆栈对象缓存的更改,我是否会面临数据过时的风险?
我很欣赏有关跨多个节点运行辣椒的最佳方式的所有提示,或者如果您有一些资源可以向我指出,那也会非常有帮助。
预先感谢您的宝贵时间!
最佳答案
对象缓存和查询缓存彼此独立,尽管它们可以影响彼此的状态。
对象缓存
扩展对象图时会访问对象缓存(正如您正确注意到的那样)。但是对象缓存的同步不仅仅会更新缓存,还会传播到ObjectContext,从而导致内存中对象图的刷新。虽然这听起来很棒并且 super 自动,但从经验来看,当您拥有与单个用户相关的有限对象图时,它在桌面应用程序中最有用。在集群多用户 Web 应用程序中,同步对象缓存不仅是一种麻烦,而且还有帮助。它会产生大量网络流量,迫使您的实例消耗 CPU 来处理它们并不真正关心的事件,最后,在您最意想不到的时候从底层更新您的对象。所以我通常会关闭对象缓存同步,而纯粹依靠集群查询缓存来处理同步。
查询缓存
这里是an example project演示带有集群的查询缓存。它使用 Cayenne 4.0、EHCache 作为缓存提供程序,并使用 ActiveMQ/JMS 来处理跨实例事件。
查询缓存的工作方式是,它缓存与给定查询匹配的对象列表,包括预取的相关对象(如果查询包含预取)。要充分利用查询缓存,您可能需要稍微改变一下编码风格。您无需在实例变量中存储对查询结果列表的长期引用(本质上是进行自己的缓存),而是在需要此类列表时创建并运行查询(使用适当的缓存设置),并让 Cayenne 决定该列表是否应该从缓存返回或从数据库新鲜获取。
下一步是根据您使用的提供程序指定其默认过期策略(每个缓存组)来配置缓存。例如。一个sample EHCache config .
最后,您可以添加集群和事件驱动的缓存刷新,这可以通过 API 调用显式完成,也可以在提交某些实体时隐式完成(仅自 Cayenne 3.1 起可用)。
查询缓存刷新非常便宜。通过网络发送的唯一内容是“缓存组”的名称,并且在接收端,一堆列表立即被延迟失效。它还会产生更清晰的代码。
如果您主要依赖查询缓存,则无需“关闭”对象缓存本身。对象缓存是 Cayenne 的一个组成部分,许多操作(更新、关系处理)都需要它。当您运行查询时,它将自动更新。不过,您通常需要做的是关闭自动对象刷新。通过不启用对象缓存集群,您已经避免了跨 JVM 同步。此外,您可以使用 this advice禁用同一虚拟机内的跨 ObjectContext 同步。
卡宴版本
我强烈建议至少升级到 Cayenne 3.1(甚至 4.0.M2)。除了其他好处之外,缓存机制比 3.0 更加成熟。它将使您配置 Cayenne 和集成外部缓存提供程序的体验变得更加轻松。
关于java - Cayenne 缓存 - 查询缓存会取代对象缓存吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34244260/
我目前使用 Cayenne 3.1B2 作为一些 Web 服务的持久层。服务需要公开几个数据库之一,所有数据库都具有相同的模式,在调用服务操作时确定数据库。 使用哪个数据库的决定需要基于调用服务的客户
只是一个简单的问题... 在界面构建器中,您可以为对象分配多种颜色。 我想将 tableview 的标题设置为 Cayenne 颜色,但如何以编程方式调用此颜色? 有什么想法吗? 谢谢, 迈克 最佳答
我不想更新辣椒中的某些列值,但我想插入它们。一旦插入行,我将永远不想更新某些列值。我怎样才能在辣椒中做到这一点。如果映射文件中是 hibernate 的,我们可以指定一些内容 如何在辣椒映射文件中指
我是 Apache Cayenne 的新手。 我只有一个实体,称为产品。该实体与其自身具有多对多的关系,即一个产品可以包含产品,也可以被其他产品包含。 我无法模拟与卡宴的这种关系..我所做的是:1)
我计划在一个项目中使用 Apache Cayenne,但我很难正确设置它。 Cayenne tutorial显示如何在 CayenneModeller 中设置数据库位置。我的问题是我想在运行时动态确定
我正在寻找有关如何在集群或使用同一域的多个 JVM 中运行时最佳配置 cayenne 的资源。我一直在阅读文档,我看到了这一点: “有多种方法可以通知其他堆栈有关对象更改的信息。这可以在 Modele
我正在运行以下代码,当我尝试使用 Cayenne 作为 ORM 提交更改时,该代码会出错。代码粘贴在下面,并在 context.commitChanges(); 行出错。输出消息粘贴在代码下方。任何有
我正在尝试从 2 个差异 mysql 表中选择数据: SELECT SUM(TIMESTAMPDIFF(HOUR, startdatetime, enddatetime)), SUM(
我在我的 Web 应用程序中使用 Apache Cayenne 作为 ORM,我想获得由 Cayenne 管理的所有实体类的列表(例如 [Person.class,Account.class,...]
我正在使用 Cayenne 将记录添加到 MySQL 数据库,我看到了一些奇怪的行为。 当我运行我的应用程序时,我会创建一个 DataContext,执行一系列添加,然后关闭该应用程序。这很有效,因为
我有一个带有一些默认值的 postgres 数据库,例如: CREATE TABLE product ( id serial, name text, created_at DE
我希望记录对某些表执行的每个操作。我希望在列级别进行日志记录(不是全部,而是一些),因此如果某个列的值已更改,我想记录该列的值。 用户 U 更改了产品 x 的价格 (假设价格和产品在同一个表中。) 为
我想在 Docker 容器中使用 Apache Cayenne Java Web 应用程序,因为有多个实例正在运行,我想通过环境变量自定义它们。现在我遇到的问题是,我正在使用一个中央数据库,每个实例/
我正在学习 Apache Cayenne,所以我对它很陌生。 我正在遵循官方指南http://cayenne.apache.org/docs/3.0/tutorial.html . 我所做的与指南所述
此方法使用 Cayenne SelectQuery 返回员工对象列表 List getEmployees() { ... return getObjectContext().performQu
我和你们一起花了两个小时,但没有成功。 我正在将 Apache Maven 与 mysql 和 Java EE(带有 ReSTLet 前端)结合使用。 我试图获取一个给定 ID 属性的对象,然后更新它
目前我使用 Cayenne 作为我的 ORM。我需要获取数据源来在代码中初始化 Velocity Engine。我可以手动创建数据源,但我不想这样做,而是想使用 Cayenne 中的现有数据源。 最佳
我第一次在项目中使用 Cayenne。到目前为止,我一直在使用 SelectQuery 并且很喜欢它。我现在需要更新一个对象,例如我的 User 对象包含一个 emailId 属性。当用户需要更新他/
有什么方法可以使用 Apache Cayenne 对数据库表执行批量插入。在某些情况下,我需要执行批量插入。我不确定我们如何在 Cayenne 中做到这一点。 非常感谢在这方面的任何帮助。 最佳答案
谁能帮我选择是使用 Hibernate 还是 Cayenne? 哪个更适合处理大型数据库? 最佳答案 我都用过,但如果我是负责人(而不是我的老板 :))我更喜欢 Cayenne。 Cayenne 有一
我是一名优秀的程序员,十分优秀!