听闻阿里巴巴为了省钱,用大量跑着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秒钟以后才出现在买家的搜索结果里是允许的。
比如按地区查询,可以利用分区建表机制,优化查询。
这个方案新增的工作量是要为每一个数据库请求进行分析,得到其相关表的信息,以便分派请求。
这个分析的动作,可以自动和人工结合。
再说一下写操作,无论是增删改,都是首先写入到某一台机器,然后逐步同步到其他服务器。
显然,我们必须为每个节点上的每个表做版本控制,以便知道哪个表是最新版本。
有了这么一套系统以后,应该是允许实时监控,根据请求的负荷,调整节点的数量。
这个调整也应该是允许自动和人工进行。
在对请求统计之后,应该可以合理的调整节点的数量和节点里包含的表的数据。
以上方案纯属外行人虚构,呵呵。
分享到:
相关推荐
了解一个软件的配置项的意义是使用这个软件的前提,这里介绍 Cassandra 的配置文件(storage-config.xml)中各个配置项的意义,这其中包含有很多配置参数,我们可以对其进行调整以达到理想的性能。
分布式数据库设计 分布式数据库设计 DDB设计的两个问题 1)分段 – 分割关系成"段" ;逻辑上 2)分配 – 将段置放到站点 ;物理存储上 ⽬标 – 优化响应时间/吞吐量/费⽤/… 分段元则 假若有全局关系R 被分段为⼦...
Sharding-Sphere是一套开源的分布式数据库中间件解决方案组成的生态圈,它由Sharding-JDBC、Sharding-Proxy和Sharding-Sidecar这3款相互独立的产品组成。他们均提供标准化的数据分片、读写分离、柔性事务和数据治理...
【Java面试+Java后端技术学习指南】:一份通向理想互联网公司的面试指南,包括 Java,技术面试必备基础知识、Leetcode、计算机操作系统、计算机网络、系统设计、分布式、数据库(MySQL、Redis)、Java 项目实战等 ...
这使得 MongoDB 成为 Web 应用的理想选择,因为它可以轻松处理各种复杂的数据需求MongoDB 是一个面向文档的数据库,其数据存储在类似 JSON 的 BSON(Binary JSON)格式中。MongoDB 的主要特点是其灵活的文档模型,它...
ActorDB是一个分布式SQL数据库... 具有KV商店的可伸缩性,同时保留了关系数据库的查询功能。 ActorDB是理想的服务器端数据库。 考虑运行大型邮件服务,投递箱,evernote等。它们都需要服务器端存储用户数据,但是...
HBase的设计思想来源于Google的BigTable论文,是一个面向列式存储的分布式数据库。 HBase底层存储基于HDFS实现,集群的管理基于ZooKeeper实现。其良好的分布式架构设计为海量数据的快速存储和随机访问提供了可能。...
Voldemort 是一个分布式数据库,它是亚马逊 Dynamo 的开源克隆。 它自动在多个服务器上复制数据,并自动对它们进行分区,因此每个服务器只包含总数据的一个子集。 它提供了许多其他功能,例如可插拔序列化支持、数据...
它是一个网络社交云计算方面理想的数据库。以Amazon专有的完全分布式的Dynamo为基础,结合了Google BigTable基于列族(Column Family)的数据模型。P2P去中心化的存储。很多方面都可以称之为Dynamo 2.0。
FastCFS(Fast Clustered File System)是一个基于块存储的高性能通用分布式文件系统,具有广泛的用途,可以用作多种应用的后端存储,包括数据库(如MySQL、PostgreSQL、Oracle等)、容器编排平台(如Kubernetes)...
QLite [] QLite 是基于微服务的 NewSQL 型数据库系统,与传统的一体化...QLite 在发布至GitHub前已经经历了两个版本,分别是TCP版和集成版,效果皆不是很理想,该版本为分布式版本,采用HTTP作为接口交互协议,将信息处
Web能用一种及时和友好的方式向人们提供大量有用的信息, 而伴随着大量信息, 就需要数据库的管理, Web和数据库的结合是WWW信息服务技术和分布式数据库技术发展的大势所趋. 把数据库同WWW服务器连接起来, 这种...
System p5 505Q 平台是中小企业客户的理想选择,这些客户正在升级、部署或添加新的 Linux 或 UNIX 服务器群,将其服务于分布式数据库、ERP 和 CRM 应用、基础架构应用或 HPC(高性能计算)集群 - 必须不间断运行以...
System p5 505Q 平台是中小企业客户的理想选择,这些客户正在升级、部署或添加新的 Linux 或 UNIX 服务器群,将其服务于分布式数据库、ERP 和 CRM 应用、基础架构应用或 HPC(高性能计算)集群 - 必须不间断运行以...
Web能用一种及时和友好的方式向人们提供大量有用的信息, 而伴随着大量信息, 就需要数据库的管理, Web和数据库的结合是WWW信息服务技术和分布式数据库技术发展的大势所趋. 把数据库同WWW服务器连接起来, 这种...
这份宝典囊括了Java编程中的基础知识、多线程编程、数据库操作、Spring框架、Spring Boot、Spring Cloud、Linux操作系统、分布式系统、设计模式、面试指导以及自我介绍等内容。 基础部分,包括Java编程语言的核心...
它是一个网络社交云计算方面理想的数据库。以Amazon专有的完全分布式的Dynamo为基础,结合了Google BigTable基于列族(Column Family)的数据模型。P2P去中心化的存储。很多方面都可以称之为Dynamo 2.0。
它是一个网络社交云计算方面理想的数据库。以Amazon专有的完全分布式的Dynamo为基础,结合了Google BigTable基于列族(Column Family)的数据模型。P2P去中心化的存储。很多方面都可以称之为Dynamo 2.0。