LINUX.ORG.RU

[C++][Хранение данных] свой бинарный формат vs sqlite vs что-то ещё

 ,


0

0

У меня есть некоторый класс. В них есть члены-переменные (не массивы) стандартных типов (int, double), в сумме где-то на 64 байта.

Имеется массив из (максимум) миллиона таких (как не сложно посчитать, в памяти он занимает около полусотни мегабайт). Надо уметь записывать этот массив в файл и считывать обратно. Без выборочного ввода и вывода. Скорость считывания особо не важна, но скорость записи точно важна.

Стоит ли делать свой бинарный формат ([int количество_элементов][поочерёдные члены первого элемента][поочерёдные члены первого элемента][...] + lzma-сжатие), или лучше использовать sqlite? Или что-нибудь ещё?

★★★★★
Ответ на: комментарий от Obey-Kun

в общем, спасибо всем за подсказки, скоро сравню следующее:

1. Запись ручками ([int количество_элементов][поочерёдные нужные члены первого элемента][поочерёдные нужные члены второго элемента][...]) + lzo

2. HDF5 (если осилю) — правда, мне кажется, оно не совсем для моих нужд

3. Berkley DB

4. protobuf

5. (для непереносимых данных) запись структур напрямую из памяти

Obey-Kun ★★★★★
() автор топика

Я делал так:
1. выделял ~1 мб памяти.
2. Забивал этот «пакет» записями.
3. По заполнению «пакета», лепил ему в начало «тут 123456 записей».
4. Кидал этот 1 мб памяти в файл через write() одним вызовом.
5. На пункт 2.

Желательно использовать кросс-платформенные типы - не int, double и так далее, а uint32_t, uint64_t, char и проч.

peorg
jabber
org

mriadus
()
Ответ на: комментарий от mriadus

Ещё я экспериментировал с BerkeleyDB, но конечно свой велосипед, всегда быстрее для своей специфической дороги. А больше всего это просто прикольно - делать такие штуки ))

mriadus
()
Ответ на: комментарий от Obey-Kun

> (для непереносимых данных)

ну с чего это для непереносимых? :) этот файл будет на arm/ppc/sparc потом открываться? я на 99.99% уверен, что у вас везде только x86/x86_64, так что можно смело хранить так, и, как я уже говорил, написать экспорт в тот же sqlite

lester ★★★★
()
Ответ на: комментарий от anonymous

>Если SQL не нужен - лучше Berkely DB

Berkely DB - тормоз по сравнению с TokyoCabinet

Led ★★★☆☆
()
Ответ на: комментарий от lester

у нас пара спарков на кафедре стоит, но это скорее пережиток прошлого :)

Obey-Kun ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.