分布式数据库查询优化
Posted 左直拳
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了分布式数据库查询优化相关的知识,希望对你有一定的参考价值。
一、分布式数据库VS集中式数据库
分布式数据库在结构上与集中式数据库存在差异。什么差异?集中式数据库是单机版,数据都放在一台机器里,而分布式数据库的数据则散布于网络中。这样的话,分布式数据库查询起来,很有可能需要考察多个节点的数据。那么怎么优化呢?
可以说,集中式数据库与分布式数据库查询优化的侧重点不一样。集中式数据库优化主要考虑CPU和IO;而分布式还需要考虑通信代价。相对于CPU和IO的处理速度而言,通信的效率最低,因此,降低通信代价是分布式数据库优化的关键。
二、分布式数据库的查询模式
分布式数据库中,从查询涉及的数据和查询处理过程中的通信模式来划分,可以分为局部查询、远程查询和全局查询三种类型:
1)局部查询
指用户查询所涉及的数据均在本地数据库中,可以使用集中式查询处理技术进行优化。
2)远程查询
查询只涉及网络中单个场地的数据,因此也可以使用集中式查询处理技术进行优化。但同时需要注意,数据可能在网络中的多个位置存在副本,就有一个副本选择问题。通常选择距离查询场地最近的副本。
3)全局查询
查询涉及多个场地的数据,查询处理和优化技术最为复杂。具体方法有全局查询树的变换、副本选择与多副本的更新策略、查询树分解、半连接和直接连接等。
三、分布式数据库全局查询的优化
1、全局查询树的变换
目的就是将投影和选择提前,尽量减少连接时的数据量,提高连接速度。
2、副本选择与多副本的更新策略
如上所述,分布式数据库的数据常常设置多个副本。这样在查询时就有个副本选择问题。选择副本原则:
1)尽可能提高访问的局部性,减少远距离访问
2)尽可能减少通信开销,尤其要减少大量数据的传送
3)适当考虑节点负载的平衡
多副本可以提高访问的局部性和系统的可靠性,但在更新时,必须维持多副本的一致性。一般可采取如下策略:
1)在事务提交前更新全部副本
2)立即更新所有有效副本,失效节点的副本留待修复后更新
**3)主副本法。**指定一个副本为主副本,事务提交前先更新它,其余副本在事务提交后根据主副本的广播内容进行更新。这种策略的副作用是可能存在不一致性。读取时如果读到主副本没有问题,如果读其他副本就可能读到不一致的数据。解决办法是每个副本附一个版本号,读取时与主副本的版本号进行比较。
4)快照法
只设置一个副本,然后多个数据快照分布在其他节点。读取数据时,可以读副本,也可以读快照,由用户自行决定。
更新时,仅更新副本,快照周期性更新或用命令强制更新。快照在某些情况下是允许的,甚至是要求的。
3、查询树分解
后序遍历法查询树(查询树是个二叉树?),理论比较晦涩,主要作用是优化分布式数据库的连接策略。
4、半连接和直接连接
1)半连接
半连接就是连接操作的时候,不将整个关系或片段的数据传送到对方,而是通过投影和选择,只传送匹配的元组(即数据行),以减少数据传输量。不过这样增加了连接次数,以及投影和选择操作。实际应用中,是否要采取半连接,需要经过权衡。
半连接操作主要着眼于减少通信开销。
2)直接连接
直接连接操作相对于半连接操作而言更为重视局部处理代价,却较少考虑传输代价。简单而言,其思想是将所有片段都传递到一组站点中,由这些站点处理,并得出结果。
四、总结
降低通信代价是分布式数据库优化的关键
以上是关于分布式数据库查询优化的主要内容,如果未能解决你的问题,请参考以下文章