从 elasticsearch 下载 300,000+ 行作为.csv文件



你好,我在nodejs中有一个网站,在Elasticsearch中有一个数据库。索引"bigData*"有 366,844 行,每行有 25 个项目,每个项目都有一个不同的字符串,大小不同,最大约为 100 个字符。我正在将此索引查询到我在页面上显示的数据表中,我使用滚动逐渐将元素加载到表中并将其显示在页面上。数据表有一个"全部下载"选项,但它只会下载页面上加载的内容。我正在尝试实现一个真正的"全部下载",它将获取所有 366,844 行,将其编译成一个文件 (csv(,然后从网页下载。

我尝试使用滚动,就像它如何用于加载数据一样,重复调用我的数据库 10,000 行。 每次需要 30 秒,所以总共 20 分钟。

我知道这样的事情可能需要一些时间,我并不期待立竿见影的解决方案。 但我的方法也使Chrome非常滞后和缓慢,甚至一度几乎崩溃。有人建议下载这么多数据吗?甚至可能是我的项目的 npm 包或库,可以在后台准备好下载。

谢谢

这里有几件事:

  1. 当显示这么多行时,你可能希望使用虚拟滚动,它将DOM元素(<tr><td>,...(的数量保持在合理的水平,并防止滚动速度减慢和卡顿。您使用的是vanillaJS还是某些框架?那里有一大堆虚拟滚动库。
  2. 如果 10,000 行需要 30 秒,请以较小的批次 (~200-500( 进行查询。当用户向下滚动时,另一个批处理查询已经解析并可呈现。
  3. 听起来您总是想下载所有 366,844 行 - 没有应用过滤器。如果是这种情况,除了上述内容之外,我会以合理的时间间隔进行 S3 存储桶 csv"转储"(可能是每个备份覆盖的相同文件(,并在<a href="..." target="_blank" >中直接链接表格上方的最新文件。这样,您的网站就可以保持整洁,并且客户端可以在自己方便的时候下载CSV。

最新更新