首页天道酬勤怎么知道自己的大数据好不好(什么是数据)

怎么知道自己的大数据好不好(什么是数据)

admin 12-02 11:05 237次浏览

欢迎来到头条:大气大山里的聊天技术。

原创技术分享,知识汇编

目录

前言场景优化数据采集、拆分数据为什么慢?商定的碎片高度可用。总结

前言

最近发现,员工在处理业务时遇到大量数据时,速度会很慢,经常会杀死jvm。小伙伴们也给出了他们应得的反馈。数据量太大,所以是这样的。

记得毕业的时候有一次面试华为,【如何在网上传输几个G文件】?年轻的时候没接。我们来分析一下如何处理大量的数据。

00-1010现在有100万条数据等待处理。我们如何处理?并且可以抽象成公共方法进行处理吗?我们在这里讨论的是数据已经准备好了,可以理解为已经存储在数据库中。

我们来分析一下正常的数据处理流程:

1.获取要处理的数据

2.处理数据

3.返回处理结果和状态:成功或失败。

4.报告处理结果。

00-1010数据处理,一般的方法,先获取数据,再处理数据,等待处理结果,然后上报。

数据采集慢如果有100万个数据,那么在数据采集的逻辑中,我们要采集100万次。如果数据存储在数据库中,我们必须与数据库交互100万次。这肯定会很慢。

数据处理速度慢如果处理一条数据需要100毫秒,那么处理一百万条数据需要10万秒,也就是单独处理数据需要27.7小时。

慢慢报告数据。处理完一条数据后,应该报告结果。如果处理一条数据,需要100毫秒上报业务系统,100万条需要27.7小时,非常慢。

这就是为什么我们的小伙伴按照正常的处理流程处理大量数据会很慢的原因。根本原因是业务处理是同步进行的。

怎么解决?核心思想是拆分模块,并行处理。

还记得华为面试问题“如何在网上传输几个G文件”吗?想想一些下载软件,如何下载大文件?一个小伙伴应该马上说,多线程是用来把一个大文件拆分成n个小文件的,一个线程可以单独处理一个小文件。

场景

获取数据时,我们通常一次处理一条数据,每次从数据库中获取。然后我们可以优化它:

每次批量获取数据时,不要获取一条数据进行处理,比如每次去数据库获取1000条数据到本地jvm缓存,然后在本地循环中处理数据。

处理完1000块后,去数据库取1000块数据。这批数据采集大大优化了与数据库的交互次数,增加了1000倍。

看看能否再优化一下。我们上面的批处理方案是在单个jvm进程中处理的,那么可以有多个进程或服务器来处理数据吗?

为什么会很慢

上图是用多台服务器处理数据,提高了数据处理的能力,实际上是把数据拆分成多台处理服务器。但是,引入这个方案会遇到一个问题,那就是如何避免重复数据处理?

出现这个问题是因为我们不知道当我们得到数据时,数据是否已经被带走进行处理。当然,我们可以给数据增加一个处理状态:【未处理,处理中,处理成功,处理失败】。获取数据时选择【未处理】数据。获取数据后,将数据的处理状态设置为[正在处理]。

上面的业务逻辑没有问题,但是如果多台服务器同时去拿,就会有竞争,可能会得到重复的数据。

此时可以引入分布式锁,以避免同时获取数据。如何使用锁来防止缓存崩溃?重构的重要性。小伙伴们不了解分布式锁,可以看看之前的文章。

我们再想想,是否可以优化,因为分布式锁的使用也会影响性能。当多个服务器同时获取时,它们仍然需要等待。虽然他们大部分时间不能同时完成一批数据,但还是有可能的。

00-1010:我们可以采用约定的切片方式。比如服务器A只处理ID为[100,000 ~ 300,000]的数据,服务器B只处理ID为[300,000 ~ 600,000]的数据,服务器C只处理ID为[600,000 ~ 100万]的数据。

也就是说,在程序获取数据的时候,我们已经规划了分片的规则,让不同的服务器可以处理不同的分片数据,这样就不会出现多台服务器之间的数据竞争。因为他们处理的是不同的数据。

如果觉得服务器不够,可以增加更多的服务器,可以在数据库中设置分区规则,以前怎么从来不迁移数据,避开热点?根据服务器索引分配数据量(泄露秘密)的原理类似。

00-1010我们发现了上面的设计,一旦一个碎片处理服务器挂机

了,那这些分片的数据就没法处理了。小伙伴有没有解决方案?其实很简单,就是在分片的基础上面,加上集群化处理。

上图中,增加了服务器A-1,A-2,同时负责【1~30万】的数据处理任务,一旦服务器A挂了,A-1,A-2照样可以处理数据。

当然一样会遇到数据重复处理的问题,这个时候就可以采用分布锁方案,进行小范围加锁。

总结

这里大气的大山介绍了如何把大数据量进行拆分,划分成小份,同步进行处理,这样就可以极大提升处理效率。

当然这里介绍的是处理大数据量第一步,如何设计获取数据?下面大气的大山还会介绍处理数据的优化、以及数据上报等,不过相对获取数据的方案,处理数据以及上报数据结果,相对比较简单,小伙伴们先自行思考一下。


-End-

如有收获,请帮忙转发,您的鼓励是作者最大的动力,谢谢!

10几年的经验实战分享

相关微服务,分布式,高并发,高可用,企业实战,干货等原创文章正在路上

欢迎关注头条号:大气的大山聊技术

精品原创技术分享,知识的组装工

推荐阅读

1、分享大厂分布式唯一ID设计方案,快来围观

2、你想了解一线大厂的分布式唯一ID生成方案吗?

3、如何永不迁移数据和避免热点? 根据服务器指标分配数据量(揭秘篇)

4、你知道怎么分库分表吗?如何做到永不迁移数据和避免热点吗?

5、你了解大型网站的页面静态化吗?

6、你知道如何更新缓存吗?如何保证缓存和数据库双写一致性?

7、你知道怎么解决DB读写分离,导致数据不一致问题吗?

8、DB读写分离情况下,如何解决缓存和数据库不一致性问题?

9、你真的知道怎么使用缓存吗?

10、如何利用锁,防止缓存击穿?重构思想的重要性

11、海量订单产生的业务高峰期,如何避免消息的重复消费?

12、你知道如何保障生产端100%消息投递成功吗?

云分发网络有什么用处?(附源码)计算机毕业设计互联网教学平台
大数据处理的方法不包括(大数据分类方法) 传统教育行业的痛点(教育培训行业痛点解决方案)
相关内容