前言
目前打算开停车系统具体开发系统所有具体问题,第一次写博文请大家多多支持!文章基于商业版智慧停车官网:https://yuncitys.com需要商业合作的也可以看看.
业务分析
在开始一个新系统开发前需要对系统的具体业务进行分析,区分核心业务,与其他业务以便更好的进行系统规划和架构选型;
-
核心业务
基于云创智城的智慧停车系统(简称’‘停车系统’'),核心业务有以下几点:
道闸业务
路边停车业务
财务
车主
从车主停车入库到支付车费一套精简完整流程,也是停车系统的主要目的,空闲车位使用问题 -
其他业务
其他业务支撑系统广度用于更好的服务于客户,包含 “巡查管理”,“车位管理”,“设备管理”,"支付中心"等等,其他更具体的可以参考系统白皮书https://yuncitys.com/parking_white_paper
架构选型
一个系统的架构离不开具体业务需求,从核心业务的特点我们得知停车和车主注册数量都会产生大量的数据.
而车主停一次车就会产生2个请求,一次入库,一次出库而这些都是和停车位的数量产生正相关;
一个城市停车位的数量多,范围广,所吸引到停车的人,和停车的次数就多,大概一个车位按时间段划分,24个小时,48个30分钟,按一小时或者半小时收费可以让48个人停车大概,48n级别的指数,当然这是大概的估算实际情况可能更低;
n代表停车位的数量,<48n的指数代表可以一天停车的次数或者吸引到车主注册使用的数量;而车位是根据实际情况是可以扩容的或买或租;
能够扩容的架构目前有集群,分布式,分布式中的微服务,可以根据技术团队的人数和团队熟系的技术路线选择,推荐使用微服务;
-
架构
目前主流的微服务架构有Spring Cloud 系列的框架或者Spring Cloud Alibaba + naocs等技术而云创智城使用的是Spring Cloud Alibaba + naocs还有一些中间件可以根据实际情况去使用 -
前端
适用于集群的单体应用的框架:jsp,html,thymeleaf等
适用于分布式的前后端分离框架: Vue2 全家桶,Element-ui -
数据库
根据上面48n公式可以大致推断核心业务所产生的数据量,核心业务数据作为参考是最优的选择,其他业务单个产生的数据是不会超过核心业务数据的,也不会比它访问的多;
大致可以参考一下db
5000 * 48 * 1年=86,400,000
mysql(单表100万性能最佳)+其他技术比如分表,分库;或者集群
30000 * 48 * 1年=518,400,000
分布式数据库OceanBase等
系统开发前的准备
- 确定硬件设备和软件工具:根据项目需求和开发任务复杂程度选择合适的硬件设备,如服务器、PC等,并安装必要的软件工具,如IDE、数据库客户端等。
- 进行开发环境和配置:根据以上选择进行开发环境和配置,包括代码管理工具、构建工具、自动化测试工具等。
- 进行核心业务表设计,考虑性能优化,扩展性和可维护性.因为核心业务表的变动往往牵一发而动全身,有可能会影响整个系统的业务;
表设计
以下是一些具体的表简略设计,具体业务需求大家可以实际分析
设备表(Device)
CREATE TABLE Device (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(50) NOT NULL,
type VARCHAR(50) NOT NULL,
capacity INT NOT NULL,
location VARCHAR(100) NOT NULL,
status VARCHAR(10) NOT NULL
);
车位表(ParkingSlot)
CREATE TABLE ParkingSlot (
id INT PRIMARY KEY AUTO_INCREMENT,
device_id INT NOT NULL,
slot_number INT NOT NULL,
status VARCHAR(10) NOT NULL,
FOREIGN KEY (device_id) REFERENCES Device(id) ON DELETE CASCADE ON UPDATE CASCADE
);
停车记录表(ParkingRecord)
CREATE TABLE ParkingRecord (
id INT PRIMARY KEY AUTO_INCREMENT,
slot_id INT NOT NULL,
car_number VARCHAR(50) NOT NULL,
check_in_time TIMESTAMP NOT NULL,
check_out_time TIMESTAMP NULL,
FOREIGN KEY (slot_id) REFERENCES ParkingSlot(id) ON DELETE CASCADE ON UPDATE CASCADE
);
用户表(User)
CREATE TABLE User (
id INT PRIMARY KEY AUTO_INCREMENT,
username VARCHAR(50) NOT NULL,
password VARCHAR(100) NOT NULL,
email VARCHAR(100) NOT NULL,
phone_number VARCHAR(20) NOT NULL,
...
);
支付方式表(PaymentMethod):
CREATE TABLE PaymentMethod (
id INT PRIMARY KEY AUTO_INCREMENT,
user_id INT NOT NULL,
type VARCHAR(50) NOT NULL,
details VARCHAR(255) NOT NULL,
FOREIGN KEY (user_id) REFERENCES User(id) ON DELETE CASCADE ON UPDATE CASCADE
);
支付记录表(PaymentRecord):
CREATE TABLE PaymentRecord (
id INT PRIMARY KEY AUTO_INCREMENT,
order_id INT NOT NULL,
payment_method_id INT NOT NULL,
transaction_id VARCHAR(100) NOT NULL,
amount DECIMAL(10, 2) NOT NULL,
payment_date DATE NOT NULL,
status VARCHAR(20) NOT NULL,
FOREIGN KEY (order_id) REFERENCES Order(id) ON DELETE CASCADE ON UPDATE CASCADE,
FOREIGN KEY (payment_method_id) REFERENCES PaymentMethod(id) ON DELETE CASCADE ON UPDATE CASCADE
);
以上是关于MySQL数据库中相关表的设计示例。这些表涵盖了用户信息、支付方式选择、订单信息和支付记录等方面,为处理核心业务相关的数据提供了基本的结构。
当然,这只是一个示例设计,实际的设计可能因业务需求和具体情况而有所不同。在具体实施时,还需要根据实际需求进行进一步的优化和完善。
通过合理的设计和规划,这些表可以帮助实现用户信息的存储、支付方式的多样性选择、订单的生成和管理以及支付记录的跟踪和分析等功能。同时,通过适当的数据约束和外键参照等机制,可以保证数据的一致性和完整性,提高系统的整体性能和可靠性。
希望这个示例设计能对您的实际系统设计提供一些参考和帮助。如有任何疑问或需要进一步的讨论,欢迎随时交流。
结语
在完成这篇博客后,我感到非常满足和充实。这是我对独立设计系统的个人见解和分享,也是我对自我思考和表达能力的锻炼。也是我第一次写一篇系列的文章,下篇系列地址:停车系统系列二(分布式唯一ID)
我希望这篇博客能够给读者带来一些启示和帮助,同时也期待与大家在评论区交流和分享观点。无论您是第一次访问我的博客,还是已经读过我的其他文章,我都非常感谢您抽出宝贵的时间阅读我的分享。
如果您有任何问题或建议,欢迎随时与我联系。我会尽我所能提供帮助。
再次感谢您阅读我的博客,期待与您再次交流!