【发布时间】:2015-10-02 10:05:12
【问题描述】:
所以我了解到,为 SQL 查询创建进度条并不是一件容易的事。因此,我尝试提出一种替代解决方案来指示何时完成任务。我想我可以计算在数据库中执行一个查询需要多长时间,然后根据必须执行的查询数量使用该信息创建一个估计值,然后根据该信息创建一个进度条。我知道这不是一个 100% 可靠的解决方案,因为如果出现问题,它仍然会显示进度条,但它至少会给用户一些指示何时完成工作,而不仅仅是一个加载微调器。
这个问题有更好的解决方案吗?
编辑回答一些问题
需要时间的是更新功能。我在数据库中可能有 15.000 个输入,我必须通过 API 更新所有 15.000 个。所以首先我必须提取所有这些的 id 并将它们与 API 一起使用以获取更新的信息,然后我必须使用更新的信息执行所有 15.000 个查询。这一切都需要时间。我怀疑它可以很快完成。使用包含 15.000 个查询的数据库,我花了大约 2 个小时。我不相信 2 小时内没有指示何时完成的微调器是可行的。我需要某种估计。
请注意,很少会更新数据库。就像用户可能每周更新一次数据库一样。
【问题讨论】:
-
我想你已经看过这个stackoverflow.com/a/617271/2042240
-
你自己说的 - 这不是一个可靠的解决方案。让用户知道任务正在执行并简单地表明它正在进行中不是更好吗?进度条只会让用户感到困惑,而且要让它正常工作需要大量的工作。您甚至无法估计查询可能需要多长时间。我只需要创建一个视觉通知程序,表明某事已完成,而无需锁定整个 UI。
-
有更好的解决方案吗?好吧,如果我发现自己在考虑 SQL 查询的进度条,我会从优化我的查询开始。显然,他们目前的速度太慢了。使用
EXPLAIN …找出瓶颈所在。 -
feeela 和 Mjh。我已经用你的问题的答案更新了问题
-
15 000 个查询并不多,它可以改进,可能是从拉取和更新数据方面(但是,没有关于这部分的信息,所以我们不能建议)。你无法估计需要多长时间——这根本不可能,而且总是不准确——人们会为此烦恼。您可以将任务拆分为块。如果您有 15 000 条记录,则以 150 条为一组进行处理。每 150 条已处理 = 1%。每次处理 150 时,发回有关更新的信息并推进进度条。
标签: javascript sql progress