LINUX.ORG.RU

Оптимальный формат хранения данных

 efficiency, ,


0

3

disclaimer

скорее всего мне никогда это не пригодится, но хочется узнать мнение умных людей

допустим у меня есть матрица с 450’000’000 строчек и 8 столбиков. в ней хранятся значения типа «float» (значения плавают в диапазоне -36 — 36, и есть 7 знаков после точки). нужно это сбросить на диск и чтобы это занимало как можна меньше места..

update: Особенно интересно можна все это поместить в 16Гб флеху (реально там 14.9Гб места если я нигде не ошибся)

★★★★★

Последнее исправление: ZuBB (всего исправлений: 3)

если это всё что можешь сказать о характере распределения данных по строчкам (много ли нулей, например), то всё тупо - дамп + сжатие.

Особенно интересно можна все это поместить в 16Гб флеху (реально там 14.9Гб места если я нигде не ошибся)

тебе даже сжатие не нужно.

mashina ★★★★★
()
Последнее исправление: mashina (всего исправлений: 1)
Ответ на: комментарий от mashina

нулей может быть 5-10% максимум. в основном они будут «идти» в столбиках группами. В общем на то что нулей будет много и часто рассчитывать не надо

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

в основном они будут «идти» в столбиках группами

Транспонируй, лол.

schizoid ★★★
()

Кстати, такой вариант: перевести в целочисленный формат (влезет же по количеству цифер в int?) и хранить не само число, а разницу между ним и предыдущим, если такие разницы невелики - спокойно влезут в байт, например.

schizoid ★★★
()

Если точность фиксирована - гуглить significand Если будет недостаточно - гуглить компрессию подобную FAST (со смещением от базы), если zip неприемлем

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

+1.

Причем если точность 7 знаков, то ничего другого и не остается. Всякие извращения с фиксед пойнт ничего не дадут, в 2 байта все равно не влезет.

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

если такие разницы невелики - спокойно влезут в байт, например

не влезут

ZuBB ★★★★★
() автор топика

всем спасибо. похоже первый вариант самый простой и безгеморный

ZuBB ★★★★★
() автор топика

Ты что, упоротый? 450000000*8*4 = 13.411G, влезает в 16G без каких бы то ни было телодвижений. Если нужно меньше, то да: delta + обычные алгоритмы сжатия.

slovazap ★★★★★
()

допустим у меня есть матрица с 450’000’000 строчек и 8 столбиков. в ней хранятся значения типа «float» (значения плавают в диапазоне -36 — 36, и есть 7 знаков после точки).

это 13.41Гб. Влезет на флешку. AS IS

в основном они будут «идти» в столбиках группами.

поясни для тупого. Дельта что-ли малая? Вообще говоря, если числа малые, или дельта малая, то все биты хранить не обязательно. Точность 7 дес. знаков — максимум для float, потому тут не сэкономишь.

возможность и алгоритм сжатия сильно зависит от природы чисел. Если есть корреляция чего-то с чем-то, то сжатие возможно. Главное — поставить это рядом, переставив соответственно числа.

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