FlatBuffers: как писать гигантские файлы

Я экспериментирую с FlatBuffers для хранения данных OpenStreetMap. Итак, это будет 50 ГБ.

Поскольку обычно все хранится в памяти, как возможно (если вообще возможно) последовательно записывать данные в файл?

У меня такое чувство, что FlatBuffers не совсем подходит для этого.


person benjist    schedule 10.02.2016    source источник
comment
Взгляните на API файлов с отображением памяти для вашей платформы. Есть способы отображать регионы в память, поэтому вам нужно иметь в памяти не все 50 ГБ, а ее части.   -  person hookenz    schedule 10.02.2016


Ответы (1)


В настоящее время нет способа создать один FlatBuffer, не имея всего сразу в памяти. Единственный способ сделать это - вместо этого записать цепочку (с префиксом длины) меньших независимых FlatBuffers.

person Aardappel    schedule 10.02.2016
comment
Есть обычный способ сделать это? - person benjist; 10.02.2016
comment
Нет, нет, но ваш вопрос заставляет меня думать, что мы должны добавить его в библиотеку FlatBuffers. - person Aardappel; 10.02.2016
comment
Это несложно, я бы предложил файл, который содержит: 32-битную длину FlatBuffer 1 - содержимое буфера FlatBuffer 1 - 32-битную длину FlatBuffer 2 - содержимое буфера FlatBuffer 2 и т. Д. - person Aardappel; 10.02.2016
comment
Было бы неплохо, если бы для этого был удобный API. Я пытаюсь предложить альтернативу официальному формату OSM protobuf. Одна вещь, которая делает использование PBF в случае данных OSM неудобным, - это необходимость в различных деталях реализации на стороне клиента. Так что было бы здорово, если бы это было возможно почти независимо от языка и реализации. - person benjist; 10.02.2016
comment
Еще одна вещь: теоретически возможно, что FlatBuffers косвенно перенаправляет указатели на сегменты сжатых данных фиксированного размера (скажем, 2 МБ), которые должны быть несжатыми при доступе? Сжатие имеет огромное значение для данных, которые у меня есть, поскольку нельзя применять дельта-кодирование. - person benjist; 11.02.2016
comment
Согласен, было бы хорошо решить этот вариант использования в целом. Способ прямого доступа FlatBuffers к памяти затруднит прозрачное сжатие или любое косвенное обращение, поскольку это повлечет за собой постоянные накладные расходы, которых в настоящее время нет. - person Aardappel; 11.02.2016
comment
кстати, добавлена ​​некоторая функциональность, позволяющая сделать предварительное исправление размера частью FlatBuffers: - person Aardappel; 13.10.2016
comment
Был ли достигнут какой-либо прогресс с момента публикации этого поста в отношении поддержки 64-битных смещений? Просто проверяю, потому что обходной путь с несколькими плоскими буферами не совсем подходит для моего варианта использования. - person alteredinstance; 15.02.2020