Ordenação de arquivo CSV - Opiniões

Boa tarde galera!

Preciso desenvolver um sistema com várias Threads onde cada Thread vai carregar um arquivo CSV e trabalhar os dados, como ordenar, modificar a posição de colunas, etc. Cada arquivo terá cerca de 2 milhões de linhas e umas 10 colunas.

O grande problema aqui, é que não poderei carregar essas linhas em Collections, pois facilmente iria estourar a heap. Além do mais, preciso de bastante performance nessa manipulação.

Então gostaria de ouvir algumas opiniões sobre como fazer isto. Algumas possibilidades que ouvi e que podem dar certo, porém não sei realmente qual é a melhor e se realmente dão certo:

  1. Criar tabelas temporárias e adicionar as linhas do arquivo. Assim ficaria fácil pra trabalhar os dados.
  2. Utilizar Java NIO. Não sei como, mas dizem que é possível manipular as linhas do arquivo somente carregando-o em buffer.
  3. Criar um código em C++ que faça isso e chamar via JNI.

Eu realmente não sei como fazer isto e gostaria de ouvir opiniões à respeito.

Obs.: Não tenho problemas com relação à Threads, concorrêcia, nada, é mais a questão do arquivo mesmo.

Valeu!

Obrigado pela dica entanglement,

estou fazendo uns testes com a API, assim que concluído, coloco as considerações!

[]'s

A API que indiquei é só para fazer ordenação. Outras manipulações são por sua conta (mas deve ser relativamente fácil fazê-las, já que você tem a parte mais difícil, que é a ordenação. Para as outras manipulações (como alterar a ordem das colunas) acredito que dá para você tratar uma linha de cada vez - uso de memória: quase zero. ) - então você pode simplesmente reler o arquivo que já foi ordenado pela API, o que não é difícil de fazer.