Yur*_*uri 5 java architecture sql-server csv
我有一个第三方系统,每天生成大量数据(这些CSV是存储在FTP上的文件).正在生成3种类型的文件:
2 Mb)200 - 300 Mb)CSV文件是关于1 Gb)整体而言,4 CSV秒的大小是1.5 Gb.但是我们应该考虑到每15分钟生成一些文件.这些数据也应该汇总(不是那么难的过程,但肯定需要时间).我需要快速回复.我正在考虑如何将这些数据和整体存储在实现上.
我们有java堆栈.数据库是MS SQL Standard.从我MS SQL Standard与其他应用程序的测量结果将无法处理此类负载.我想到了什么:
MS SQL Enterprise单独服务器的升级.PostgreSQL单独的服务器上.现在我正在为这种方法开发PoC.你会在这推荐什么?可能有更好的选择.
这些大文件是每天的新数据.
好的。在花了一些时间解决这个问题之后(包括阅读、咨询、实验、做几个 PoC)。我想出了以下解决方案。
数据库:PostgreSQL因为它适合 CSV、免费且开源。
工具:Apache Spark非常适合此类任务。很好的表现。
对于数据库来说,决定是一件很重要的事情。选择什么以及未来如何处理如此大量的数据。它绝对应该是一个单独的服务器实例,以便不会在主数据库实例上产生额外的负载,也不会阻塞其他应用程序。
我想到了here的用法Cassandra,但现在这个解决方案太复杂了。Cassandra没有临时查询。Cassandra数据存储层基本上是一个键值存储系统。这意味着您必须围绕所需的查询“建模”数据,而不是围绕数据本身的结构。
我不想在这里过度设计。我就在这里停止了选择。
这是一种可行的方法,但最大的缺点是价格。相当昂贵。考虑到我们的硬件,企业版需要花费很多钱。关于定价,您可以阅读这份政策文件。
这里的另一个缺点是对 CSV 文件的支持。这将是我们这里的主要数据源。MS SQL Server既不能导入也不能导出 CSV。
MS SQL Server默默地截断文本字段。
MS SQL Server的文本编码处理出错。
MS SQL Server 抛出错误消息,因为它不理解引用或转义。有关该比较的更多信息,请参阅文章PostgreSQL 与 MS SQL Server。
这个数据库是一个成熟的产品,并且经过了充分的考验。我从其他人那里听到了很多积极的反馈(当然,也有一些权衡)。它有更经典的SQL语法,良好的CSV支持,而且它是开源的。
值得一提的是SSMS比PGAdmin好得多。SSMS具有自动完成功能、多个结果(当您运行多个查询并一次获得多个结果时,但在PGAdmin中您只能获得最后一个结果)。
不管怎样,现在我正在使用JetBrains 的DataGrip 。
我浏览过Spring Batch和Apache Spark。Spring Batch对于此任务来说有点太低级了,而且Apache Spark还提供了在将来需要时更容易扩展的能力。不管怎样,Spring Batch也可以完成这项工作。
关于Apache Spark示例,代码可以在learning-spark项目中找到。我现在的选择是Apache Spark 。