2016-02-29 2 views
2

Я использую PStore, чтобы сохранить результаты некоторых компьютерных симуляций. К сожалению, когда файл становится слишком большим (более 2 ГБ из того, что я вижу), я больше не могу записать файл на диск, и я получаю следующую ошибку;Ruby PStore файл слишком большой

Errno::EINVAL: Invalid argument - <filename> 

Я знаю, что это, вероятно, ограничение IO, но мне было интересно, есть ли обходной путь. Например, чтобы прочитать большие файлы JSON, я бы сначала записал файл split, а затем прочитал его по частям. Вероятно, окончательное решение должно состоять в том, чтобы переключиться на соответствующую базу данных в бэкэнд, но из-за некоторых ограничений конкретного Ruby (Sketchup), которые я использую, это не всегда возможно.

ответ

1

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

Поэтому я бы предложил, чтобы вместо того, чтобы сбрасывать данные в один огромный файл, вы можете поместить свои данные в разные файлы/ведра. Например, если ваши данные имеют поле name, вы можете взять первые 1-4 символа имени, создать файл с такими символами, как rojj-datafile.pstore, и добавить туда запись. Любые записи с именем start 'rojj' идут в этом файле.

Более структурированная версия должна принимать первый символ как каталог, а затем помещать файл внутри него, например r/rojj-datafile.pstore.

Очевидно, что вашему механизму чтения/записи придется учитывать эту новую структуру файла, и это, несомненно, будет замедляться для обработки данных в pstores.

+0

Вы принимаете правильно. К сожалению, содержимое каждого ключа может генерировать файл, который уже содержит несколько ГБ. Фактически данные представляют собой временные ряды, представляющие результаты для конкретного моделирования. Я мог разделить по времени, но в этот момент я мог просто сохранить файл «маршал» для каждого. – Rojj

 Смежные вопросы

  • Нет связанных вопросов^_^