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、颜色: 银、白、玫瑰金