У меня есть устройство, единственной задачей которого является чтение данных с нескольких датчиков каждую секунду. Каждый час (или если не сделан запрос на удаление) он должен отправить данные, собранные в базу данных. Выполнение этого в течение 30 дней делает данные очень большими. Я хотел бы сначала сжать данные, прежде чем отправлять их в базу данных (на другом компьютере) по сети, поскольку пространство и вычислительное время базы данных являются ценным ресурсом.
Данные будут выглядеть примерно так
TimeStamp | Sensor1 | Sensor2 | Sensor3 | Sensor4 | . . . . . | Sensor64
00:00:01 | 1 | 0 | 0 | 0 | | 3
00:00:02 | 1 | 8 | 0 | 0 | | 3
00:00:03 | 1 | 8 | 0 | 0 | | 3
00:00:04 | 1 | 2 | 0 | 0 | | 3
00:00:05 | 0 | 8 | 0 | 0 | | 3
00:00:06 | 0 | 8 | 0 | 0 | | 3
00:00:07 | 0 | 0 | 0 | 0 | | 3
00:00:08 | 0 | 0 | 0 | 0 | | 3
00:00:09 | 0 | 0 | 0 | 0 | | 3
00:00:10 | 1 | 2 | 0 | 0 | | 3
Совершенно определенно будет время, когда данные становятся повторяющимися (TS 7-9 и 2-3) и хотели бы узнать, как сжать эту часть для хранения базы данных, и когдаwebpage / app извлекает данные, затем webpage / app распаковывает данные, которые будут представлены пользователю.
Планируемая база данных, которую нужно использовать, - monggoDB (но она открыта для использования другими базами данных)
Я придумал, чтобы удалить элементы, которые повторяются, и когда передний конец видит, что отсутствуют метки времени, становится понятно, что элемент до метки отсутствующего времени повторился.
TimeStamp | Sensor1 | Sensor2 | Sensor3 | Sensor4 | . . . . . | Sensor64
00:00:01 | 1 | 0 | 0 | 0 | | 3
00:00:02 | 1 | 8 | 0 | 0 | | 3
00:00:04 | 1 | 2 | 0 | 0 | | 3
00:00:05 | 0 | 8 | 0 | 0 | | 3
00:00:07 | 0 | 0 | 0 | 0 | | 3
00:00:10 | 1 | 2 | 0 | 0 | | 3
, но это решениене является надежным и будет более эффективным, если будет много повторяющихся данных.
Есть ли способ каким-то образом взять необработанные данные и сжать их на битовом уровне, аналогично тому, как работает zip / rar, и интерфейс также сможет распаковать его.
просто необработанный расчет, каждый из этих датчиков выплевывает 16-битное целое число
16 bit integer x 64 sensors x 2 628 000 seconds in a month = 2 691 072 000 bits / 2.69 GB
2,9 ГБ за одно нажатие - это невероятно большой