我正在阅读中等大小的CSV文件(最多100K行和50列),并且当前存储为
headers: List<String>
data: List<List<String>>
我想通过给定列中的单元格值进行搜索,返回{irow, jcol}
。我看过guava HashBasedTable
,但这并没有数字行索引的概念。在编写自己的(基于hastable索引)之前,我将非常感谢知道使用CSV结构的轻量级开源Java表工具。
注意:为响应@Basil,我可以使用只读解决方案,但如果存在则可能会使用添加/删除。
答案 0 :(得分:1)
为什么不使用关系数据库而不是将表格数据转换为非表格式Java结构?
H2 Database Engine是用纯Java编写的。它可以嵌入您的Java应用程序中。
H2可以直接读入CSV文件。使用CSVREAD
和CSVWRITE
查看this tutorial。或者使用Apache Commons CSV库读取CSV文件。
如果希望行具有序列号,显示你的意思是&#34;行索引&#34;
,请为增量整数添加一个额外的列。如果要最大限度地提高性能,可以指定将数据库保留在内存中而不是保存到存储中。
您的评论提到这是一个添加/删除数据的读写情况。这会在多个线程更新内存中的数据结构并将文件写入同步到存储时引发可能的并发问题。
这使得数据库解决方案更加合适,因为concurrency是一个非常棘手的复杂问题,已经由数据库处理得很好。
确保了解数据库的并发策略。并发处理没有神奇的完美解决方案,总是需要权衡。 H2数据库默认使用MVCC作为its strategy。