2016-07-25 11 views
0

Iam записывает инструмент генератора таблицы данных и имеет некоторые проблемы с производительностью - мне нужно заботиться о использовании RAM и времени генерации. Это действительно ключ в моей программе.Java: быстро получить данные: хранить в памяти vs читать из файла

1) Я нужно хранить окончательные данные в одном файле (один файл = одну таблицу, чтобы загрузить его позже, когда будет генерироваться все файлы), как:

111|aaaa|bbba 
112|aaab|bbbb 
113|aaac|bbbc 
114|aaad|bbbd... 

я мог имеют много столбцов и даже миллион строк. Все значения верны.

2) Теперь мне нужно создать одно значение для следующей таблицы, используя значения из одной из ранее генерированных таблиц. Моя программа также может сохранить один столбец во временный файл (читать его в будущем), как:

aaaa 
aaab 
aaac 
aaad... 

Теперь главная проблема заключается в том, что мне нужно, чтобы случайно «читать» новое значение даже Milion раз, так же, как счетчик строк.

Как это эффективно? Какие инструменты используют? У меня есть два варианта:

  • Сохраните все доступные значения 2-го столбца из временного файла в каком-либо массиве/arraylist и используйте, например. .get (интермедиат индекс) метод и возвращаемое значение
  • Читайте конкретную строку из этого файла и возвращаемого значения

Спасибо за помощь

+0

Внутренняя память, так как вам нужно читать случайно? Чтение/запись диска всегда медленнее, чем чтение/запись памяти ... –

+0

Я знаю, что это медленнее, но мне также нужно заботиться о ОЗУ. Посмотрите на использование, если я храню миллион значений в массиве/arraylist ... – Shelboy

+0

Это либо скорость, либо низкое использование ОЗУ. Выберите один, а не оба. Я не буду рекомендовать вам конкретное решение. Я рекомендую вам попробовать различные возможные решения, сравнить их с чертами, «реалистичными» данными, а затем принять решение. Не существует решения «один размер подходит всем». –

ответ

2

Как эффективно это сделать?

Чтобы прочитать файл в случайном порядке, вам необходимо знать смещение каждой записи. Я бы сохранил это двоичный файл с 4-байтным или 8-байтным смещением для начала каждой строки.

Вы можете использовать библиотеку, такую ​​как Chronicle Map, которая позволяет случайным образом читать любую запись в файле с помощью ключа.