职场面试题总结(48)--- SaaS系统数据库是如何设计的、一个表里有多个租户该如何设计表结构、Mybait-plus拦截器

348 阅读4分钟

1、 SaaS系统数据库是如何设计的

第一种分库、第二种分表

基本原则:

1、性能保证:不跨数据库操作,避免跨节点操作。

2、安全性:用户之间隔离性。

3、可管理性:支持应用的灵活性,业务调整,数据迁移,备份恢复。

4、可扩展性:支持业务弹性扩容。

2、 一个表里有多个租户该如何设计表结构

单数据源单数据库单数据表

这种方案是我目前见过的最普遍的设计方案。

该系统只有一个数据库,所有租户共用数据表。在每一个数据表中增加一列租户ID,用以区分租户的数据。增删查改时,一定要带上租户ID,否则就会操作到其他租户的数据。因此,这里的设计一定要重点考虑!

一个重要的点:我们要保证的就是一定不要忘记带上租户ID。一个很好的方案就是通过AOP的方案,隐式的为我们的每一个SQL带上这个租户ID。

我个人是更喜欢使用MyBatis来操作数据库的。它提供了插件的机制,我们可以通过拦截它提供的四大组件的某些对象,某些方法,来操作SQL,动态的为我们的SQL拼接上租户ID字段。

当然,MyBatis-Plus高版本提供了更加方便的拦截器,并且已经将多租户插件放入JAR包,我们只需稍加实现,并将该插件加入到MyBatis的拦截器链中,就可以不用再显式的拼接租户ID字段了,降低了出错的概率。 ———————————————— 原文链接:blog.csdn.net/CBGCampus/a…

3、 查询数据库如何避免查询数据为空,有什么方法可以统一校验参数是否为空

使用mybatis-plus插件拦截器

4、 Mybait-plus拦截器

Mybatis拦截器用到责任链模式+动态代理+反射机制;

通过上面的分析可以知道,所有可能被拦截的处理类都会生成一个代理类,如果有N个拦截器,就会有N个代理,层层生成动态代理是比较耗性能的。而且虽然能指定插件拦截的位置,但这个是在执行方法时利用反射动态判断的,初始化的时候就是简单的把拦截器插入到了所有可以拦截的地方。所以尽量不要编写不必要的拦截器;

附:如果采用SqlSessionFactoryBean的形式配置拦截器不起作用,需要在SqlSessionFactoryBean设置添加即可,如下红框框

在这里插入图片描述

参考: blog.csdn.net/weixin_3949… www.jianshu.com/p/0a72bb1f6… www.cnblogs.com/duanxz/p/37…

5、 spu和sku的概念

一、spu概念

SPU = Standard Product Unit (标准化产品单元)

SPU是商品信息聚合的最小单位,是一组可复用、易检索的标准化信息的集合,该集合描述了一个产品的特性。通俗点讲,属性值、特性相同的商品就可以称为一个SPU。

二、sku概念

SKU=stock keeping unit(库存量单位)

SKU即库存进出计量的单位, 可以是以件、盒、托盘等为单位。

SKU是物理上不可分割的最小存货单元。在使用时要根据不同业态,不同管理模式来处理。在服装、鞋类商品中使用最多最普遍。

三、spu和sku的区别

举例说明:

你想要一台iPhone XS, 店员也会再继续问: 你想要什么iPhone XS? 16G 银色?64G白色?每一台iPhone XS的毛重都是420.00g,产地也都是中国大陆,这两个属性就属于spu属性。 而容量和颜色,这种会影响价格和库存的(比如16G与64G的价格不同,16G银色还有货,金色卖完了)属性就是sku属性。

spu属性:

1、毛重420.00g

2、产地中国大陆

sku属性:

1、容量: 16G, 64G, 128G

2、颜色: 银、白、玫瑰金

11、 商品管理的属性是如何管理的

【第五篇】商城系统-商品属性管理_波波烤鸭的博客-CSDN博客_商品属性管理