欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

关于大数据量,数据传输和存储问题

程序员文章站 2022-05-12 17:40:15
...

场景一

条件:

数据库有表A,里面有100W条数据。

操作

把表里面的数据全部取出来,进行处理

问题

  1. 能不能一次全部取出来?既通过select 字段1,字段2 from A来取出数据?
    (除了防止取出数据取出太多导致内存溢出,还有什么需要考虑的吗?)
  2. 这里需要确定每次需要取出来的数据的个数,需要考虑到哪些因素?

场景二

条件:

A服务有一批数据,需要调用B服务的接口来获取详细信息.B服务提供的是一个批量的接口

操作

A服务通过RPC调用B服务

问题:

  1. 这里的一批数据能不能通过B服务的批量接口,通过一次RPC全部取过来(如果不能。主要担心的是什么?)
  2. 这里需要确定每次查询数据的个数,需要考虑到哪些因素?

回复内容:

场景一

条件:

数据库有表A,里面有100W条数据。

操作

把表里面的数据全部取出来,进行处理

问题

  1. 能不能一次全部取出来?既通过select 字段1,字段2 from A来取出数据?
    (除了防止取出数据取出太多导致内存溢出,还有什么需要考虑的吗?)
  2. 这里需要确定每次需要取出来的数据的个数,需要考虑到哪些因素?

场景二

条件:

A服务有一批数据,需要调用B服务的接口来获取详细信息.B服务提供的是一个批量的接口

操作

A服务通过RPC调用B服务

问题:

  1. 这里的一批数据能不能通过B服务的批量接口,通过一次RPC全部取过来(如果不能。主要担心的是什么?)
  2. 这里需要确定每次查询数据的个数,需要考虑到哪些因素?

问题1
1. 可以先全部取出来,看看取出的数据有多大,如果只点几M的内存,一次性取出处理,应该没啥问题
2. 如果分批取,注意排序,防止分页取出相同的数据

问题2:
1.看数据量,如果并不大,就一次调用处理掉就好了
2.先去做吧,是问题总归会暴露出来的,从你简单的描述看,不知道有啥问题。

2个场景先单纯的说一下


场景一:

1.能不能一次全部取出来?既通过select 字段1,字段2 from A来取出数据?
(除了防止取出数据取出太多导致内存溢出,还有什么需要考虑的吗?)
2.这里需要确定每次需要取出来的数据的个数,需要考虑到哪些因素?

第一,你括弧中写的就是最大的问题。
第二,不考虑第一里面的括弧,这第二个问题最需要考虑。

你的需求是怎样的?有没有时间的限定?全拿一起处理也许会很慢,要不要分批分线程处理?当然全拿还要考虑db查询的速度和数据的准确性,100W如果字段不多没有大字段类型(text,blob等)应该还好。


场景二:

1.这里的一批数据能不能通过B服务的批量接口,通过一次RPC全部取过来(如果不能。主要担心的是什么?)
2.这里需要确定每次查询数据的个数,需要考虑到哪些因素?

第一,这取决于B接口是怎么设计的,如果你想问的是能不能做到,答案是可以,主要担心的就是别给它太多了,它查的慢了?返回的太大了?
第二,见下


2个场景连起来说一下吧。

其实你的问题还是性能,100W的数据处理要分批,但不知道怎样做是最好的,我建议你先把这个处理的环境搭起来之后带入数据自己测一下,这方面的问题很复杂不是一两句能说清楚的。

根据测试的结果自己来调节处理的速度和程序的性能,性能里面包含了实现,实现的方式也有很多种的,比如上面我提到的多线程处理,这还要看你查询的数据是否能使用分批的去做。