1)冷热分离需求
随着时间的推移,订单数据会逐渐增加,虽然对订单数据库进行分库分表,但是考虑用户对已完成的历史订单的操作热度远远低于未完成订单。
为了提高系统的性能我们对订单数据进行冷热分离。
冷数据是指那些很少被访问或者对访问时延迟要求较低的数据,而热数据则是经常被访问、对访问时延迟要求高的数据。
订单的冷热分离是指根据订单的特性和需求,将订单数据划分为冷数据和热数据,以便更有效地管理和优化数据存储、检索和处理的方式。这种分离有助于提高系统的性能和降低存储成本
根据需求,订单完成15日后将不允许对订单进行取消,我们可以将订单完成超过15日的订单归档到历史订单库,其它订单数据在订单数据库。订单数据库存储的是热数据,历史订单数据库存储冷数据。
2)分布式数据库
历史订单(冷数据)存储到哪里呢?
通常通过以下方式存储冷数据
将冷数据从主要的数据库中归档到较为廉价的存储介质,例如使用固态硬盘(SSD)存储热数据,而将冷数据存储在传统磁盘或云存储中,也可以使用低成本的云存储服务。
使用数据库分区或分片技术,将冷数据和热数据存储在不同的物理或逻辑分区。
使用云服务进行存储,比如:阿里云的对象存储OSS,腾讯云对象存储COS,这些都是比较廉价的。
根据本项目的需求,需要提供历史订单的查询接口,并且还需要对历史订单进行一些统计分析处理。
OSS不符合需求,因为OSS只能存储文件、图片、视频等,不能提供类似数据库的查询接口。
所以我们需要选择数据库存储,存储海量数据用关系数据库不合适,关系数据库可伸缩性相对有限,为了解决这个问题我们使用分布式数据库。分布式数据库是指将数据库系统中的数据存储和处理分布在多个计算机节点上,这些节点可以位于不同的物理位置或在同一物理位置上。分布式数据库旨在通过分布数据和查询负载,提高系统的可伸缩性、性能和容错性。
常见的分布式数据库:
Apache Cassandra: 高度可伸缩、分布式、面向列的NoSQL数据库。
MongoDB: 面向文档的NoSQL数据库,支持分布式架构。
HBase: 是一个开源的、分布式的、面向列的NoSQL数据库系统,建立在Hadoop分布式文件系统(HDFS)之上。
还有一些国内常用的分布式数据库:
阿里云 PolarDB:
阿里云的PolarDB是一种支持MySQL和PostgreSQL的分布式关系型数据库服务。它具有高性能、可伸缩性和自动容灾的特性。
腾讯云 TDSQL-C(TiDB):
TDSQL-C是腾讯云推出的一种云原生分布式数据库服务,基于TiDB开源项目,支持水平扩展、强一致性和分布式事务。
如果去选择分布式数据库,通常从OLTP、OLAP、HTAP、NOSQL这几个方面去选择:
OLTP(Online Transaction Processing): OLTP是指在线事务处理系统。
OLAP(Online Analytical Processing): OLAP是指在线分析处理系统。
HTAP(Hybrid Transactional/Analytical Processing):HTAP是OLTP和OLAP的结合,旨在使一个数据库系统能够同时支持事务处理和分析处理。
本项目选择HTAP分布式数据库,TiDB(分布式数据库系统)属于HTAP范畴。TiDB设计为一个支持事务处理(OLTP)和复杂分析查询(OLAP)的分布式数据库系统。TiDB采用分布式架构,支持水平扩展,具有高可用性和强一致性的特性。TiDB支持MySQL协议,使用 MySQL 驱动(MySQL Client)来连接和与 TiDB 进行交。TiDB 开源,开源数据库不仅不影响学习和使用还可以节省成本。
下边列出了TiDB的优势 :
-
分布式架构:
-
TiDB采用分布式架构,可以水平扩展以处理大规模的数据和请求。它将数据分散存储在多个节点上,支持高并发和高吞吐量。
-
-
兼容 MySQL 协议:
-
TiDB 兼容 MySQL 协议,可以直接使用 MySQL 客户端工具和驱动,使得迁移现有的 MySQL 应用程序到 TiDB 变得相对容易。
-
-
水平可伸缩性:
-
TiDB 支持水平扩展,可以轻松地增加节点以提高存储和查询能力,而不需要修改应用程序代码。
-
-
分布式事务支持:
-
TiDB 提供强一致性的分布式事务支持,确保在分布式环境中的数据一致性和可靠性。
-
-
自动负载均衡:
-
TiDB 具有自动负载均衡的功能,能够动态调整数据在集群中的分布,以保持各节点的负载均衡。
-
-
分布式查询优化:
-
TiDB 提供分布式查询优化,可以在多个节点上并行执行查询,提高查询性能。同时,TiDB 优化器支持将查询计划分发到各节点执行。
-
-
实时分析:
-
TiDB 支持实时分析查询,适用于OLAP(在线分析处理)场景,允许在不影响在线事务的情况下执行复杂的分析操作。
-
-
在线扩容和缩容:
-
TiDB 支持在线扩容和缩容,可以根据需要动态调整集群的规模,而不需要停机。
-
-
弹性扩展:
-
TiDB 提供了弹性扩展的能力,可以根据实际需求调整存储引擎,支持多种存储引擎,包括 TiKV、RocksDB 等。
-
-
开源社区支持:
-
TiDB 是一个开源项目,拥有活跃的社区支持,用户可以获取到丰富的文档、社区资源和技术支持。
-
-
云原生:
利用云计算环境的弹性、可伸缩性和分布式特性在云环境中构建、部署、管理和扩展应用程序。
-
TiDB 支持云原生架构,可以轻松部署在云服务提供商(如阿里云、腾讯云、华为云)上,并集成到云服务的生态系统中。
3)冷热分离方案
如何进行冷热分离?
本项目除了将订单完成15日的订单迁移到历史订单数据库,还需要对订单数据进行分析,所以通过Canal+MQ将完成的订单(完成、取消、关闭)迁移到历史订单数据库,在历史订单服务对订单数据进行统计分析,并通过定时任务迁移冷数据。
方案如下:
流程如下:
当订单完成,取消、关闭时将订单信息写入同步表。
通过Canal+MQ将同步表的订单数据同步到历史订单数据库的待迁移表中,具体过程如下:
Canal读取binlog将写入同步表的数据写入MQ。
历史订单服务监听MQ,获得同步表的订单数据。
历史订单服务将订单数据写入待迁移表。
历史订单服务启动定时任务,每天凌晨将昨天0点到昨天24点之间完成15日后的订单信息迁移到历史订单表。
每次迁移完成将迁移完成的历史订单从待迁移表删除。
数据流: