Java 索引和搜索CSV表

Java 索引和搜索CSV表,java,csv,Java,Csv,我正在读取中等大小的CSV文件(最多100K行和50列),目前存储为 标题:列表 数据:列表 我想通过给定列中的单元格值来搜索它,返回{irow,jcol}。我看过guavaHashBasedTable,但它没有数字行索引的概念。在写我自己的(基于hastable索引)之前,我很想知道使用CSV结构的轻量级开源Java表工具 注意:为了响应@Basil,我可以使用只读解决方案,但可能会使用add/delete(如果存在)。H2数据库引擎 为什么不使用关系数据库而不是将表格数据扭曲成非表格Ja

我正在读取中等大小的CSV文件(最多100K行和50列),目前存储为

标题:列表
数据:列表

我想通过给定列中的单元格值来搜索它,返回
{irow,jcol}
。我看过guava
HashBasedTable
,但它没有数字行索引的概念。在写我自己的(基于hastable索引)之前,我很想知道使用CSV结构的轻量级开源Java表工具

注意:为了响应@Basil,我可以使用只读解决方案,但可能会使用add/delete(如果存在)。

H2数据库引擎 为什么不使用关系数据库而不是将表格数据扭曲成非表格Java结构

这是用纯Java编写的。它可以嵌入到Java应用程序中

H2可以直接读取CSV文件。请参见关于使用
CSVREAD
CSVWRITE
。或者使用Apache Commons CSV库读取CSV文件

如果希望行具有序列号(显然是您所说的“行索引”)的话,请为递增整数添加一个额外的列

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

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

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


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

为什么不为索引创建一个附加的哈希映射,指向
列表中的同一行?然后您有数字行索引和基于列的索引,但行数据没有重复项。@vanje这就是我正在做的-它对添加/删除data@peter.murray.rust您在问题中没有提到添加/删除数据。与只读情况相比,这是解决方案的关键标准。用这一点编辑你的问题。接受这一点,因为这似乎是一个潜在的有用的方法,尽管它更重,我想。是,行索引是一个顺序索引号。