司马刘的日志

分享工作,分享生活。

Skip to: Content | Sidebar | Footer

Month: 六月, 2010

DAL 最近的一些进展

20 六月, 2010 (11:10) | 开发 | By: 司马 刘

上个月我这个部门走了两个人,我的意思是说现在我这个部门只有一个人。DAL 的研发工作目前是由我一个人负责。一个人做事的弊端就是想法比较局限,代码写了只有自己觉得好不好,也没有别人来评价。不管怎么说,DAL 还是在稳步前进。下面就说说 DAL 目前的一些进展。

选择最优的索引表完成查询。数据分片后为了便于排序和做一些聚合操作,每套分片都建了若干个索引表,有查询请求需要索引表辅助完成的时候,以前是随机选一个可用的索引表,现在引入了一个评分的算法,给每个索引表评分,选得分高的索引表。评分的依据主要是索引的使用情况,大体来说就是有索引比没有索引好,联合索引比单个索引好。目前这个特性在手机之家测试机上运行良好,情绪稳定。
对并发查询请求的优化。在生产机的数据库上经常会看到有同样的 SQL 请求在数据库中执行,DAL 能不能为这种情况做些优化呢?我们想到了这样的办法:每次执行数据库查询的时候记录一个请求执行上下文,当有同样的请求并发到达时,只有严格的第一个到达的请求会查询数据库并将查询结果保存在执行上下文中,其他请求都等待第一个请求完成,然后直接使用上下文中保存的查询结果。当然如果对某个表有更新操作,这个表的所有执行上下文都将被删除,保证数据的一致性。还有如果查询中包含时间函数也不能使用这种优化机制。
编码优化。以前的 DAL 使用 php 序列化编码结构化数据。其实只要稍微想想就知道这肯定是个不好的方式,但是由于历史原因,这种编码方式一直持续到现在。php 反序列化大数据时性能相当差,并且 php 只支持少数几种数据类型,用 php 序列化编码的数据无法跨语言使用。新的编码主要要解决性能问题和数据类型跨语言的问题。这部分工作目前还在进行中,以后会给出结果。

大概就是这些,最后再附几张大学校门图,这也能看出国家正在进步嘛!