分析领域核心模型,使之凌驾于缓存之上,把曾经的数据库操作就交给后台的Runner。
非常激动人心的世界,值得思索。
非常激动人心的世界,值得思索。
而这个帖子的主题意思其实就是全局的(application,cluster)缓存,这是一种model缓存,针对业务对象的缓存。这种缓存的意义不仅在于减少了数据库的访问,也很大程度的减少了数据库事务给性能造成的影响,因为很多的操作,我们都可以通过内存锁实现,而不是依靠数据库事务的隔离级别实现并发控制,这个时候的并发有应用程序来控制,有点像悲观离线锁模式,而事务只需要保证数据完整性和持久性。
确实是这样。尤其是集群环境下实现内存悲观离线锁更加困难。我以前实现过一个是通过数据库表来实现悲观离线锁。对于内存悲观离线锁,实现难度比较大。所以目前我实现的内存锁都是针对某一个model,而不是所有model共享锁。
[该贴被xmuzyu于2009-05-17 13:07修改过]
[该贴被yellowcat于2009-05-17 13:55修改过]
[该贴被yellowcat于2009-05-17 14:04修改过]
这个不太认同。DDD中的聚合讲究将可变与不变分开,聚合根控制对其聚合子对象的访问,加锁不能加在整体聚合根上,相反要加在子对象,这样减低对锁竞争。
关于jivedon的并发问题,请板桥老师指点。
http://www.jdon.com/jivejdon/thread/36231.html
这是对的,但是需要补充的是,修改价格的时候要根据价格对象中的货品引用找到聚合根货品并锁定他,这个锁定我们可以使用具体业务方法锁,而不是把整个货品对象锁定,更不能将聚合对象群所有对象全部锁定,我们在某个业务方法中加锁,实现串行化,保证一致性和原子性,这样根据具体操作枷锁策略比较灵活。
具体可见JiveJdon中ForumThread的addNewMessage方法,这个方法枷锁了,但是没有将ForumThread整个对象锁定,而用数据表来实现,可能就要锁定整个数据表,这也是我们认为内存锁策略+领域模型的新的优势,这也是我们一直引以为豪的,DDD书中讲的也是基于数据表的悲观锁问题。
难道我们不小心又超越了大师,还是我们走在一个错误的自我感觉中,不过从JiveJdon运行中目前没有发现这个方案的问题,也欢迎理论探讨。
[该贴被banq于2009-05-17 15:45修改过]