Данные в табличном формате т.е. строки и столбцы, в основном числа. Есть много повторений в столбцах. Какие есть варианты, чтобы сохранить данные максимально компактно и при этом иметь возможность читать их без больших накладных расходов?
Ад пуст, все бесы здесь.
Re: нужна эффективная библиотека для хранения бинарных данных
Здравствуйте, Codealot, Вы писали:
C>Данные в табличном формате т.е. строки и столбцы, в основном числа. Есть много повторений в столбцах. Какие есть варианты, чтобы сохранить данные максимально компактно и при этом иметь возможность читать их без больших накладных расходов?
Размер таблицы?
Какие числа (сколько байт)?
Что кроме чисел? (Строки? Длинные?)
Как много повторений?
Пустые элемены есть? Много?
Re[2]: нужна эффективная библиотека для хранения бинарных данных
Здравствуйте, Codealot, Вы писали:
C>Данные в табличном формате т.е. строки и столбцы, в основном числа. Есть много повторений в столбцах. Какие есть варианты, чтобы сохранить данные максимально компактно и при этом иметь возможность читать их без больших накладных расходов?
Здравствуйте, Codealot, Вы писали:
C>Здравствуйте, VladFein, Вы писали:
VF>>Размер таблицы?
C>Примерно 20-30 столбцов и 5-10 тысяк строк на файл. Сжатие нужно в пределах файла.
VF>>Какие числа (сколько байт)?
C>float в основном, еще есть int32 и int64, но немного.
VF>>Что кроме чисел? (Строки? Длинные?)
C>Есть, мало и короткие.
VF>>Как много повторений?
C>По разному. Где-то несколько чисел подряд, где-то весь столбец.
VF>>Пустые элемены есть? Много?
C>Есть некоторое количество, но они ничем не отличаются от повторов в плане сжатия. Не?
(Во-первых, я не знаю такой библиотеки)
Из самых общих соображений, сжать можно храня ссылки на "словарь" повторяющихся значений.
Для компактности, ссылка должна быть короче самого значения. Для 300,000 значений это не очевидно.
Если повторы всегда (обычно) идут подряд, можно хранить значение и счетчик повторений. Overhead — для уникальных значений нужен дополнительный счетчик [1].
Короче, шансов не много...
Re[4]: нужна эффективная библиотека для хранения бинарных данных
Здравствуйте, VladFein, Вы писали:
VF>Из самых общих соображений, сжать можно храня ссылки на "словарь" повторяющихся значений.
Зачем словарь? RLE придуман уже очень давно.
VF>Если повторы всегда (обычно) идут подряд, можно хранить значение и счетчик повторений. Overhead — для уникальных значений нужен дополнительный счетчик [1].
Число повторов несложно проверить перед записью, а для уникальных значений достаточно флага в один бит. Или даже меньше, если идет много уникальных значений подряд.
Все алгоритмы давно есть, вопрос только, есть ли качественные реализации.
Ад пуст, все бесы здесь.
Re[2]: нужна эффективная библиотека для хранения бинарных данных
Здравствуйте, Codealot, Вы писали:
VF>>Из самых общих соображений, сжать можно храня ссылки на "словарь" повторяющихся значений.
C>Зачем словарь? RLE придуман уже очень давно.
RLE для повторов, идущих подряд; словарь — для разбросанных.
VF>>Если повторы всегда (обычно) идут подряд, можно хранить значение и счетчик повторений. Overhead — для уникальных значений нужен дополнительный счетчик [1].
C>Число повторов несложно проверить перед записью, а для уникальных значений достаточно флага в один бит. Или даже меньше, если идет много уникальных значений подряд.
Нет в int32, int64 или float лишнего бита, т.е. нужен байт.
C>Все алгоритмы давно есть, вопрос только, есть ли качественные реализации.
Архиватор не подходит, т.к из него (без распаковки) отдельный элемент не вытащить.
Re: нужна эффективная библиотека для хранения бинарных данных
Здравствуйте, Codealot, Вы писали:
C>Данные в табличном формате т.е. строки и столбцы, в основном числа. Есть много повторений в столбцах. Какие есть варианты, чтобы сохранить данные максимально компактно и при этом иметь возможность читать их без больших накладных расходов?
Сжатие файловой системой.
Re[6]: нужна эффективная библиотека для хранения бинарных данных
Здравствуйте, Codealot, Вы писали:
C>Данные в табличном формате т.е. строки и столбцы, в основном числа. Есть много повторений в столбцах. Какие есть варианты, чтобы сохранить данные максимально компактно и при этом иметь возможность читать их без больших накладных расходов?
А как читать собираемся? Просто когда надо пробежаться по всем записям?
Re[2]: нужна эффективная библиотека для хранения бинарных данных
Здравствуйте, Codealot, Вы писали:
C>Данные в табличном формате т.е. строки и столбцы, в основном числа. Есть много повторений в столбцах. Какие есть варианты, чтобы сохранить данные максимально компактно и при этом иметь возможность читать их без больших накладных расходов?
Здравствуйте, Codealot, Вы писали:
C>Здравствуйте, Danchik, Вы писали:
D>>А как читать собираемся? Просто когда надо пробежаться по всем записям?
C>Как вариант.