将大 CSV 文件显示为表格

Displayiing BIG CSV File as Table

本文关键字:表格 显示 文件 CSV 将大      更新时间:2023-10-16

我想读取一个包含csv数据(>1 GB,从ERP系统导出(的大文件,并为数据提供一个表格界面。

事实上,我有一个很好的工作台课。这以这种(抽象(方式工作:

  • 作为列数据的向量的表行
  • 行的向量。

要读取大文件,这会出现内存问题,我认为是因为向量确实需要一次堆上的整个内存。所以我创建了一个新类,其中只有指向列中字符串的指针,如下所示:

  • 表行,它是列数据的vector<string *>
  • 行的vector<row>

这样效果更好。它在堆上的内存占用量减少了大约 1/3。我认为分离的字符串数据适合堆上的一些孔;-(

但是,如果数据变大,内存问题也就存在。

要读取文件并进行转换,大约需要 2 分钟。

我尝试了SQLLite,但导入速度非常慢。读取大文件(约 3000000 行(并插入它们,大约需要 15 个小时。我知道我可以大大加快速度,但我真的不知道这是否是解决方案。顺便说一句:sqlite浏览器在导入这样的文件时崩溃!

还有其他人有这样的问题吗,或者你知道管理这种大数据表内存的好方法吗?该表是某些任务的查找表,因此如果可能的话,它应该立即放入内存中。

目前,我正在使用Visual Studio C++ 2012。

在不太了解您的问题的情况下,当我在 10 年前遇到类似情况并且需要 36 小时转储到 Oracle 数据库时,我会这样做,这减少了一半多,达到 16 小时:

创建一堆缓冲区(例如 10,000 行数据(,并让一个线程以循环方式将数据读入这些缓冲区。

然后让另一个线程开始实际处理数据。

诚然,这仅在每一行都独立于其他行时才有效。

编辑:这个关于内存位置的链接可能会有所帮助。本质上使用[]而不是vectors