数据库架构选型与落地,看这篇就够了

数据库架构选型与落地,看这篇就够了,第1张

随着时间和业务的发展,数据库中的数据量增长是不可控的,库和表中的数据会越来越大,随之带来的是更高的 磁盘 IO 系统开销 ,甚至 性能 上的瓶颈,而单台服务器的 资源终究是有限 的。

因此在面对业务扩张过程中,应用程序数据库系统的 健壮性 安全性 扩展性 提出了更高的要求。

以下,我从数据库架构、选型与落地来让大家入门。

数据库会面临什么样的挑战呢?

业务刚开始我们只用单机数据库就够了,但随着业务增长,数据规模和用户规模上升,这个时候数据库会面临IO瓶颈、存储瓶颈、可用性、安全性问题。

为了解决上述的各种问题,数据库衍生了出不同的架构来解决不同的场景需求。

将数据库的写 *** 作和读 *** 作分离,主库接收写请求,使用多个从库副本负责读请求,从库和主库同步更新数据保持数据一致性,从库可以水平扩展,用于面对读请求的增加。

这个模式也就是常说的读写分离,针对的是小规模数据,而且存在大量读 *** 作的场景。

因为主从的数据是相同的,一旦主库宕机的时候,从库可以 切换为主库提供写入 ,所以这个架构也可以提高数据库系统的 安全性 可用性

优点:

缺点:

在数据库遇到 IO瓶颈 过程中,如果IO集中在某一块的业务中,这个时候可以考虑的就是垂直分库,将热点业务拆分出去,避免由 热点业务 密集IO请求 影响了其他正常业务,所以垂直分库也叫 业务分库

优点:

缺点:

在数据库遇到存储瓶颈的时候,由于数据量过大造成索引性能下降。

这个时候可以考虑将数据做水平拆分,针对数据量巨大的单张表,按照某种规则,切分到多张表里面去。

但是这些表还是在同一个库中,所以库级别的数据库 *** 作还是有IO瓶颈(单个服务器的IO有上限)。

所以水平分表主要还是针对 数据量较大 ,整体业务 请求量较低 的场景。

优点:

缺点:

四、分库分表

在数据库遇到存储瓶颈和IO瓶颈的时候,数据量过大造成索引性能下降,加上同一时间需要处理大规模的业务请求,这个时候单库的IO上限会限制处理效率。

所以需要将单张表的数据切分到多个服务器上去,每个服务器具有相应的库与表,只是表中数据集合不同。

分库分表能够有效地缓解单机和单库的 性能瓶颈和压力 ,突破IO、连接数、硬件资源等的瓶颈。

优点:

缺点:

注:分库还是分表核心关键是有没有IO瓶颈

分片方式都有什么呢?

RANGE(范围分片)

将业务表中的某个 关键字段排序 后,按照顺序从0到10000一个表,10001到20000一个表。最常见的就是 按照时间切分 (月表、年表)。

比如将6个月前,甚至一年前的数据切出去放到另外的一张表,因为随着时间流逝,这些表的数据被查询的概率变小,银行的交易记录多数是采用这种方式。

优点:

缺点:

HASH(哈希分片)

将订单作为主表,然后将其相关的业务表作为附表,取用户id然后 hash取模 ,分配到不同的数据表或者数据库上。

优点:

缺点:

讲到这里,我们已经知道数据库有哪些架构,解决的是哪些问题,因此, 我们在日常设计中需要根据数据的特点,数据的倾向性,数据的安全性等来选择不同的架构

那么,我们应该如何选择数据库架构呢?

虽然把上面的架构全部组合在一起可以形成一个强大的高可用,高负载的数据库系统,但是架构选择合适才是最重要的。

混合架构虽然能够解决所有的场景的问题,但是也会面临更多的挑战,你以为的完美架构,背后其实有着更多的坑。

1、对事务支持

分库分表后(无论是垂直还是水平拆分),就成了分布式事务了,如果依赖数据库本身的分布式事务管理功能去执行事务,将付出高昂的性能代价(XA事务);如果由应用程序去协助控制,形成程序逻辑上的事务,又会造成编程方面的负担(TCC、SAGA)。

2、多库结果集合并 (group by,order by)

由于数据分布于不同的数据库中,无法直接对其做分页、分组、排序等 *** 作,一般应对这种多库结果集合并的查询业务都需要采用数据清洗、同步等其他手段处理(TIDB、KUDU等)。

3、数据延迟

主从架构下的多副本机制和水平分库后的聚合库都会存在主数据和副本数据之间的延迟问题。

4、跨库join

分库分表后表之间的关联 *** 作将受到限制,我们无法join位于不同分库的表(垂直),也无法join分表粒度不同的表(水平), 结果原本一次查询就能够完成的业务,可能需要多次查询才能完成。

5、分片扩容

水平分片之后,一旦需要做扩容时。需要将对应的数据做一次迁移,成本代价都极高的。

6、ID生成

分库分表后由于数据库独立,原有的基于数据库自增ID将无法再使用,这个时候需要采用其他外部的ID生成方案。

一、应用层依赖类(JDBC)

这类分库分表中间件的特点就是和应用强耦合,需要应用显示依赖相应的jar包(以Java为例),比如知名的TDDL、当当开源的 sharding-jdbc 、蘑菇街的TSharding等。

此类中间件的基本思路就是重新实现JDBC的API,通过重新实现 DataSource PrepareStatement 等 *** 作数据库的接口,让应用层在 基本 不改变业务代码的情况下透明地实现分库分表的能力。

中间件给上层应用提供熟悉的JDBC API,内部通过 sql解析 sql重写 sql路由 等一系列的准备工作获取真正可执行的sql,然后底层再按照传统的方法(比如数据库连接池)获取物理连接来执行sql,最后把数据 结果合并 处理成ResultSet返回给应用层。

优点

缺点

二、中间层代理类(Proxy)

这类分库分表中间件的核心原理是在应用和数据库的连接之间搭起一个 代理层 ,上层应用以 标准的MySQL协议 来连接代理层,然后代理层负责 转发请求 到底层的MySQL物理实例,这种方式对应用只有一个要求,就是只要用MySQL协议来通信即可。

所以用MySQL Navicat这种纯的客户端都可以直接连接你的分布式数据库,自然也天然 支持所有的编程语言

在技术实现上除了和应用层依赖类中间件基本相似外,代理类的分库分表产品必须实现标准的MySQL协议,某种意义上讲数据库代理层转发的就是MySQL协议请求,就像Nginx转发的是>

多人直接共享打开、编辑access数据库肯定是非常慢的,因为数据库系统要为此增加很多额外的系统开销,例如统筹处置各个用户之间数据库各种对象的锁定问题、防止和解决冲突等,由此同时还要产生各用户之间大量的网络数据往返传输,运行慢那是必然的。

那么多用户共享数据库如何提高运行速度呢?建议实施数据与应用程序分离,将数据表单独放在一个数据库里(只含数据表)并保存在网络中某台电脑(后面称之为数据库服务器)的共享文件夹下,将用户电脑中的access数据库应用程序里的数据表全部删除,然后用链接表方式将数据库服务器共享文件夹下的所有数据库表(服务器端)链接到本地access数据库里(应用程序端),保存后再将这含个链接表的数据库应用程序分发安装到各个用户的电脑上,这样就可以大大提高多用户情况的运行速度。

在数据和应用程序分离的基础上还可以更进一步提高多用户运行环境的速度!那就是不用数据表对象编辑、查看数据表,改用窗体来维护数据表,窗体只使用不可更新的记录集查看记录,使用非绑定窗体、控件来维护数据表,这样可以大大提高数据库应用程序的性能,支持更多的用户同时使用一个数据中心,当然这对数据库知识和编程能力有更高的要求。

数据库应用系统(简称数据库系统)是指引进了数据库技术后的整个计算机系统,它是由有关的硬件、软件、数据和人员四个部分组合而形成的,为用户提供信息服务的系统。\x0d\\x0d\硬件环境是数据库系统的物理支持,包括CPU、内存、外存及输入/输出设备。由于数据库系统承担着数据管理的任务,它要在 *** 作系统的支持下工作,而且本身包含着数据库管理例行程序、应用程序等,因此要有足够大的内存开销。同时,由于用户的数据、系统软件和应用软件都要保存在外存上,所以对外存容量的要求也很高。\x0d\\x0d\软件系统包括系统软件和应用软件两类。系统软件主要包括数据库管理系统软件、开发应用系统的高级语言及其编译系统、应用系统开发的工具软件等。它们为开发应用系统提供了良好的环境,其中数据库管理系统是连接数据库和用户之间的纽带,是软件系统的核心。应用软件是指在数据库管理系统的基础上由用户根据自己的实际需要自行开发的应用程序。\x0d\\x0d\数据是数据库系统的管理对象,是为用户提供数据的信息源。\x0d\\x0d\数据库系统的人员是指管理、开发和使用数据库系统的全部人员,主要包括数据库管理员、系统分析员、应用程序员和用户。不同的人员涉及不同的数据抽象级别,数据库管理员负责管理和控制数据库系统;系统分析员负责应用系统的需求分析和规范说明,确定系统的软硬件配置、系统的功能及数据库概念设计;应用程序员负责设计应用系统的程序模块,根基数据库的外模式来编写应用程序;最总用户通过应用系统提供的用户接口界面使用数据库。常用的接口方式有菜单驱动、图形显示、表格 *** 作等,这些接口为用户提供了简明直观的数据表示和方便快捷的 *** 作方法。

早期的数据库管理都是采用文件系统。在文件系统中,数据按其内容、结构和用途组成若干命名的文件。文件一般为某个用户或用户组所有,但可供其他用户共享。用户可以通过 *** 作系统对文件进行打开、读、写和关闭等 *** 作。

文件系统有明显的缺点:

(1)编写应用程序很不方便。

应用程序的设计者必须对所用的文件的逻辑及物理结构有清楚的了解。 *** 作系统 只能打开、关 闭、读、写等几个低级的文件 *** 作命令,对文件的查询修改等处理都须在应用程序内解决。应用程序还 不可避免地在功能上有所重复。在文件系统上编写应用程序的效率不高。

(2)文件的设计很难满足多种应用程序的不同要求,数据冗余经常是不可避免的。

为了兼顾各种应用程序的要求,在设计文件系统时,往往不得不增加冗余的数据。数据冗余不仅浪费空间,而且会带来数据的不一致性(inconsistency)在文件系统中没有维护数据一致性的监控机制,数据的一致性完全有用户负责维护。在简单的系统中勉强能应付,但在大型复杂的系统中几乎是不可能完成的。

(3)文件结构的修改将导致应用程序的修改,应用程序的维护量将很大。

(4)文件系统不支持对文件的并发访问(concurrent access)。

(5)数据缺少统一管理,在数据的结构、编码、表示格式、命名以及输出格式等方面不容易做到规范化、标准化;数据安全和保密方面,也难以采取有效的办法。

针对文件系统的缺点,人们发展了以统一管理和共享数据为主要特征的数据库系统。在数据库系统中,数据不再仅仅服务于某个程序或用户,而是看成一个单位的共享资源,由一个叫数据库管理系统(Data Management System,简称DBMS)的软件统一管理。由于有DBMS的统一管理,应用程序不必直接介入诸如打开、关闭、读写文件等低级的 *** 作,而由DBMS代办。用户也不必关系数据存储和其他实现的细节,可在更高的抽象级别上观察和访问数据。文件结构的一些修改也可以由DBMS屏蔽,使用户看不到这些修改,从而减少应用程序的维护工作量,提高数据的独立性。由于数据的统一管理,人们可以从全单位着眼,合理组织数据,减少数据冗余;还可以更好地贯彻规范化和标准化,从而有利于数据的转移和更大范围的共享。由于DBMS不是为某个应用程序服务,而是为整个单位服务的,DBMS做得复杂一些也是可以接受的。许多在文件系统中难以实现的动能,在DBMS中都一一实现了。

例如:适合不同类型用户的多种用户界面,保证并发访问时的数据一致性的并发控制(concurrent control),增进数据安全性(security)的访问控制(access control),在故障的情况下保证数据一致性的恢复(recovery)功能,保证数据在语义上的一致性的完整性约束(integrity constraints)检查功能等。随着计算机应用的发展,DBMS的功能愈来愈强,规模愈来愈大,复杂性和开销也随之增加。目前,在一些功能非常明确且无数据共享的简单应用系统中,为减少开销,提高性能,有时仍采用文件系统;不过在数据密集型应用系统中,基本上都使用数据库系统。

现代的数据库管理系统应该具备的7个功能:

1、提供高级的用户接口

2、查询处理和优化

这里的查询(query)泛指用户对数据库所提的访问要求,不但包含数据检索,也包括修改\定义新数据等

3、数据目录管理

4、并发控制

5、恢复功能

6、完整性约束检查

7、访问控制

数据管理和数据处理一样,都是计算机系统的最基本的支撑技术。尽管计算机科学技术经历了飞速的发展,但数据管理的这一地位没有变化。数据管理将作为计算机科学技术的一个重要分支一直发展下去,社会信息化,对数据管理的要求也愈高。

以上就是关于数据库架构选型与落地,看这篇就够了全部的内容,包括:数据库架构选型与落地,看这篇就够了、什么是数据库应用系统、ACCESS2016 多用户如何设置能更快的打开和处理数据,我这里同时三个人用的时候打开和处理数据非常的慢。等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/sjk/9341712.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-27
下一篇2023-04-27

发表评论

登录后才能评论

评论列表(0条)

    保存