Это одно из тех мест, где полезна небольшая теория. Вам нужно подумать о нескольких вещах:
- Каково разрешение ваших измерений: 0,1 ° или 0,001 °? 1 секунда или одна микросекунда?
- Связаны ли измерения и в каком-то порядке, или случайно объединены?
Допустим, например, что разрешение составляет 0,01 °. Их вы знаете, что ваши значения колеблются от -180 ° до + 180 °, или 35900 различных значений. Lg (35900) & asymp; 16, поэтому вам нужно 16 бит; 14 бит для -90 ° - + 90 °. Ясно, что если вы храните значение такого типа в виде числа с плавающей запятой, вы можете сразу сжать данные наполовину.
Аналогично дате и времени, каков диапазон; сколько битов у вас должно быть?
Теперь, если данные в некотором порядке (например, выборки, взятые последовательно на одном корабле), тогда все, что вам нужно, это начальное значение и дельта; это может иметь большое значение. С кораблем, движущимся со скоростью 30 узлов, положение не может измениться больше, чем на 0,03 градуса в час или на 0,0000083 градуса в секунду. Эти дельты будут очень маленькими значениями, поэтому вы можете хранить их в несколько бит.
Суть в том, что вы можете сделать несколько вещей, но вы должны знать больше о данных, чем мы, чтобы дать рекомендацию.
Обновление: Ой, подождите, фиксированная точка строк ?!
Хорошо, это (относительно) просто. Просто для начала, да, вы хотите преобразовать ваши строки в некоторое двоичное представление. Просто составив элемент данных, вы можете получить
040.00105.0020090518212100Z
который вы можете конвертировать в
| 4000 | short int, 16 bits |
| 10500 | short int, 16 bits |
| 20090518212100Z | 64 bits |
Так что это 96 бит, 12 байтов против 26 байтов.