java - 索引和搜索 CSV 表

标签 java csv

我正在读取中等大小的 CSV 文件(最多 100K 行和 50 列),当前存储为 headers: List<String> data: List<List<String>>

我想按给定列中的单元格值进行搜索,返回 {irow, jcol} 。我看过 Guava HashBasedTable但这没有数字行索引的概念。在编写我自己的(基于 hastable 索引)之前,我很高兴了解使用 CSV 结构的轻量级开源 Java 表工具。

注意:为了回应@Basil,我可以使用只读解决方案,但如果存在,可能会使用添加/删除。

最佳答案

H2 数据库引擎

为什么不使用关系数据库而不是将表格数据转换为非表格 Java 结构?

H2 Database Engine是用纯Java编写的。它可以嵌入到您的 Java 应用程序中。

H2可以直接读取CSV文件。请参阅this tutorial关于使用 CSVREADCSVWRITE。或者使用 Apache Commons CSV 库读取 CSV 文件。

如果您希望行具有连续编号,请添加一个额外的列来表示递增的整数,显然您所说的“行索引”是什么意思。

如果您想最大限度地提高性能,您可以指定将数据库保留在内存中而不是持久保存到存储中。

并发

您的评论提到这是一种添加/删除数据的读写情况。这会引发多个线程更新内存中的数据结构以及将文件写入同步到存储的可能的并发问题。

这使得数据库解决方案更加合适,如 concurrency这是一个非常棘手的复杂问题,数据库已经很好地处理了。

请务必了解数据库的并发策略。并发处理没有神奇的完美解决方案,总是需要权衡。 H2数据库默认使用MVCCits strategy

关于java - 索引和搜索 CSV 表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38479988/

相关文章:

java - 我们什么时候应该修改通过引用传递的对象?

java - Spring Data MongoDB - 注释@CreatedDate 在与自定义 Id 字段一起使用时不起作用

java - 有没有办法将相同的对象添加到 ArrayList,但更改值而不重写 ArrayList 的其他元素?

java - Scala 中的密封特征类转换

java - 使用模板方法模式设计过滤器接口(interface)

csv - 如果匹配列值,golang csv 删除重复项

python-2.7 - AWS Lambda - 在内存中生成 CSV 并将其作为电子邮件附件发送

php - fputcsv() 不转义双引号吗?

ios - 使用 CHCSV 解析器时出错 : No known class method for selector 'arrayWithContentsOfCSVFile:encoding:error:'

java - 将 Java 代码导出到 CSV 并在 Excel 2013 中导入