首页 > 解决方案 > Node-js:处理多个文件与使用行偏移处理大文件

问题描述

我正在从受给定值限制的 NoSQL 数据库中检索大量数据(为简单起见,假设为 2 行)并保存到文件中,以便以后可以正确处理这些数据。

该数据库以行组的形式返回每个表结果。例如,如果我的数据有 3 个组并且我使用了限制 2,我会在第一个查询中得到这个结果。

// Group 1
2020-03-09,A,1
2020-03-09,B,6
// Group 2
2020-03-09,A,2
2020-03-10,A,3
// Group 3
2020-03-10,A,4
2020-03-11,A,5

虽然我通过使用限制 + 偏移量不断从数据库中获取数据,但我将编写一个临时文件,其中包含组之间的这些跳转,直到它最终读取所有数据。请注意,日期在组之间排序,同一组可能在不同的行中具有相同的日期。

// Group 1 (lines 1-2)
// Group 2 (lines 3-4)
// Group 3 (lines 5-6)
// Group 1 (lines 7-8)
// Group 2 (lines 9-10)
// Group 3 (lines 11-12)

对于解析阶段,我想按顺序编写一个以日期为主键的最终处理文件,格式如下:

date, group1_A, group1_B, group2_A, group3_A
2020-03-09, 1, 6, 2, (null)
2020-03-10, (null), (null), 3, 4
2020-03-11, (null), (null), (null), 5

由于我知道偏移量以及在解析阶段应该读取哪些行,假设所有组到最后都具有相同数量的行,我需要逐行访问每个组,并将组之间的日期进行比较在新文件中按日期顺序插入数据,如连接操作。

我想我可以通过使用多个文件(每组一个文件)和多个读取流来做到这一点,但组的数量可能超过 1000 个,而且我担心由于打开/处理多个文件而我可能会有很高的开销。所以我认为最好使用单个文件并通过使用偏移量来指向文件的不同行,这样我就可以在组之间进行这些比较。但是,我不知道后一种方法在 node.js 中是否可行(读取文件中的给定行而不完全处理它)。

如果有人可以在这里给我指导,我将不胜感激。

标签: node.jsfilestream

解决方案


推荐阅读