【发布时间】:2015-10-07 12:34:32
【问题描述】:
我目前有一个应用程序,它维护存储在数据库中的对象中的事务的最新信息。由于高性能和并发性,我们目前遇到了垃圾收集的瓶颈。现在,新数据以新对象的形式出现,然后使用数据库中的旧信息进行更新,并运行多个查看过程,以确保可以获得最新的信息。新更新的对象被存储回数据库,然后在通知下游系统之前比较两个对象的差异。
我想删除比较两个独立对象的概念,因为该对象非常大,具有许多嵌套结构并且正在创建大量垃圾集合。有没有办法更新单个对象,但能够在理想情况下看到该对象发生了什么变化,而无需反射和注释来保持性能?
NewObject
Timestamp: 456
Name: joe
Event: breakfast
OldObject
Timestamp: 123
Name: joe
Event: dinner
将新对象保存到数据库然后比较
if(OldObject.getTimestamp().isNewerThan(NewObject.getTimestamp())
&& NewObject.getEvent() == "breakfast") {
NotifyHandler.notify(NewObject.getName() + " at Breakfast");
}
【问题讨论】:
-
您需要知道发生了什么变化吗?还是只是对象发生了变化?
-
你为什么要比较对象超出了我的理解,但是如果你要比较两个大对象并且你知道其中一个已经被修改,那么 hashCode() 是没用的。对于大量请求,您可以使用 Redis 并将对象直接插入 Redis(不是 memcached)。
-
我需要知道发生了什么变化以及它是如何变化的。例如,如果两个对象都有时间戳,我需要知道它已经改变以及这两个值是什么。我只需要已更改字段的旧值。
-
你能用(伪)代码举例说明你拥有和想要拥有的东西吗?跟踪对象的变化就像从每个 setter 中设置一个布尔值一样简单。
-
为什么?您从数据库中检索一个对象,更新特定字段并编辑数据库中已经存在的对象,就是这样,不需要比较。你应该从改变编辑人员的方法开始,这是我的想法,我已经告诉过你 Redis。
标签: java database performance architecture