struct
и array
, которые рекомендуют другие ответы, подходят для деталей реализации и могут быть всем, что вам нужно, если вам нужно всегда последовательно читать весь файл или его префикс. Другие параметры включают буфер, mmap, даже ctypes, в зависимости от многих деталей, которые вы не упомянули относительно ваших конкретных потребностей. Может быть, небольшой специализированный помощник, закодированный на Cython, может предложить всю необходимую вам дополнительную производительность, если уже не существует подходящей и доступной библиотеки (на C, C++, Fortran, ...), которая может быть интерфейсом для обработки этого огромного файла как тебе нужно.
Но очевидно, что здесь есть специфические проблемы — как файл данных может содержать, например, указатели, которые по своей сути являются концепцией, связанной с адресацией памяти? Возможно, вместо этого они являются «смещениями», и если да, то как именно они основаны и закодированы? Являются ли ваши потребности более продвинутыми, чем просто последовательное чтение (например, произвольный доступ), и если да, то можете ли вы выполнить первый проход «индексации», чтобы получить все смещения от начала файла до начала записи в более удобном, компактном , удобно отформатированный вспомогательный файл? (Этот двоичный файл смещений был бы естественным для array
-- если только смещения не должны быть длиннее, чем array
поддерживает на вашем компьютере!). Каково распределение длин и композиций записей и количества записей, составляющих «десятки гигабайт»? И т. д. и т. д.
У вас очень масштабная проблема (и, без сомнения, очень крупномасштабное аппаратное обеспечение для ее поддержки, поскольку вы упомянули, что можете легко прочитать весь файл в память, что означает 64-битный блок со многими десятками ГБ ОЗУ — вау!) , так что стоит тщательно позаботиться об оптимизации обращения с ним - но мы не можем сильно помочь с таким тщательным уходом, если мы не знаем достаточно подробностей, чтобы сделать это!-).
person
Alex Martelli
schedule
17.08.2009
struct
, или просто это занимает много времени? Даже с самым эффективным кодом возможная обработка десятков гигабайт данных займет некоторое время... - person Scott Griffiths   schedule 17.08.2009