Table of Contents1 细粒度锁表
2 拆表与降低锁的粒度异曲同工。 2.1 物理拆分方式
2.2 逻辑拆分方式
3 多数据源(多库)本质是拆库。与拆表异曲同工。数据库路由(定位),对于程序员来说就是数据源路由(查找、定位),需要定义多个数据源,并采取合适算法进行定位。可参考 http://hi.baidu.com/dapplehou/blog/item/6ba8034f5114e038aec3abdb.html 多库部分. 什么是合适算法?那要根据库的切分方式、性能需要以及业务需要来定夺。 4 乐观锁可以降低数据库长事物。只在提交的那一刹那判断自己提交的数据是否已经被别人修改过了,如是,则认为自己要提交的数据是过期数据,取消提交,否则,提交成功。避免长事物带来的等待。通常采用版本号来判断是否过期数据。过程如下:
5 临时表使用局部临时表提高并发性能。局部临时表特点是多用户操作互不干扰。一个局部临时表只对一个session可见、有效。多用户并发实际是各操作各自的临时表,不会产生数据表锁的问题。提高并发效率。 SQL Server创建临时表语句: CREATE TABLE #MyTempTable (cola INT PRIMARY KEY) Oracle: CREATE GLOBAL TEMPORARY TABLE MyTempTable 把主表(频繁使用又数据量大)中的部分数据放入局部临时表,然后在临时表里进行计算、统计等工作,然后同步到主表中去(同步过程可用乐观锁机制),减少了主表在并发时锁等待的开销。 临时表性能提升原理和拆分表原理相同:通过把一个大集合拆成小集合,然后在小集合上进行计算。 6 缓存
7 数据库集群与多库(拆库)区别: 集群是每个库上都有一份相同的数据;拆库是每个库只有全集的部分数据。 多数据库冗余可以减少单个数据库的负载,总体上提高了性能。它有3个技术关键点:
8 读写分离策略在读操作远多于写操作的大型应用中,可采用读写分离策略。用来读的数据库叫从数据库,用来写或者事务性查询的叫主数据库。主数据库的数据变化会通过某些策略(比如数据库复制)同步到从数据库,从而保证主从数据库数据一致性。其本质是空间换时间,即:通过增加数据库冗余,降低数据库对锁的复杂调度。但另一方面,增加了应用架构的复杂度 (这种复杂性可以通过使用第三方中间件来降低)。 9 SQL优化SQL语句是数据库资源消耗的主要来源,它往往都是可以进一步优化的,SQL优化在时间成本和风险上代价低。 我们写的SQL语句都会被查询优化器自动优化,它的优化原则是这样的: 1. 选择运算优先运行。(即优先通过条件过滤记录集) 由于有了以上优化,所以下面两种SQL的写法效率一样 select * from A,B where A.id=B.id and A.name='Jake' 随着数据库的进化,原来效率低的语句现在不一定低,需要实际测试。 10 正确使用索引
|
联系客服