日期:2014-05-16  浏览次数:20461 次

持久层设计某次泛化讨论的几个思路

表设计基于模型和业务约束的要求:

1、表的设计必须从系统建模开始,提供ER图,表结构遵循范式要求。

2、考察几个数据处理异常复杂的点,包括需要使用存储过程的场景。

3、异步数据存取场景的识别。

4、旧有数据的兼容。

?

大数据量下可用性的要求:

1、大表的识别和设计,确定索引,避免大表JOIN操作。

2、一次用户请求事务中,至多执行两次commit操作。Oracle写回滚日志的关系,数据量不大的时候,commit经常比update还要耗时。

3、update操作对数据量有预估计,大数据量批量和异步完成,避免回滚段填塞过度。

4、根据实际场景(包括存储数据量、可用性和可扩展性,ACID要求等)选择持久层对大数据量的接纳方式:

(1)RAC

(2)读写库分离

(3)分区,水平扩展

(4)切换到某一NoSQL数据库,如Cassandra、Redis、MongoDB等

5、选择合适的持久层框架,如iBatis、Hibernate。

6、选择适当的持久层缓存机制,基于持久层对象的简单存储,LRU算法。

7、对于大表,提供可靠的表数据量估计,控制其执行计划,避免Oracle动态采样。

?

文章系本人原创,转载请注明作者和出处