数据库分片和分区
墨初 知识笔记 123阅读
如何将数据分发到分片表或数据库?
答:在运行查询或将传入的数据分发到分片表或数据库时,关键是要将其分配到正确的分片。 否则,它可能导致数据丢失或查询速度缓慢。 在本节中,我们将介绍一些常见的分片架构,每个架构使用稍微不同的流程来跨分片分发数据。
数据库中需要进行分片的表是什么?
答:总而言之就是需要进行分片的表。 一个数据库中并不是所有的表都很大,某些表是可以不用进行切分的,非分片是相对分片表来说的,就是那些不需要进行数据切分的表。 数据切分后,一个大表被分到不同的分片数据库上面,每个表分片所在的数据库就是分片节点(dataNode)。 数据切分后,每个分片节点(dataNode)不一定都会独占一台机器,同一机器上面可以有多个分片数据库,这样一个或多个分片节点(dataNode)所在的机器就是节点主机(dataHost),为了规避单节点主机并发数限制,尽量将读写压力高的分片节点(dataNode)均衡的放在不同的节点主机(dataHost)。
数据分片是什么?
答:数据分片是在接口层实现的,目的是把数据均匀地划分到不同的VServer上。 有了接口层的存在,逻辑层寻址就轻量了很多,寻址存储层VServer的工作全部由接口层负责,逻辑层只需要随机选一个接口层机器访问即可。 接口层使用了一致性哈希的割环算法来实现数据分片,在割环算法中,为了让数据均匀分布到各个VServer,每个VServer需要有多个VNode(虚拟节点)。 一个Key寻址的过程如下图所示,首先根据Hash (Key)在哈希环上找到对应的VNode,在根据VNode和VServer的映射表确定所属的VServer。 由上述查找过程可知,需要事先离线计算出VNode在哈希环上的分布、VServer和VNode映射关系。
为什么选择分片数据库架构?
答:选择分片数据库架构的另一个原因,是为了加速查询响应的时间。 当您对尚未分片的数据库提交查询时,必须先搜索您查询的表中的每一行,然后才能找到您要查找的结果集。 对于具有大型单片数据库的应用程序,查询可能变得极其缓慢。