听闻阿里巴巴为了省钱,用大量跑着mysql的pc服务器替换了运行在小型机上的oracle。
我私下考虑,如果让我来解决这个问题,该如何设计呢?
首先,我觉得过程是这样的,
起初是一台数据库服务器,里面存放所有的表和数据
然后分解成n台数据库服务器(简称节点),各存放一部分数据。(未必是1/n的数据,应该有冗余才对。)
但是,对于应用开发者来说,应该有一个封装,让他们仍然觉得仿佛在访问一个数据库服务器。
具体的说,可能要自定义一个jdbc驱动,内部进行路由分派。
(理论上也未必非要做jdbc驱动,只要做一个统一的数据库访问接口即可,比如:
interface DistributedDB{
Recordset executeQuery(String sql, RequestInfo info);
void executeNonQuery(String sql, RequestInfo info);
}
)
先不细说驱动的事情,先说说常见的数据库操作。
CRUD作为基本的操作,其中CUD一般是单表操作,只有R,即查询才涉及多表操作。
无论怎样,我们可以认为任何一个SQL请求,都有其涉及的表,称之为相关表。
比如,select a.*,b.* from a,b where a.id=b.id的相关表是[a,b]
于是,只有同时拥有这2个表的服务器才能满足这个join查询请求。
再比如,数据库里的表的数据可能不是最新的,因为同步需要时间。
而某个查询可能是允许脏读的,那么我们再给相关表加上一个属性。
还是以上一个查询为例,[a(allow_dirty),b]
这样一来,能满足此请求的服务器可能多了一些。
再考虑分区建表,比如按时间或者某个字段的大小分区,而且是分布在不同的服务器里,
那么相关表还需要加上分区属性,比如
host 1
table a
index time from x to y
那么在查询的时候,我们可以指定查询要求,比如[a(time >x),b]
...
以上,我主要考虑了如下几个因素,
1 以表为单位,分拆数据库到不同的服务器。
2 分拆大表,按索引进行拆分,保存到不同的服务器。
3 是否允许脏读。
总之,每个数据库请求应该尽可能的降低要求,以便充分利用上述的参数带来的性能提升。
以taobao这样的电子商务网站为例,产品目录应该是允许脏读的。
比如新产品上架N秒钟以后才出现在买家的搜索结果里是允许的。
比如按地区查询,可以利用分区建表机制,优化查询。
这个方案新增的工作量是要为每一个数据库请求进行分析,得到其相关表的信息,以便分派请求。
这个分析的动作,可以自动和人工结合。
再说一下写操作,无论是增删改,都是首先写入到某一台机器,然后逐步同步到其他服务器。
显然,我们必须为每个节点上的每个表做版本控制,以便知道哪个表是最新版本。
有了这么一套系统以后,应该是允许实时监控,根据请求的负荷,调整节点的数量。
这个调整也应该是允许自动和人工进行。
在对请求统计之后,应该可以合理的调整节点的数量和节点里包含的表的数据。
以上方案纯属外行人虚构,呵呵。
分享到:
相关推荐
分布式数据库是现代大数据处理的关键组件,它允许在多台服务器之间分布数据,以实现高可用性、可伸缩性和性能优化。本文将深入探讨两个重要的分布式数据库系统:Hypertable和HBase,它们都是受到Google核心技术启发...
理想的分布式数据库应能轻松应对这两种扩展模式。 8. **云原生与容器化**:随着云技术的发展,分布式数据库越来越倾向于云原生设计,与容器和Kubernetes等技术深度融合,实现更高效、灵活的部署和管理。 9. **安全...
分布式数据库查询是现代软件开发中的一个重要议题,尤其是在大数据和云计算时代。C#作为Microsoft .Net框架的主要编程语言,因其强大的特性和丰富的库支持,成为构建此类系统的理想选择。本文将探讨如何利用C#和ADO...
分布式数据库查询优化技术是提升数据库性能的关键手段,尤其是在分布式数据库系统中,由于数据分布在不同的节点上,优化查询执行策略显得尤为重要。本文主要探讨了分布式数据库的特性、组成、功能,以及查询优化技术...
在大数据环境中,由于单个服务器难以应对PB级别的数据量,分布式数据库成为了理想的解决方案。 分布式数据库的主要特点包括数据分片、数据复制和并行处理。数据分片是指将大数据集分散存储在不同的节点上,每个节点...
分布式数据库是现代信息技术中的一种重要技术,它通过将数据分散存储在不同的物理位置上,利用计算机网络实现跨节点的数据共享和访问。分布式数据库系统能够提供高可用性、可扩展性以及更高效的性能,是解决大数据...
在探讨分布式数据库服务的实践中,以阿里云的DRDS(Distributed Relational Database Service)为例,它是一个可高度扩展的分布式数据库服务,提供了分布式执行引擎,可弹性扩展和小表异步广播的功能。为了深入理解...
分布式数据库因其高可用性、水平扩展性和成本效益成为理想的候选者。分布式数据库能够将数据分布在多个节点上,通过负载均衡和数据复制策略,提高处理能力和容错能力,同时降低了对单一硬件的依赖,使得系统更加健壮...
【标题】:“基于遗传算法的分布式数据库数据分配策略研究” 【描述】:本文主要探讨了如何利用遗传算法来优化分布式数据库中的数据分配策略,以提高访问效率。 【标签】:分布式,分布式系统,分布式开发,参考...
【SQL Server 2000 分布式数据库架构】 随着教育体制的改革,学校规模的扩展,异地分校或新校区的出现,使得学校管理面临着如何处理分散的数据资源和集中管理的问题。传统基于文件服务器的方式在数据量大或网络状况...
在当前的IT行业中,分布式数据库的容错性是其可靠运行的重要保障。分布式数据库系统因其高可靠性、高扩展性和数据分布特性在互联网、大数据等领域得到了广泛的应用。然而,在分布式数据库系统运行过程中,硬件故障、...
《C++实现的Bigtable开源版:百度Tera——万亿量级分布式数据库解析》 在IT领域,尤其是在大数据处理与存储方面,分布式数据库系统扮演着至关重要的角色。百度Tera,作为一款基于C++实现的开源Bigtable版本,为海量...
分布式数据库系统是一种高级的数据库架构,它在传统的集中式数据库系统基础上发展而来,旨在解决大规模数据管理和处理的需求。本文将详细探讨分布式数据库系统的优点和劣势。 首先,分布式数据库系统的一大优势在于...
分布式数据库-Spanner1 Google Spanner是一款由Google开发的全球分布式关系型数据库系统,它在设计上兼顾了水平扩展性和强一致性,旨在为大型、复杂、多地区的应用提供服务。作为一款分布式数据库,Spanner解决了...
### Google Spanner——全球分布式数据库的关键知识点 #### 一、概览 Google Spanner是一款由谷歌研发的全球分布式数据库系统,旨在提供可扩展性、多版本支持、同步复制能力,并且能够在全球范围内分发数据。它...
### 阿里分布式数据库实践知识点详解 #### DRDS简介及起源 - **起源**: 阿里巴巴的DRDS(Distributed Relational Database Service)起源于阿里巴巴内部的两个项目——cobar分布式数据库引擎和Taobao TDDL分布式...
### Fintech技术突围之道——金融场景分布式数据库强一致保证 #### 一、金融数字化趋势与挑战 随着金融科技(Fintech)的快速发展,金融行业正经历着前所未有的变革。传统银行业务模式面临着来自互联网金融、大数据...
阿里分布式数据库服务(Alibaba Distributed Relational Database Service,简称DRDS)是阿里巴巴集团推出的一种基于MySQL协议的分布式关系型数据库解决方案。它允许用户在不改变原有应用程序结构的前提下,实现...
分布式数据库设计是数据库系统中的一种高级架构,旨在提高数据处理的效率、容错性和扩展性。设计分布式数据库涉及两个核心问题:分段和分配。 **分段(Segmentation)**: 分段是将一个全局关系(数据库中的完整...
《PaxosStore分布式数据库在微信支付业务中的应用实践》 微信支付业务在全球范围内拥有数十亿用户,每天处理着数万亿级别的读写操作,高峰期甚至达到每秒上亿次。面对如此庞大的业务量和持续增长的压力,传统的...