空间换时间的数据库设计

数据库
数据库设计是数据库中非常重要的工作之一,本文将为大家讲解一种比较新的知识点,即空间转换时间的数据库设计,希望大家能够喜欢。

导读:数据库设计是工作中经常会涉及到的,下文中将为大家带来空间转换时间的详细讲解。大家都知道,我们的系统中很常会用到SMS、Email等的发送,在我们的设计中通常会创建一个Tb_outbox表,当产生数据时,插入到Tb_outbox表,由定时器去读取Tb_outbox的数据进行发送,发送完了再修改Tb_outbox的发送状态。是的,这就是通常的做法,但是当我们的SMS、Email的发送频率和数量足够大的时候,我们的系统就会出现性能、表被锁等问题。那么如何能够解决这些问题呢?

下面的设计的一个思想就是如标题所述:空间换时间。就个人而言,我感觉这个描述更加贴切:对象的职责分离,把Insert、Update、Delete等分离在不同的表中。下面就来看看这个设计图:

 

图:逻辑图

 

Tb_NotSent_buffer:待发送短信缓存表(即时清理).

该表是为了避免应用过多对Tb_NotSent同时操作产生锁表情况。
主要考虑到产生待发短信的逻辑通常会比较复杂,或者长事务。
一次性将已经在buffer表里的短信insert到Tb_NotSent,这次插入没有长事务计算,由一条insert from select完成。
该表并非一定用到,视乎产生待发短信的逻辑的事务复杂度,和量而定。

Tb_NotSent:待发送的短信(会被定时清理)

会将该已经发送的短信的处理结果存储在jms消息队列里。
把这些数据从Tb_NotSent copy到Tb_outbox同时,插一条记录到Tb_Sent.这样作是为了下一步删除Tb_NotSent里已经发送的信息.同时又不因为删除而锁Tb_NotSent表(应用使用)

使用空间换时间的思想,减少对同一张表(Tb_outbox)的过多操作和过程时间的操作,导致锁表出现系统瓶颈。

Tb_outbox:存储历史记录的主表,该表需建立在独立的数据库。

减少备份文件大小,可灵活调整,大大减少备份空间的需求。
减少对主数据库的影响。
Tb_Sent:一个参照表,为删除Tb_NotSent表做基表
已经发送短信(会定时清理),存放已经被网关处理的短信(发送成功或者失败)。
这个表不一定要保存和Tb_NotSent一样多的字段,也许只要两个字段,那就是ID值和状态值。

数据库设计中空间转换时间就为大家介绍这么多,相信大家通过上文的学习,对数据库设计中国空间转换时间有所了解,希望大家都能够从中有所收获。

【编辑推荐】

  1. 数据库设计流程
  2. Oracle查询每个表占用空间大小
  3. 如何在Oracle表中插入系统时间
  4. 详细讲解如何将数据模型转换成数据库设计
责任编辑:迎迎 来源: 博客园
相关推荐

2011-08-16 09:05:21

SQL Server数测试索引空间换时间

2011-08-05 12:44:57

Oracle数据库表空间

2010-07-21 10:27:49

SQL Server

2009-05-14 13:36:11

Oracle表空间优化

2011-04-12 13:44:39

缓存

2010-04-21 11:43:33

Oracle数据库

2017-09-26 13:35:40

Mysql数据库设计树状数据

2011-03-10 11:17:03

数据库设计技巧

2011-04-15 13:28:44

数据库设计

2011-03-10 11:12:59

数据库

2019-10-11 08:19:01

Oracle数据库表空间设计

2023-11-13 16:58:40

数据库系统

2019-10-21 16:54:48

数据库设计SQL

2019-12-26 17:25:22

数据库设计技术

2010-07-21 10:05:29

SQL Server排

2023-02-16 17:44:13

2011-07-18 15:59:17

MySQL数据库

2021-09-27 23:58:55

数据库分层设计

2010-03-24 09:42:12

Oracle数据库

2017-10-20 14:35:38

数据库设计原则
点赞
收藏

51CTO技术栈公众号