我需要将 CSV 数据存储在 Oracle 数据库中,以便以后通过动态查询脚本进行检索。需要存储数据,以便可以使用 SQL 查询 CSV 数据的任何列,并且性能是关键(某些 CSV 文件有 10 万行以上)。
CSV 文件的内容(列数、标题、数据类型)提前未知,系统需要能够处理多个文件结构(这些结构被添加到配置文件中,以便系统知道如何处理)供不懂 SQL 的人阅读)。
为了避免 EAV 模型,我当前的解决方案是让我的代码在每次将新的 CSV 结构添加到配置文件时创建新表。我很想知道是否有更好的方法来实现我想要做的事情。我不太喜欢让我的代码在运行时在生产环境中创建新表。
该系统是用 Groovy 编写的,以防万一。
最佳答案
我倾向于采用您当前的解决方案,即每种类型都有一个单独的表。不知何故,我最喜欢将数据存储在具有明确定义的类型的明确定义的表中。
EAV(实体-属性-值)解决方案也是可行的。对于 100k 行数据,EAV 解决方案应该表现得很好,除非您有很多表。一个缺点是列的类型。如果没有大量额外的工作,您几乎只能使用所有值的字符串。
Oracle 确实提供了另一种可能性,即 XML 解决方案。这可以为您提供动态列名称的灵活性以及不必为每个列定义单独的表的“简单性”。您可以在文档 here 中阅读更多相关信息。 .
关于java - 避免 EAV 模型但仍保持灵活性的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22598550/