浅谈关系型数据库主键设置策略

本文涉及的产品
云原生数据库 PolarDB MySQL 版,通用型 2核4GB 50GB
云原生数据库 PolarDB PostgreSQL 版,标准版 2核4GB 50GB
简介: 几乎大多数的应用都会使用关系型数据库进行数据存储,而主键一定是标配。那么,在您的应用中,通常使用什么方案来满足业务扩张呢?下面简单介绍普遍做法以及改进之道

   几乎大多数的应用都会使用关系型数据库进行数据存储,而主键一定是标配。那么,在您的应用中,通常使用什么方案来满足业务扩张呢?下面简单介绍普遍做法以及改进之道。

   第一层:业务布局之初。众所周知,企业业务刚开始,需要进行快速试错,而彼时的数据量不会太多,而且暂时不会存在瓶颈,主要是快速打开市场,提供可运行的软件系统,此时不会太多的去关注存储。(言外之意:创业之初会有技术欠债,随着企业发展壮大,会比较痛)。

   这时,数据一般采用自增型主键,比如mysql或者sqlserver、postgresql的自增型主键,oracle的序列等都可以很好的满足初期技术架构。当然,如果想用UUID等唯一值做主键也是可以的。不过需要注意的是,使用uuid的可读性会比较差,同时使用字符串做主键,其索引比较大,检索效率稍差。推荐用long类型主键。第一层数据库存储如下图所示:


image.png

第二层:快速扩张期。业务经过几轮迭代,数据量也在极度飞升,单机较难满足业务增长,数据库连接常常第一时间产生瓶颈。因此为了提升数据的存储速度,还有快速扩张,技术会选择分库分表。彼时第一阶段会根据业务内容进行垂直分库,比如电商中常见的按照用户、订单、交易、评论等进行拆分。这时的架构也还是当个数据库,只是按照具体业务内容拆分,其主键依然可以采用第一层次的方案。


image.png

而随着交易、订单的进一步增长,单库也无法满足性能要求。只能从水平方向上拆分,简单的评估方案是,未来数据存储需要按一亿来计算,单表支撑1千万条数据,最起码需要10张表进行存储。此时会将单库扩张成多张表。此时未考虑到数据库之间的主键不能同步,并同时兼容数据查询高效性。其主键通常会采用分布式ID生成策略,经典有的雪花算法等。此时,单库的自动生成已不再满足业务要求,而uuid等字符型主键因为性能瓶颈也不适合。此时的数据存储架构如下:


image.png

第三层:未来扩展期。通过良好的分库分表可以友好的解决存储问题,但是使用这种方案对于数据库的前移工作量比较大。如果是比较新的应用,可以采用newsql的方式解决这种方式,业界比较常见的有TiDB,这种数据存储模式避免了分库分表的一些坑,对于上层应用来说就是单体的存储。业务进行到这个地步,主键推荐采用long类型的主键生成器,避免采用字符型主键。


综上所述,文章简单说明了应用迭代中,主键的一些选型推荐及选择依据。朋友们目前处于什么阶段,当前阶段你们的主键采用什么方式进行生成,欢迎交流。

相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
目录
相关文章
|
2月前
|
存储 缓存 监控
数据库优化技术:提升性能与效率的关键策略
【10月更文挑战第15天】数据库优化技术:提升性能与效率的关键策略
69 8
|
18天前
|
SQL 缓存 监控
大厂面试高频:4 大性能优化策略(数据库、SQL、JVM等)
本文详细解析了数据库、缓存、异步处理和Web性能优化四大策略,系统性能优化必知必备,大厂面试高频。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
大厂面试高频:4 大性能优化策略(数据库、SQL、JVM等)
|
19天前
|
存储 NoSQL 分布式数据库
微服务架构下的数据库设计与优化策略####
本文深入探讨了在微服务架构下,如何进行高效的数据库设计与优化,以确保系统的可扩展性、低延迟与高并发处理能力。不同于传统单一数据库模式,微服务架构要求更细粒度的服务划分,这对数据库设计提出了新的挑战。本文将从数据库分片、复制、事务管理及性能调优等方面阐述最佳实践,旨在为开发者提供一套系统性的解决方案框架。 ####
|
20天前
|
监控 关系型数据库 MySQL
Linux环境下MySQL数据库自动定时备份策略
在Linux环境下,MySQL数据库的自动定时备份是确保数据安全和可靠性的重要措施。通过设置定时任务,我们可以每天自动执行数据库备份,从而减少人为错误和提高数据恢复的效率。本文将详细介绍如何在Linux下实现MySQL数据库的自动定时备份。
32 3
|
22天前
|
消息中间件 数据库 云计算
微服务架构下的数据库事务管理策略####
在微服务架构中,传统的单体应用被拆分为多个独立的服务单元,每个服务维护自己的数据库实例。这种设计提高了系统的可扩展性和灵活性,但同时也带来了分布式环境下事务管理的复杂性。本文探讨了微服务架构下数据库事务的挑战,并深入分析了几种主流的事务管理策略,包括Saga模式、两阶段提交(2PC)以及基于消息的最终一致性方案,旨在为开发者提供一套适应不同业务场景的事务处理框架。 ####
|
1月前
|
存储 Oracle 关系型数据库
Oracle数据库优化策略
【10月更文挑战第25天】Oracle数据库优化策略
22 5
|
28天前
|
监控 关系型数据库 MySQL
数据库优化:MySQL索引策略与查询性能调优实战
【10月更文挑战第27天】本文深入探讨了MySQL的索引策略和查询性能调优技巧。通过介绍B-Tree索引、哈希索引和全文索引等不同类型,以及如何创建和维护索引,结合实战案例分析查询执行计划,帮助读者掌握提升查询性能的方法。定期优化索引和调整查询语句是提高数据库性能的关键。
155 1
|
1月前
|
关系型数据库 MySQL Linux
Linux系统如何设置自启动服务在MySQL数据库启动后执行?
【10月更文挑战第25天】Linux系统如何设置自启动服务在MySQL数据库启动后执行?
74 3
|
1月前
|
关系型数据库 MySQL Linux
在 CentOS 7 中通过编译源码方式安装 MySQL 数据库的详细步骤,包括准备工作、下载源码、编译安装、配置 MySQL 服务、登录设置等。
本文介绍了在 CentOS 7 中通过编译源码方式安装 MySQL 数据库的详细步骤,包括准备工作、下载源码、编译安装、配置 MySQL 服务、登录设置等。同时,文章还对比了编译源码安装与使用 RPM 包安装的优缺点,帮助读者根据需求选择最合适的方法。通过具体案例,展示了编译源码安装的灵活性和定制性。
87 2
|
2月前
|
存储 定位技术 数据库
介绍一下数据库的备份和恢复策略
【10月更文挑战第21】介绍一下数据库的备份和恢复策略