我正在使用Atom / Electron构建一个基于数据对视频进行可视化的应用。每个视频都有一个相应的CSV文件,其中包含每个帧的信息。视频大约100分钟,所以文件有足够的数据!
我遇到的问题是加载和解析文件需要几秒钟。大多数时候这不是问题。但我需要制作部分视频的播放列表,每次更改视频时加载整个CSV文件都不是一个可行的选择。
我一直在寻找文件流选项作为fast-csv,但我没有设法开始阅读文件的任意部分。
编辑:来自FS文档。在这种情况下,问题是如何知道哪个字节对应于文件中我想要的位置?
选项可以包括读取一系列字节的起始值和结束值 从文件而不是整个文件。开始和结束都是 包容性,从0开始。
您认为对这种情况采取更好,最有效的方法是什么?
具体:
有没有办法从CSV文件的任何部分开始读取流?
你认为还有另一种存储方法可以让我更好地解决这个问题吗?
更新:
最后,我通过将数据存储在二进制格式的文件中来解决这个问题。因为我知道文件有多少列,所以我可以直接从文件段中读取,而不会影响性能。
答案 0 :(得分:3)
我强烈推荐Papaparse。它允许CSV'逐行'的流式传输,可以基于文件中的标头以JSON格式处理。
在传递给解析函数的配置对象中,您可以给出一个'step'参数,该参数是在文件逐步执行时对文件的每一行执行的函数。
注意:还可以配置为在处理非常大的CSV时使用工作线程来提高性能
答案 1 :(得分:1)
根据我的评论,Sqlite似乎就是你要找的。从长远来看,它可能不是你永久的解决方案,但当你决定是坚持使用它还是编写自己的解决方案时,它肯定会有效。
Sqlite的内部工作
Sqlite针对核心进行了优化,但它有三个主要功能,使其执行速度比普通磁盘读取速度快,尤其是CSV文件:
如果你真的有兴趣了解所有这一切的全部范围,我找不到比this amazing blog post by Julia Evans更好的解释。
可能的缺点
除了内部工作原理之外,Sqlite还设计为客户端在用户机器上工作。如果这不是一个可行的解决方案,那么可以做一些变通方法。例如,Sqlite可以用作Web服务器,但它最好是独立或混合安装。还要记住每个客户的计算机都不同。一台计算机可以比下一台计算机更快地处理记录,但通常您不必担心,因为客户端计算机通常负载很小。<强>摘要强>
Sqlite可以满足您的需求,但可能需要一些功课来以您需要的方式进行设置。例如,Sqlite4java易于安装,但由于文档很差,因此难以学习; Stack Overflow让我通过它。 Sqlite也是一个使用它并忘记它的安装类型所以为了回答你的问题,它会像蛋糕一样处理25行,你不需要担心只优化它自己的代码。