java - 将巨大的 CSV 文件内容转换为可快速查询的数据存储的最佳方法?
问题描述
要求允许 Web 用户上传包含大约 1000 万个客户 ID 的 CSV 文件。如果客户出现在 CSV 文件中,则此数据以后必须用于向客户提供某些其他应用程序内容。系统期望以这种方式有数千个客户请求,因此后端需要扩展 - 这里的问题是,将 CSV 转换为后端中任何特定 DB/S3 的最佳方法是什么,以便轻松过滤?每次都存储和解析文件是不可行的,所以想了解任何最好的方法吗?
解决方案
您可以使用Amazon Athena或 Amazon S3 Select。
Amazon Athena是一个查询引擎,可以直接从存储在 Amazon S3 中的(多个)文件中读取数据。当文件为列格式(例如 Parquet 或 ORC)并经过压缩时,它的效果最好,但它也可以在普通的 CSV 文件上工作。它具有高度可扩展性,尤其是在查询多个文件的情况下。但是,它根据数据在 S3 中的位置将数据视为存储在“表”中,因此它不适合查询随机文件。
Amazon S3 Select一次只能处理一个文件,但它可以直接查询 CSV 文件(以及一些其他格式)。它具有类似 SQL 的查询能力。
如果您需要每次查询不同的文件,我会推荐 S3 Select。
这两个选项的好处是您不需要将数据“加载”到数据库中。但是,如果您需要非常快速地访问数据,这当然是您可以考虑的一个选项。(Amazon Redshift 可以非常快速地处理表中的数十亿行,但成本更高。)
推荐阅读
- automation - Appium - 在 PageFactory 获取 java.lang.RuntimeException: java.lang.NoSuchMethodException: jdk.proxy2.$Proxy9.proxyClassLookup()
- node.js - 在 Mongodb 中执行查找操作后如何发送分页结果作为响应?
- javascript - 访问上传的文件 react 文件输入 onChange
- dfa - DFA 可以有一个带有空字符串的箭头作为输入吗?
- c++ - 函数是否在返回值后立即终止,忽略其下一行?
- flutter - Flutter IconTheme 不适用
- windows - 聪明的。卡微型驱动程序测试库加载失败 - cmck
- jenkins - 如何简单地执行键的值,其中值是元素列表,每个元素执行应该在jenkins groovy中并行执行
- reactjs - (错误)AWS 作为后端安装放大库
- discord - 链接到 Discord.py Meme 命令中的 meme