业务系统数据库设计常见的隔离和共享模式

简介:

多年开发和维护某些业务系统的经验,让人真正理解了什么叫“数据库设计良好,系统就成功了一半”,尤其是那些面向多商户或多租户的基础服务平台、公共服务平台、开放服务平台、或者由它们组合而成的综合服务平台。数据库设计之初,必须对业务系统DB的隔离和共享模式的优缺有充分的调研,平衡好业务系统的边界,合理设计使用必要的冗余,以适应系统后续的不断变化,否则后期开发人员将陷入无尽的烦恼和痛苦之中,这绝不是危言耸听,只有开发和维护过平台类产品的人才能深刻体会。下面就介绍三种业务系统中最常见的数据库设计的隔离和共享模式:

一、共享Database,共享Schema

很多开发人员最熟悉的一种模式,没错,很可能你在大学的时候写的第一个MIS就是用的这种模式。

某些家伙认为这种模式没啥技术含量,但是,如果你的业务系统要兼容很多业务端的需求,当你选择这种模式的时候,用好了并不容易,尤其是当业务数据量非常大而且需求还在不断变化的时候,会有各种各样的问题暴露出来。

下面分析这种共享模式的主要优缺点:

1、优点

a.前期开发相对容易,单库单表的增删改查,喜闻乐见,注意,我这里说的是前期开发较容易

b.较容易做读写分离、备份和还原

c.能最大化利用DB服务器资源

d.DBA监控和运维管理也非常简单 

2、缺点

a.后期开发和维护会非常痛苦,各种复杂业务共享数据库,不同商户业务逻辑的差异很容易引发开发上的BUG,尤其是牵一发而动全身的公共服务系统

b.单库的容量终究有限,不能适应业务数据量的快速增长

c.多商户业务逻辑不一致,表设计时字段冗余不可避免

d.不利于自定义数据模型,可伸缩性受限制

e.无法对业务层进行横向扩展,某些场景下想通过一个库单张表搞定所有业务逻辑,开发人员只能呵呵了

 

二、独立Database

这个也很常见,直接理解就是为每个业务端独立使用各自的数据库,互不干扰。它的优缺点非常明显。

下面分析这种独立模式的主要优缺点:

1、优点

a.和特定商户业务系统联系更紧密

b.前后期开发和维护都很容易

c.利于业务系统拆分和整合

d.各商户业务数据相对独立,各子系统对其他商户业务系统无影响

e.分流业务系统数据,间接实现了集中数据的分片和纵向扩展

f.性能可能更好,只是可能

2、缺点

a.软硬件成本增加

b.不可避免的重复,主要有重复的数据库设计和业务逻辑,还有独立的后台业务支持系统,总结起来就是一句话,重复的劳动需要更多的人力资源投入

c.DBA管理压力增大,更多的库更多的表需要监控和运维

 

三、共享Database独立Schema

这种模式是一种设计上的平衡,兼有共享和独立模式的各自主要优点。

下面分析这种兼有共享和独立特性的模式的主要优缺点:

1、优点

a.虽然是单库,但根据不同商户进行了特殊业务的拆分,减少了冗余的数据库和数据表的设计和开发,性价比更高

b.纵向扩展非常容易,业务拆分更简单,只要将多商户共享和单个商户特定使用的表独立出去就行

 

2、缺点

a.表设计要求更高,要设计和平衡好有限扩展和无限扩展的可能,否则后续维护会发现还不如完全共享或者完全独立模式来的容易

b.业务数据集中,但表设计分散,后台系统如配置管理系统、统计分析系统很难做到共享模式的便利

 

总结:上面是最常见的业务系统数据库模式,共享和独立并不矛盾,各有自己特定的优缺点,它们依然属于集中式数据设计和管理的范畴,要按照业务系统的现状来选择模式。当然,后期业务系统的不断发展,数据量日益庞大,集中式的数据模式就会爆发很多问题(天花板效应),横向扩展只是一个时间问题,从数据库设计的角度,将DB由集中式改造为分布式(横向扩展)才是永恒的难题。






本文转自JeffWong博客园博客,原文链接:http://www.cnblogs.com/jeffwongishandsome/p/talk-about-share-isolated-pattern-in-db-design.html,如需转载请自行联系原作者

目录
相关文章
|
2月前
|
存储 数据库
快速搭建南大通用GBase 8s数据库SSC共享存储集群
本文介绍如何GBase8s 数据库 在单机环境中快速部署SSC共享存储集群,涵盖准备工作、安装数据库、创建环境变量文件、准备数据存储目录、修改sqlhost、设置onconfig、搭建sds集群及集群检查等步骤,助你轻松完成集群功能验证。
|
2月前
|
数据库连接 Go 数据库
Go语言中的错误注入与防御编程。错误注入通过模拟网络故障、数据库错误等,测试系统稳定性
本文探讨了Go语言中的错误注入与防御编程。错误注入通过模拟网络故障、数据库错误等,测试系统稳定性;防御编程则强调在编码时考虑各种错误情况,确保程序健壮性。文章详细介绍了这两种技术在Go语言中的实现方法及其重要性,旨在提升软件质量和可靠性。
43 1
|
2月前
|
关系型数据库 MySQL Linux
Linux系统如何设置自启动服务在MySQL数据库启动后执行?
【10月更文挑战第25天】Linux系统如何设置自启动服务在MySQL数据库启动后执行?
162 3
|
2月前
|
Java 数据库连接 数据库
深入探讨Java连接池技术如何通过复用数据库连接、减少连接建立和断开的开销,从而显著提升系统性能
在Java应用开发中,数据库操作常成为性能瓶颈。本文通过问题解答形式,深入探讨Java连接池技术如何通过复用数据库连接、减少连接建立和断开的开销,从而显著提升系统性能。文章介绍了连接池的优势、选择和使用方法,以及优化配置的技巧。
52 1
|
3月前
|
SQL 存储 关系型数据库
数据储存数据库管理系统(DBMS)
【10月更文挑战第11天】
222 3
|
3月前
|
存储 关系型数据库 MySQL
PACS系统 中 dicom 文件在mysql 8.0 数据库中的 存储和读取(pydicom 库使用)
PACS系统 中 dicom 文件在mysql 8.0 数据库中的 存储和读取(pydicom 库使用)
54 2
|
3月前
|
安全 NoSQL 关系型数据库
阿里云数据库:构建高性能与安全的数据管理系统
在企业数字化转型过程中,数据库是支撑企业业务运转的核心。随着数据量的急剧增长和数据处理需求的不断增加,企业需要一个既能提供高性能又能保障数据安全的数据库解决方案。阿里云数据库产品为企业提供了一站式的数据管理服务,涵盖关系型、非关系型、内存数据库等多种类型,帮助企业构建高效的数据基础设施。
168 2
|
3月前
|
存储 NoSQL 关系型数据库
数据库管理系统
【10月更文挑战第8天】
214 1
|
3月前
|
数据可视化 API PHP
低代码开发工具-学生管理系统-老师管理增删改查实现
低代码开发工具-学生管理系统-老师管理增删改查实现
52 5
|
3月前
|
SQL JSON 关系型数据库
MySQL是一个广泛使用的开源关系型数据库管理系统,它有许多不同的版本
【10月更文挑战第3天】MySQL是一个广泛使用的开源关系型数据库管理系统,它有许多不同的版本
236 5