后台服务中,数据库端设计建议

news/2024/7/9 20:34:54 标签: 数据库, postgresql, database

数据库中,一般来说我们在操作时,一般操作如下几个对象:

一、数据库(database)

二、模式(mysql中没有schema的概念,在其他的数据库中有schema,尤其是pg库中)

三、表(table)

四、字段(column)

五、字段类型(column_type)

六、字段长度(column_length)

七、是否为空

八、主键

九、外键

对于数据维护来说,关于数据库我们考虑这些对象如何操作就可以了。但是数据库在实际的使用过程中,只考虑这些是不够的。以当前遇到的业务场景来看,我们更多时候遇到的一个比较难搞定的事情是随着服务平台的运行,数据会越来越大,我们的一些查询操作就会变慢,这个时侯就会带来许多的问题,如一些看板,即使是常规的服务取数据也会变得很慢。类似于看板等业务,我们一般都会是以时间作为参数,进行where条件取值,在一般的数据库中,当数据量达到500w以上时,查询性能就会下降很多,而且对于许多对于效率有要求的业务系统来讲,是无法接受的。所以在设计的时候,建议先考虑一下这个隐患。

目前来说,简单一点的方案就是分表,把数据分为冷数据和热数据,如看板,一般显示一段时间的指标就可以了,这个时候我们就可以把一些历史数据存储到另外的一张表中,需要计算的表和需要被查询的表,我们尽量去保证其数据量不要超过某一值。这个就需要对表定期做调度处理。但是总有些时候,我们要对一些表的历史数据做分析,所以对于历史数据,从数据服务来讲,我们更多的时候,不做查询,只做存储,当数据量很大的时候,我们可能也会需要去选择按年、按季度分表存储,所以类似于这些表,我们要对其做生命周期的设置,并定期把历史数据进行迁移。这样才能保证需要进行查询的数据库中的查询效率。

如果在系统开始设计的时候未考虑到这一点,在实际操作的过程中,却已经发生了,建议先考虑一下业务需求,然后再考虑一下操作方案,不要上来就操作。对于我们来讲,我们已经知道了是由于表内的数据量过大,而影响到了其运行效率,所以我们第一想法或者说最合理的方案就是减少表内数据量。这个时候,我们需要考虑一点,带条件的删除,其运行速度也没有很快,所以如果时间不允许的话,几个小时的删除数据时间会带来更多的问题,甚至会出现锁表现象,然后再去解决一系列引发的问题。目前来看最快的方案其实是直接新建一张表,然后对表名称进行处理。将原表的名字进行更改,新建一张空白表,这样历史数据有了,新表也可以接收数据写入。如果无法接受在更新表名称时系统所带来的问题,那第问题就会比较麻烦了。如果有时间可以测一下的,当数据量很大的时候,但凡带条件的操作,都会需要很久才能返回结果,因为需要扫描全表。

其实还是有其他的方案,但是感觉还是一样的,就像阿里的Odps数据库,虽然表有分区,但是当分区的数量达到某一级别时,查找分区也会需要较多的时候。再换一个比喻就是我们现在是对数据分表进行查询,执行sql语句的时候,先找表再从表内找数据,但是假如我们的数据库中有很多表呢,先找到表就要花费较多的时间,当然,一般的数据库中有对表的数量进行限制,而我们在这里也只是想要做个类比。

其实上边说了许多,无法就讲了一个点,当数据库中数据量越来越大,我们应该采取什么样的方式进行解决?


http://www.niftyadmin.cn/n/810966.html

相关文章

找工作的感悟

这段时间忙着找工作,应聘的大都是项目经理或者SA的职务,面试的时候老是英语不过关。 要疯狂学英语。 告诫所有的在上海的朋友一定要有很好的口语,进外企的必备。 转载于:https://www.cnblogs.com/yangfada/archive/2005/12/10/294476.html

取最大值_呆哥数学每日一题 ——求多元式子最大值

如果想要获取往期每日一题电子版,可以加我微信:daigemath166,备注:知乎 每日一题呆哥解析:这是一道求多元式子最大值的问题今天我们来用统一变量法试试这道题既然要统一变量,那么我们就需要找出其中一个关于…

python中进程间通信

业务场景:在当前遇到的业务场景中,我们需要启一个间隔任务,这个间隔任务跑一个算法,然后把算法的结果进行一些处理,并入库。任务目前间隔是一小时,算法运行时间要50多分钟,留给结果处理的时间并…

python中进程间通信,设置状态量控制另一个进程

业务场景:在当前遇到的业务场景中,我们需要启一个间隔任务,这个间隔任务跑一个算法,然后把算法的结果进行一些处理,并入库。任务目前间隔是一小时,算法运行时间要50多分钟,留给结果处理的时间并…

如何利用python在一个文档里xie'ru_如何用python在Windows系统下,生成UNIX格式文件...

满意答案woailunwen2016.12.14采纳率:57% 等级:10已帮助:767人平时测试工作中,少不了制造测试数据。最近一个项目,我就需要制造一批可在UNIX下正确读取的文件。为确保这批文件能从FTP下载成功,开发叮嘱我…

python中进程间通信方式总结

一、管道 二、消息队列 三、共享内存 一、python中进程间通过管道的方式进行通信。创建一个管道,在进程的一端发送消息,在进程的另一端接收消息,通过这个内置的方法实现通信。一端发出消息,另一端接收消息。写法也比较简单&…

android导入relinker_Android加载SO库UnsatisfiedLinkError错误的原因及解决方案

Android 应用开发者应该对 UnsatisfiedLinkError 这种类型的错误比较熟悉了,这个问题一直困扰着广大的开发者,那么有没有想过有可能你什么都没做错,也会出现这个问题呢?我们在 Android 应用开发测试过程中曾经碰到过这样的案例&am…

机器学习中学习定义

赫尔伯特西蒙曾对学习给出以下定义: 如果一个系统能够通过执行某个过程改进它的性能,这就是学习。 按照这一观点,统计学习就是计算机系统通过运用数据及统计方法提高系统性能的机器学习。现在,当人们提及机器学习时,…