нужна эффективная библиотека для хранения бинарных данных
От: Codealot Земля  
Дата: 07.01.22 00:53
Оценка:
Данные в табличном формате т.е. строки и столбцы, в основном числа. Есть много повторений в столбцах. Какие есть варианты, чтобы сохранить данные максимально компактно и при этом иметь возможность читать их без больших накладных расходов?
Ад пуст, все бесы здесь.
Re: нужна эффективная библиотека для хранения бинарных данных
От: VladFein США  
Дата: 07.01.22 01:13
Оценка:
Здравствуйте, Codealot, Вы писали:

C>Данные в табличном формате т.е. строки и столбцы, в основном числа. Есть много повторений в столбцах. Какие есть варианты, чтобы сохранить данные максимально компактно и при этом иметь возможность читать их без больших накладных расходов?


Размер таблицы?
Какие числа (сколько байт)?
Что кроме чисел? (Строки? Длинные?)
Как много повторений?
Пустые элемены есть? Много?
Re[2]: нужна эффективная библиотека для хранения бинарных данных
От: Codealot Земля  
Дата: 07.01.22 01:41
Оценка:
Здравствуйте, VladFein, Вы писали:

VF>Размер таблицы?


Примерно 20-30 столбцов и 5-10 тысяк строк на файл. Сжатие нужно в пределах файла.

VF>Какие числа (сколько байт)?


float в основном, еще есть int32 и int64, но немного.

VF>Что кроме чисел? (Строки? Длинные?)


Есть, мало и короткие.

VF>Как много повторений?


По разному. Где-то несколько чисел подряд, где-то весь столбец.

VF>Пустые элемены есть? Много?


Есть некоторое количество, но они ничем не отличаются от повторов в плане сжатия. Не?
Ад пуст, все бесы здесь.
Re: нужна эффективная библиотека для хранения бинарных данных
От: L.K. Марс  
Дата: 07.01.22 02:05
Оценка:
C>сохранить данные максимально компактно

Это называется архиватором. Алгоритмов (zip, rar) и библиотек — море.
Re[2]: нужна эффективная библиотека для хранения бинарных данных
От: Codealot Земля  
Дата: 07.01.22 02:18
Оценка:
Здравствуйте, L.K., Вы писали:

LK>Это называется архиватором. Алгоритмов (zip, rar) и библиотек — море.


Во первых, есть архиваторы лучше. Во вторых, это все равно не то.
Ад пуст, все бесы здесь.
Re: нужна эффективная библиотека для хранения бинарных данных
От: novitk США  
Дата: 07.01.22 02:39
Оценка: 5 (2) +1
Здравствуйте, Codealot, Вы писали:

C>Данные в табличном формате т.е. строки и столбцы, в основном числа. Есть много повторений в столбцах. Какие есть варианты, чтобы сохранить данные максимально компактно и при этом иметь возможность читать их без больших накладных расходов?


https://arrow.apache.org/
формат Parquet или Feather
Re[3]: нужна эффективная библиотека для хранения бинарных данных
От: VladFein США  
Дата: 07.01.22 03:09
Оценка:
Здравствуйте, 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]: нужна эффективная библиотека для хранения бинарных данных
От: Codealot Земля  
Дата: 07.01.22 03:38
Оценка:
Здравствуйте, VladFein, Вы писали:

VF>Из самых общих соображений, сжать можно храня ссылки на "словарь" повторяющихся значений.


Зачем словарь? RLE придуман уже очень давно.

VF>Если повторы всегда (обычно) идут подряд, можно хранить значение и счетчик повторений. Overhead — для уникальных значений нужен дополнительный счетчик [1].


Число повторов несложно проверить перед записью, а для уникальных значений достаточно флага в один бит. Или даже меньше, если идет много уникальных значений подряд.
Все алгоритмы давно есть, вопрос только, есть ли качественные реализации.
Ад пуст, все бесы здесь.
Re[2]: нужна эффективная библиотека для хранения бинарных данных
От: Codealot Земля  
Дата: 07.01.22 03:38
Оценка:
Здравствуйте, novitk, Вы писали:

N>формат Parquet или Feather


Это можно попробовать.
Ад пуст, все бесы здесь.
Re[5]: нужна эффективная библиотека для хранения бинарных данных
От: VladFein США  
Дата: 07.01.22 04:02
Оценка:
Здравствуйте, Codealot, Вы писали:

VF>>Из самых общих соображений, сжать можно храня ссылки на "словарь" повторяющихся значений.


C>Зачем словарь? RLE придуман уже очень давно.

RLE для повторов, идущих подряд; словарь — для разбросанных.

VF>>Если повторы всегда (обычно) идут подряд, можно хранить значение и счетчик повторений. Overhead — для уникальных значений нужен дополнительный счетчик [1].


C>Число повторов несложно проверить перед записью, а для уникальных значений достаточно флага в один бит. Или даже меньше, если идет много уникальных значений подряд.

Нет в int32, int64 или float лишнего бита, т.е. нужен байт.

C>Все алгоритмы давно есть, вопрос только, есть ли качественные реализации.

Архиватор не подходит, т.к из него (без распаковки) отдельный элемент не вытащить.
Re: нужна эффективная библиотека для хранения бинарных данных
От: Sharowarsheg  
Дата: 07.01.22 04:16
Оценка: :)
Здравствуйте, Codealot, Вы писали:

C>Данные в табличном формате т.е. строки и столбцы, в основном числа. Есть много повторений в столбцах. Какие есть варианты, чтобы сохранить данные максимально компактно и при этом иметь возможность читать их без больших накладных расходов?


Сжатие файловой системой.
Re[6]: нужна эффективная библиотека для хранения бинарных данных
От: Codealot Земля  
Дата: 07.01.22 04:35
Оценка:
Здравствуйте, VladFein, Вы писали:

VF>RLE для повторов, идущих подряд; словарь — для разбросанных.


Достаточно сжимать каждый столбец в отдельности.

VF>Нет в int32, int64 или float лишнего бита, т.е. нужен байт.


Ничто не мешает сохранять просто битовый поток.
Ад пуст, все бесы здесь.
Re: нужна эффективная библиотека для хранения бинарных данных
От: Danchik Украина  
Дата: 07.01.22 06:24
Оценка:
Здравствуйте, Codealot, Вы писали:

C>Данные в табличном формате т.е. строки и столбцы, в основном числа. Есть много повторений в столбцах. Какие есть варианты, чтобы сохранить данные максимально компактно и при этом иметь возможность читать их без больших накладных расходов?


А как читать собираемся? Просто когда надо пробежаться по всем записям?
Re[2]: нужна эффективная библиотека для хранения бинарных данных
От: Codealot Земля  
Дата: 07.01.22 15:07
Оценка:
Здравствуйте, Danchik, Вы писали:

D>А как читать собираемся? Просто когда надо пробежаться по всем записям?


Как вариант.
Ад пуст, все бесы здесь.
Re: нужна эффективная библиотека для хранения бинарных данных
От: vaa  
Дата: 13.01.22 05:52
Оценка:
Здравствуйте, Codealot, Вы писали:

C>Данные в табличном формате т.е. строки и столбцы, в основном числа. Есть много повторений в столбцах. Какие есть варианты, чтобы сохранить данные максимально компактно и при этом иметь возможность читать их без больших накладных расходов?


https://developers.google.com/protocol-buffers/docs/csharptutorial
☭ ✊ В мире нет ничего, кроме движущейся материи.
Re[3]: нужна эффективная библиотека для хранения бинарных данных
От: Danchik Украина  
Дата: 13.01.22 06:35
Оценка: 17 (2)
Здравствуйте, Codealot, Вы писали:

C>Здравствуйте, Danchik, Вы писали:


D>>А как читать собираемся? Просто когда надо пробежаться по всем записям?


C>Как вариант.


Вот формат
https://www.bigdataschool.ru/wiki/parquet

Вот либа
https://github.com/aloneguid/parquet-dotnet
Re: нужна эффективная библиотека для хранения бинарных данны
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 13.01.22 09:17
Оценка: -1
Здравствуйте, Codealot, Вы писали:

C>Данные в табличном формате т.е. строки и столбцы, в основном числа. Есть много повторений в столбцах. Какие есть варианты, чтобы сохранить данные максимально компактно и при этом иметь возможность читать их без больших накладных расходов?

https://ru.wikipedia.org/wiki/BSON
https://docs.microsoft.com/ru-ru/aspnet/web-api/overview/formats-and-model-binding/bson-support-in-web-api-21

Ну и https://ru.wikipedia.org/wiki/Protocol_Buffers
https://docs.microsoft.com/ru-ru/aspnet/core/grpc/protobuf?view=aspnetcore-6.0
и солнце б утром не вставало, когда бы не было меня
Отредактировано 13.01.2022 9:23 Serginio1 . Предыдущая версия . Еще …
Отредактировано 13.01.2022 9:19 Serginio1 . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.