1.创作目的

主要是进行一个平时开发的思路记录,便于后期进行查询。平时都在写代码,做crud,很少有时间静下来写具体的设计思路及想法,暂且把想到的都写下来,算是一种经验积累吧。

2.设计思路

整个平台将基于多账户、多模块的设计,暂时将账户分为3种类型:企业级账户、小微企业账户、普通账户,不同的账户拥有不同的扩展权限。在数据库方面根据不同的账户进行数据存储,企业级账户使用独享数据库、小微企业账户分表存储、普通账户共享数据库。性能无瓶颈可扩展:因为合理的进行了分库,所以在性能上并没有什么瓶颈,并且数据库可以扔到不同的服务器上。暂时不需要往大数据上靠,因为没有那么多数据存,也不需要那么多数据,基本业务的数据用上10年也不会很多。

2.1.数据库设计

数据库分为基础库和业务库两个,整个平台考虑到云部署及独立部署2个方面,所以在设计上也是基于2种情况进行不同的划分,还需要考虑到后期的数据迁移等功能。

2.1.1云部署模式

云部署模式面向所有的用户,所以可根据用户类型进行数据库设计,默认云部署模式下的账户都是基于分表或共享表的形式进行数据存储。

(1)基础信息库

该数据库主要存租户、权限、日志、配置信息等公共信息,因为基础信息库是共享的,所以使用redis进行数据缓存以提高高频访问,可将redis与mysql进行分开部署,这样可极大提高系统的响应速度。

(2)业务库

所有的分库分表都是基于业务库进行的,业务库可根据实际业务及用户量进行多个服务器的部署,通过租户的信息拿到该租户的数据库访问链接及唯一id,实现多库多表跨服务器的数据访问。数据库的所有主键id均采用guid的形式进行生成,确保每个id的唯一性;所有的业务表根据功能业务的不同进行明显区分,保证各个业务之间低耦合,不进行强制关联,建立中间关系表来表达业务之间的联系。

(3)数据库设计

基础库中主要是以租户为主账户信息,租户内可建立独享的二级账户、组织架构、功能权限等,每个租户在创建的时候会自动分配相应的数据库链接及表权限,具体业务模块可以进行动态的数据库结构创建以节省数据库开销。目前的思路是直接通过codefirst的形式进行动态的数据库逻辑建立,并且可以在平台上直接进行二次开发然后发布自己的业务模块,发布之后,其他租户通过购买模块服务进行业务的共享,以业务领域模型来驱动平台。

(4)技术选型

采用.net 6 来进行整个平台的架构,目前的思路还是倾向于以微服务的形式进行,这样便于快速扩展及迭代产品,后期肯定在维护上要遇到很多问题,都是摸着石头过河,权当是摸索学习,万一趟出条大路也说不定。