作为后端开发如何设计数据库系列文章(三)设计SaaS系统表结构

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
简介: 本文来自读者投稿,作者:陈浩翔

在公司做了一年的SaaS内核系统,但是有些东西不知道能不能透露出来。我尽量在不透露一些敏感东西的情况下(这个度我无法把控,只能是笼统了),将某些关于数据库方面的精髓传递出来。如果表达不畅,请谅解。

前面的两篇讲解了在传统系统和大数据量下的数据库设计应该注意的事项。

接下来需要换一种思路,在SaaS系统中,数据库应该如何进行设计。

与传统开发的思考点不同,在SaaS中,可能更多考虑的是数据隔离(在这里考虑共享数据库,共享数据表),数据通用方面

租户id

既然是SaaS平台,那么肯定是多租户的一个生态。那么在数据库层面,一定要有一个字段来隔离数据。

这个字段在每个表都需要有,且每一次数据库的操作都需要有该字段作为条件。

这一步数据安全的控制都放在了代码中,所以安全性和隔离性都是要依赖编码的。

表的自增id

这个字段还是要有的,但是强烈建议不要在删除行数据,查询数据,修改数据时使用到该字段,因为该字段的单独操作会破坏掉数据的隔离性。也就是前面所说的,所有的sql操作,都要带上租户id再进行。

数据来源标识

作为SaaS平台,在很多情况下,不同的租户可能有一样的数据,或者是通过某些编程,或者是通过配置的方式,通过一套标准数据生成了各个租户的数据。可以实现租户的自定义。

但是在某些情况下,可能某个特性不需要租户进行自定义,而是SaaS系统进行一个控制,那么就需要一个标识,来知道这个数据来源一致。

需要确定的是,这个标识,在这个租户下是唯一的。也就是说,前面的自增id没有用,但是这个标识和租户的id是可以唯一索引到一条数据的。

强烈建议使用租户id和数据的来源标识进行操作数据。

元数据

元数据用一句话就是描述数据的数据

在SaaS中,存在着一些通用配置,通过这些通用配置,可以自由定义一些业务模型,可以极其快速的实现业务需求。

这个元数据,我正在公司负责这块,但是可能不能透露。

简单的说几句,元数据能用非关系型数据库就不要用关系型数据库。前期量级小的时候问题,后面访问量,压力很大。

其次,通用的一些业务模型,一定要抽取出来。元数据对业务来说是极其基础的存在的,业务不应该感知到元数据的存在。业务感知的应该是元数据的一些业务组合,也就是业务模型。

通过组装业务模型,可以配合不同的业务场景,最后实现业务功能。

租户数据

租户的数据,是基于一些元数据来生成的,所以是可扩展的。在这里,也建议不要使用关系型数据库,因为不太适合,非关系型数据库更加适合SaaS系统这个体系。

其实东西很多,但是暂时先讲到这了,我也不知道某些东西是不是属于公司的,前些日子我们公司刚爆出了员工透露公司机密到网上,所以。。。

最后讲下吧,如果要做SaaS系统,一定要考虑长远,不要先被业务拖累。如果在半年一年内无法脱离业务需求来架构设计与开发SaaS系统,那么我的建议是,不要做什么SaaS了,开发业务吧,不然公司都活不下去的。

整篇看上去会比较理论,但是实际上,这些都是实践后的一些理论点。有很多的一些东西,我无法分享太多,非常抱歉。这次也是借这个阿里云活动的机会,分享一点出来。

相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
目录
相关文章
|
2月前
|
存储 缓存 监控
怎么更好地设计一个优秀的SaaS系统
设计一个优秀的SaaS系统,需要从架构、性能、安全性、租户隔离、扩展性等多方面进行深思熟虑。根据业务需求选择合适的多租户架构,保证数据隔离的同时提高系统性能。
160 1
|
1月前
|
数据库连接 Go 数据库
Go语言中的错误注入与防御编程。错误注入通过模拟网络故障、数据库错误等,测试系统稳定性
本文探讨了Go语言中的错误注入与防御编程。错误注入通过模拟网络故障、数据库错误等,测试系统稳定性;防御编程则强调在编码时考虑各种错误情况,确保程序健壮性。文章详细介绍了这两种技术在Go语言中的实现方法及其重要性,旨在提升软件质量和可靠性。
33 1
|
22天前
|
安全 API 定位技术
房产SaaS系统如何利用HTTP代理IP
在信息化时代,网络成为生活的重要部分,HTTP代理IP的应用日益广泛。房产SaaS系统使用HTTP代理IP,可提高数据抓取效率、增强市场竞争力、优化用户体验,并确保系统安全稳定,是不可或缺的工具。主要应用于数据抓取、市场分析、策略调整、用户行为分析、多地区房源展示、提高访问速度和API请求管理等方面。
23 0
|
1月前
|
关系型数据库 MySQL Linux
Linux系统如何设置自启动服务在MySQL数据库启动后执行?
【10月更文挑战第25天】Linux系统如何设置自启动服务在MySQL数据库启动后执行?
120 3
|
1月前
|
Java 数据库连接 数据库
深入探讨Java连接池技术如何通过复用数据库连接、减少连接建立和断开的开销,从而显著提升系统性能
在Java应用开发中,数据库操作常成为性能瓶颈。本文通过问题解答形式,深入探讨Java连接池技术如何通过复用数据库连接、减少连接建立和断开的开销,从而显著提升系统性能。文章介绍了连接池的优势、选择和使用方法,以及优化配置的技巧。
41 1
|
2月前
|
SQL 存储 关系型数据库
数据储存数据库管理系统(DBMS)
【10月更文挑战第11天】
158 3
|
2月前
|
存储 关系型数据库 MySQL
PACS系统 中 dicom 文件在mysql 8.0 数据库中的 存储和读取(pydicom 库使用)
PACS系统 中 dicom 文件在mysql 8.0 数据库中的 存储和读取(pydicom 库使用)
45 2
|
3月前
|
JavaScript Java 关系型数据库
毕设项目&课程设计&毕设项目:基于springboot+vue实现的在线考试系统(含教程&源码&数据库数据)
本文介绍了一个基于Spring Boot和Vue.js实现的在线考试系统。随着在线教育的发展,在线考试系统的重要性日益凸显。该系统不仅能提高教学效率,减轻教师负担,还为学生提供了灵活便捷的考试方式。技术栈包括Spring Boot、Vue.js、Element-UI等,支持多种角色登录,具备考试管理、题库管理、成绩查询等功能。系统采用前后端分离架构,具备高性能和扩展性,未来可进一步优化并引入AI技术提升智能化水平。
毕设项目&课程设计&毕设项目:基于springboot+vue实现的在线考试系统(含教程&源码&数据库数据)
|
3月前
|
Java 关系型数据库 MySQL
毕设项目&课程设计&毕设项目:springboot+jsp实现的房屋租租赁系统(含教程&源码&数据库数据)
本文介绍了一款基于Spring Boot和JSP技术的房屋租赁系统,旨在通过自动化和信息化手段提升房屋管理效率,优化租户体验。系统采用JDK 1.8、Maven 3.6、MySQL 8.0、JSP、Layui和Spring Boot 2.0等技术栈,实现了高效的房源管理和便捷的租户服务。通过该系统,房东可以轻松管理房源,租户可以快速找到合适的住所,双方都能享受数字化带来的便利。未来,系统将持续优化升级,提供更多完善的服务。
毕设项目&课程设计&毕设项目:springboot+jsp实现的房屋租租赁系统(含教程&源码&数据库数据)
|
2月前
|
安全 NoSQL 关系型数据库
阿里云数据库:构建高性能与安全的数据管理系统
在企业数字化转型过程中,数据库是支撑企业业务运转的核心。随着数据量的急剧增长和数据处理需求的不断增加,企业需要一个既能提供高性能又能保障数据安全的数据库解决方案。阿里云数据库产品为企业提供了一站式的数据管理服务,涵盖关系型、非关系型、内存数据库等多种类型,帮助企业构建高效的数据基础设施。
140 2