论文部分内容阅读
随着中国经济的快速发展,人们的生活水平不断提高,网络在中国得到迅速普及。截止到2015年底,中国的网民数量已达到了6.88亿。再加上网络设备和传输介质等硬件的更新换代,网速大大提高,由此产生了海量的应用数据。有的大型互联网公司每天产生几十TB的数据,接受数十亿次的访问。这就对数据库性能提出了更高的要求,而传统的关系型数据库存储能力有限,扩展能力又不强,已不能满足大规模数据的存储、访问需要。分布式数据库系统通过把多台单机数据库组合成一个统一的整体,实现了数据的分布式存储,分布式访问,是解决海量数据访问和存储问题的理想方案。分布式数据库自从上世纪七十年代提出以来,经过多年发展,已经诞生了很多优秀产品。而应用从单点数据库系统向分布式数据库系统转换时遇到的首要问题就是数据切分问题,即按照什么算法把数据切分到不同的物理节点上。本文以数据切分为主题,进行了以下两方面的工作:一是结合现有的数据切分算法,提出了一种基于范围切分和哈希切分的组合算法。全局上,数据按增量区间进行切分,切分的片段不是分布在一个数据节点,而是一个节点组内;局部上,也就是在节点组内,片段会再按简单哈希方式均匀分布到组内各数据节点上。该算法继承了范围切分和哈希切分的优点—数据分布均匀、扩展能力强,同时又规避了其缺点,是一种综合能力优秀的切分算法。在和一致性哈希算法的对比实验中,该算法表现出了较好的数据访问能力和扩展能力。尤其是可以很方便地进行数据扩容,无须迁移任何数据。在具体应用测试中,解决了大规模数据查询延迟问题,具有良好的应用价值。二是针对数据切分应用做了一些工作。数据切分要想投入应用,必须解决两个基本问题:自增主键唯一性问题和分布式连接问题。这两个问题也是数据库从单点发展到分布式时所面临的最基本问题,对分布式系统的可用性和性能都具有重要影响。本文在借鉴前人成果的基础上,讨论分析了各种场景,最后分别给出了可行的解决方案,并进行了代码实现。对于自增主键不唯一问题,给出了一种全局序列生成方案,通过维护一个全局序列表来生成自增长主键;对于分布式连接问题,由于其操作代价巨大,首先考虑分布式连接避免。数据冗余和水平派生切分是两种比较有效的用于避免分布式连接操作的方法。如果这两种方法都不适用的话再考虑Direc-join算法。并对全局序列生成和直接连接方案进行了性能测试,测试结果达到了预期,可以一定程度上解决自增主键不唯一和分布式连接问题。