0%
这是一片思考的空间 -- arthinking
Spring 重构&代码整洁之道 软件设计 JVM 并发编程 数据结构与算法 分布式 存储 网络 微服务 设计模式
Java技术栈 - 涉及Java技术体系

中小应用关系型数据库设计基本思路

中小应用关系型数据库设计基本思路,个人见解,欢迎指正。

对于数据增长不大的A表,可以设计成一个表

A表

id(int)

content(varchar 5000)

audit_time(datetime)

user_id(int)

1

外面下雨了

2014-08-31 00:10:12

1324

2

这是一个不错的主意

2014-08-31 00:12:12

2014

抽取大字段到另一个表中

对于数据增长比较大的A表,抽取出比较大的content字段,单独放入另一张B表中,从A表中移除该content字段;

B表,把content字段抽取到这个表中,减小A表的大小:

id(int)

a_id(int)

content(varchar 5000)

1

1

外面下雨了

2

2

这是一个不错的主意

对主表进行分表

如果不用根据这张A表进行复杂的排序查询,只需要使用ID进行查询,则可以直接把这张A表进行分表;

对A表分表之后,如果需要进行audit_time字段的排序查询,则可以把该audit_time字段抽取到另外的C表中,使用A该表的主键进行关联,这样按照audit_time字段排序查询的时候,直接从C表查找到a_id,然后根据a_id从A表获取完整的记录;

C表,这个时候对A表进行分表,把所有的A表记录都存放到C表中:

id(int)

a_id(int)

audit_time(datetime)

1

1

2014-08-31 00:10:12

2

2

2014-08-31 00:12:12

给主表建立一些字段的关联表,对关联表进行分表,并使用分表进行查询,加快查询速度

如果A表不适合分表,但是有些需求需要查找user_id字段值为1324的所有记录,则可以把user_id字段放入另一个D表中,对这张D表进行分表(可以对user_id 取模进行分表,如user_id为12,则12%10 = 2 则可以把该记录存入D表的第三张分表中),这样也可以加快根据user_id字段查找记录时的速度了。

D表,直接从D表查找符合user_id值的记录:

id

a_id

user_id

1

1

1324

2

2

2014

另外,可以适当的在分表中增加冗余字段,减少表之间的关联查询,从而提高性能。

以上是几种常见的场景,具体的分表策略还得根据实际的业务逻辑进行设计。

另外,为了减少数据库的压力,必要的时候,添加对象缓存和页面缓存,对于改动或增加比较频繁的数据,则可以考虑使用如redis之类的内存数据库

欢迎关注我的其它发布渠道

订阅IT宅
内功修炼
Java技术栈
Java架构杂谈是IT宅精品文章公众号,欢迎订阅:
📄 网络基础知识:两万字长文50+张趣图带你领悟网络编程的内功心法 📄 HTTP发展史:三万长文50+趣图带你领悟web编程的内功心法 📄 HTTP/1.1:可扩展,可靠性,请求应答,无状态,明文传输 📄 HTTP/1.1报文详解:Method,URI,URL,消息头,消息体,状态行 📄 HTTP常用请求头大揭秘 📄 HTTPS:网络安全攻坚战 📄 HTTP/2:网络安全传输的快车道 📄 HTTP/3:让传输效率再一次起飞 📄 高性能网络编程:图解Socket核心内幕以及五大IO模型 📄 高性能网络编程:三分钟短文快速了解信号驱动式IO 📄 高性能网络编程:彻底弄懂IO复用 - IO处理杀手锏,带您深入了解select,poll,epoll 📄 高性能网络编程:异步IO:新时代的IO处理利器 📄 高性能网络编程:网络编程范式 - 高性能服务器就这么回事 📄 高性能网络编程:性能追击 - 万字长文30+图揭秘8大主流服务器程序线程模型
📄 Java内存模型:如果有人给你撕逼Java内存模型,就把这些问题甩给他 📄 一文带你彻底理解同步和锁的本质(干货) 📄 AQS与并发包中锁的通用实现 📄 ReentrantLock介绍与使用 📄 ReentrantReadWriteLock介绍与使用 📄 ReentrantLock的Condition原理解析 📄 如何优雅的中断线程 📄 如何优雅的挂起线程 📄 图解几个好玩的并发辅助工具类 📄 图解BlockingQueue阻塞队列
📄 消息队列那么多,为什么建议深入了解下RabbitMQ? 📄 高并发异步解耦利器:RocketMQ究竟强在哪里? 📄 Kafka必知必会18问:30+图带您看透Kafka
📄 洞悉MySQL底层架构:游走在缓冲与磁盘之间 📄 SQL运行内幕:从执行原理看调优的本质 📄 洞悉Redis技术内幕:缓存,数据结构,并发,集群与算法