当前位置: 首页 > 知识库问答 >
问题:

如何快速安全地调用rest api 600,000次并插入600,000*n

邢飞鸿
2023-03-14

我的待办事项清单

>

  • rest api获取请求约600000次--600000=2009~now*condition1*condition2*condition3*condition4

    处理json数据=600,000*n(使{平面json}...从{[json数组]})

    在mariaDB中插入数据(600000*n)

    我使用4个嵌套循环(条件数)创建了一个请求url,并在一个开放连接上收到了响应数据。

    但是,一些数据导致读取超时(con.setReadTimeout(1000*60)--1min)。

    我的方法一天内没有收到所有数据。

    而insert甚至都没试过。

    我想我应该一次多线程完成待办事项列表,对吗?

    请告知如何快速安全地调用rest api并处理数据和插入。

    下面是我的代码。

        ExecutorService executor = Executors.newWorkStealingPool();
        List<Callable<String>> callables = null;
         for (String url : urlList) { //600,000 count
                    callables.add(getRestapiData(url)); //call rest api 
                }
    
                try {
                    executor.invokeAll(callables)
                            .stream()
                            .map(future -> {
                                try {
                                    return future.get();
                                } catch (Exception e) {
                                    throw new IllegalStateException(e);
                                }
                            }).map(DataSummaryServiceLogic::getSettedKamisApi1DataList). //process ->return (600,000 * list.size) list
    flatMap(Collection::stream). 
    forEach(api1 -> provider.insertInitKamisApi1(api1)); //insertData
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
    
  • 共有1个答案

    卞琨
    2023-03-14

    @基于您共享的有限信息,您需要进行适当的异常处理。如果一个请求超时超过600k,则不应导致其他请求失败。您可以在日志/重新处理表等中捕获由于任何原因失败的请求,然后重试。

    在实现多线程时,你可以使用一个线程池,并向他们提交单独的请求,以使其更快,因为你有足够的内核来执行这些额外的线程。

     类似资料:
    • 问题内容: 假设您有一个用于处理某种XML文件或配置文件的库。该库将整个文件读入内存,并提供用于编辑内容的方法。处理完内容后,可以调用将内容保存回文件。问题是如何以安全的方式执行此操作。 覆盖现有文件(开始写入原始文件)显然是不安全的。如果该方法在完成之前失败,则最终将写入一半的文件,并且您丢失了数据。 更好的选择是在某个位置写入 临时 文件,方法完成后, 将 临时文件 复制 到原始文件。 现在,

    • 问题内容: 我找不到任何资源,我一直在尝试各种方法,但是没有任何效果。 根据Apple的文档,您对NSDecimalNumber进行如下舍入: 它接受一个NSDecimalNumberBehavior,我不确定如何操作,因为(1)无法将其初始化为变量并更改了属性,并且(2)根据文档所述的roundingMode()方法没有任何参数,但Xcode会为“ self”填充参数空间。 我对此完全迷失了。回

    • Vanilla 的 调试 除了查看 nginx 错误日志辅助开发外,为了方便 Vanilla 项目的开发和调试,Vanilla 提供了诸如 print_r 之类的对象输出方法,以及详细友好的页面报错输出,你不需要到服务器日志去查看,就能所见即所得的开发调试代码. sprint_r,print_r,lprint_r,err_log sprint_r 将 LUA 对象等格式化为易读的字符串返回 pri

    • 从前面分析可以看出,某个vm的安全组相关规则的chain的名字,跟vm的id的前9个字符有关。 因此,要快速查找qbr-XXX上相关的iptables规则,可以用iptables -S列出(默认是filter表)所有链上的规则,其中含有id的链即为虚拟机相关的安全组规则。其中--physdev-in表示即将进入某个网桥的端口,--physdev-out表示即将从某个网桥端口发出。 #iptable

    • 问题内容: 我如何获得本地IpAddress? 当我使用该功能时,我将无法再继续使用。我不能使用该功能。 是否有其他方法可以执行此操作,或者我是否以错误的方式进行操作? 问题答案: 在讨论中发现,OP需要Mac上的接口地址,而不是我最初想的那样在iOS设备上。问题中引用的代码将检查接口名称“en0”,它是iPhone上的WiFi接口。在Mac上,改为检查任何“正在运行”的界面更有意义。因此,我重写