2014-05-23 83 views
0

情况: 我已经设置了一个基本系统来缓存TeamManager中的Team对象。基本上它只是一个按名称存储团队的HashMap。 TeamManager还有一个IDataManager对象,它是TeamManager写入的持久层,不管它是SQL数据库还是平面文件。我们假设为了这种情况,我正在使用的是一种用于保存团队数据的平面文件方法。Java持久层同步

问题: 我在TeamManager的功能,“getTeam(字符串teamName)”,它返回到在HashMap中团队对象的引用。如果另一个类调用此方法并更改Team对象内部的某些东西,我需要在持久层中取消它。问题是TeamManager不知道何时对Team进行更改才能知道更新它。

问题: 解决此问题的最佳方法是什么?

•我可以实现的持久层定期写,但是这是一个创可贴修复...

•我能得到来自TeamManager完全摆脱HashMap中,并使其仅供参考什么是持久性层,但是这会增加开销...

•我可以尝试将所有的设置者移动到TeamManager中,以便控制何时更新事件,但这会触及太多类并花费太多时间。 ..

有没有人有什么建议我可以做什么来解决这个问题或毛皮请解释我的问题?

在此先感谢。

回答

0

这是我的建议:

  • 首先考虑适用的使用方法为locking
  • 如果您使用数据库,请使用主要搜索属性的数据库索引。它将像Java中的Map一样工作,并减少与这些索引列相关的事务处理时间。
  • 创建一个代理层,用于在用户使用特定资源进行更改时通知用户。这可能会很棘手,具体取决于您的平台和设计。
+0

我很欣赏这种回应,但我不认为这正是我正在寻找的解决方案。说这个可能是天真的,但我不认为锁定是我在这种情况下寻找的东西。在数据库中建立索引会很好,但我现在担心的是平面文件存储。至于第三个子弹,我不确定它适用于我创建的系统。基本上,团队数据是指球员团队的信息,比如总部的设置和队友的位置。当服务器重新启动时需要坚持的事情。 –