快速背景:当我回去重新设计应用程序的某些关键部分时,我一直在考虑锁定及其对性能的影响。该应用程序有一个大型的Tree风格的数据结构,可以缓存数据库中的数据/ DTO。对大树的更新可以通过两种主要方式实现:1.用户触发的命令,2.自动更新来自在后台运行的作业。锁定性能:锁定更长时间与锁定更经常
当任何操作类型发生(用户/自动)时,我锁定(显式锁定)数据结构。我遇到了一致性问题,因此锁定一切似乎最能保护缓存中数据的完整性。
问:由于许多自动更新可以发生在一次我想实现某种队列(JMS或许)来处理的数据结构,其中的任何用户驱动的更新推送到顶部和处理的第一个指令。当谈到处理批量/未知大小的自动“任务”集时,我试图弄清楚我是否应该让它们单独运行和锁定,或者尝试按时间将它们集中在一起,并与锁定进行一次交互。问题的真正症结在于任何更新的任务都可能影响整个树。
就整体性能而言(通常,没有特定的),是否有更多的事务锁定潜在的大型更新,或尝试并结合到一个大规模批量更新,只锁定一次,但更长的时间?我知道很多这可能取决于数据,更新类型,频率等。我不知道是否存在“更小更频繁的锁”或“更大的可能更长的锁”的一般经验法则。
是的。嗯。也许没有。也许也许吧。好,严重:我认为你的问题太广泛了。 – GhostCat
@GhostCat我有一个暗示它可能有点太宽泛。你能想出一些我可能缩小一点的方法吗?如果它是def,我就没有问题了。太宽泛。 – Walls
什么是缓存策略?物体是否比所需要的时间更长,增加了树的大小并影响了性能? –