gpt4 book ai didi

java - 处理大型 CSV 文件的最佳方法是什么?

转载 作者:搜寻专家 更新时间:2023-10-31 20:17:49 25 4
gpt4 key购买 nike

我有一个第三方系统,每天生成大量数据(这些是存储在 FTP 上的 CSV 文件)。正在生成 3 种类型的文件:

  • 每 15 分钟(2 个文件)。这些文件非常小 (~ 2 Mb)
  • 每天下午 5 点(~ 200 - 300 Mb)
  • 每个午夜(此 CSV 文件约为 1 Gb)

4 个CSV 的总大小为1.5 Gb。但我们应该考虑到某些文件每 15 分钟生成一次。这些数据也应该汇总(不是那么困难的过程,但肯定需要时间)。我需要快速响应。我正在考虑如何存储这些数据和整体实现。

我们有java 堆栈。数据库是 MS SQL Standard。根据我的测量,使用其他应用程序的 MS SQL Standard 无法处理此类负载。我想到了什么:

  • 这可能是使用单独的服务器升级到 MS SQL Enterprise
  • 在单独的服务器上使用 PostgreSQL。现在我正在为这种方法进行 PoC。

你会在这里推荐什么?可能有更好的选择。

编辑 #1

那些大文件是每天的新数据。

最佳答案

好的。在花了一些时间解决这个问题之后(包括阅读、咨询、实验、做几个 PoC)。我提出了以下解决方案。

Tl;dr

数据库:PostgreSQL 因为它适用于 CSV,免费且开源。

工具:Apache Spark非常适合此类任务。性能良好。

数据库

关于数据库,决定是一件很重要的事情。选择什么以及将来如何处理如此大量的数据。它绝对应该是一个单独的服务器实例,以免在主数据库实例上产生额外的负载,也不会阻塞其他应用程序。

NoSQL

我在这里考虑过Cassandra的用法,但现在这个解决方案太复杂了。 Cassandra 没有临时查询。 Cassandra 数据存储层基本上是一个键值存储系统。这意味着您必须围绕您需要的查询“建模”您的数据,而不是围绕数据本身的结构。

关系型数据库

我不想在这里过度设计。我在这里停止了选择。

MS SQL Server

这是一个可行的方法,但最大的缺点是定价。相当昂贵。考虑到我们的硬件,企业版要花很多钱。关于定价,您可以阅读此policy document .

这里的另一个缺点是对 CSV 文件的支持。这将是我们这里的主要数据源。 MS SQL Server 既不能导入也不能导出 CSV。

  • MS SQL Server 静默截断文本字段。

  • MS SQL Server 的文本编码处理出错。

MS SQL Server 抛出一条错误消息,因为它不理解引号或转义。有关该比较的更多信息,请参阅文章 PostgreSQL vs. MS SQL Server .

PostgreSQL

这个数据库是一个成熟的产品,也是久经考验的。我从其他人那里听到了很多积极的反馈(当然,也有一些权衡)。它具有更经典的 SQL 语法,良好的 CSV 支持,而且它是开源的。

值得一提的是SSMSPGAdmin 更好. SSMS具有自动完成功能,多个结果(当您运行多个查询并在一个中获得多个结果时,但在 PGAdmin 中您只会获得最后一个)。

无论如何,现在我正在使用 DataGrip来自 JetBrains。

处理工具

我已经查看了 Spring BatchApache Spark . Spring Batch用于此任务有点太低级了,还有 Apache Spark如果将来需要,提供更容易扩展的能力。无论如何,Spring Batch也可以做这项工作。

关于 Apache Spark例如,代码可以在 learning-spark 中找到项目。我的选择是Apache Spark现在。

关于java - 处理大型 CSV 文件的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38429013/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com