| Twitter | Del.icio.us | Comments (13) | | Edit

Comments Powered by Disqus

留言评论 | Comments (13)

DAL好东西。
如果能开源出来就爽了,
或者老高是不是有意出售这部分代码?

我对缓存处理器有些不解,它是怎么使用(没错,是使用,比如API如何)的呢?听上去是非常“自动化”的一个组件,但是例如,它怎么知道比如什么某个数据获取什么时候过期呢?例如:有的数据条目应该在修改时过期,这一点如何让缓存处理器得知的呢?

楼上的,我的理解是它的自动化应该是通过配置实现的。 根据业务的实际需求,来配置不同数据的更新策略。

在我看来,配置就是代码的一部份啊,呵呵。
还有就是,手机之家最后的演变,已经颇有LINQ的腔调了,也就是说,如果是用.NET平台实现,可以实现一个LINQ Provider,这个思想非常了得,值得借鉴。

虽然我用的是.NET,但还是很有借鉴意义的

不需要配置, 所有的数据库变更是通过DataAccessor实现的, DataAccessor会触发缓存的更新操作.

@手机之家的马甲
DataAccessor能够获得数据库更新的通知?那么DataAccessor如何知道某次数据库更新是否要清除某个缓存呢?能否多谈一下这方面的话题呢?
非常感谢。

to jeffz.myopenid.com:

数据统一流过DA,此时的DA充当拦截器的作用,它可以对数据做任何处理。

CRUD,DA自然知道。

@许超前
你说的我自然知道,但是这难道不需要为DA编写一个缓存控制逻辑吗?这个逻辑是和业务相关的,怎么能自动完成?单个对象可以缓存,那么批量查询的对象呢?一些聚合数据呢?一个U操作可能会清空n个缓存项,DA能“自动”作吗?

to jeffz.myopenid.com:

嗯。这些疑问,在上次的beta会议上,也有人提及,我们也已经作了详细的说明和解释。

分库切表智能化、缓存透明化是DAL的两大目标。说白了,就是想尽量自动化一些繁琐的细节,从而简化程序的编写。

在PPT里,我们提到,缓存是不应该紧耦合于业务逻辑的。基于这个理念,我们想方设法把缓存的控制逻辑从业务逻辑当中抽象出来。

这些逻辑现在是DAL的一部份。要想自动化、必须规则化,意思就是说,缓存的结构(特别是KEY值)必须是有规律的。

对象的批量查询,大部份都可以转化为对单个对象的查询。PPT里也说了,就是[单个条目+Id List]的办法。

在实践当中,我们发现,这样处理后,单个条目的命中率是相当高的,在80%~90%之间。

Id List和聚合查询的缓存有一个容忍度的问题。我们认为这是提高网站承载能力的关键所在。起码是千万级流量网站可选的一个解决方案。

至于您提到的1:n自动化问题,DAL目前已经解决了。接下来要做的就是改进、改进、再改进。

感谢您的关注。

不知道老高的DAL怎么触发更新缓存。
不过MYSQL的话,通过触发器+自定义函数接口(UDF),倒可以很方便的实现。我以前做过memcached+mysql的东西。
不过老高这个要更高级。

很有借鉴意义,受益匪浅

@许超前
你说的我自然知道,但是这难道不需要为DA编写一个缓存控制逻辑吗?这个逻辑是和业务相关的,怎么能自动完成?单个对象可以缓存,那么批量查询的对象呢?一些聚合数据呢?一个U操作可能会清空n个缓存项,DA能“自动”作吗?