Primeira Compressão Mundial de Dados da Série Temporal Middle-Out – Parte 1
UPDATE: Algoritmo agora licenciado sob WTFPLv2. Códigos fonte disponíveis em https://github.com/schizofreny/middle-out.
Compressão de saída média já não é uma invenção fictícia do programa da HBO Silicon Valley. Inspirado tanto pelo programa de TV quanto pelos novos conjuntos de instruções vetoriais, criamos um novo algoritmo de compressão sem perdas para dados de séries temporais. A compressão é sempre sobre um compromisso entre velocidade e relação e nunca é fácil equilibrar estes trade-offs, mas todo o conceito de middle-out nos permite empurrar ainda mais Weissman para a pontuação.
Simplesmente quebra a dependência dos dados. Se precisarmos de um valor anterior para calcular um valor atual, precisamos de todos os valores antecedentes. Mas se começarmos a processar a partir de múltiplas posições do pedaço, dependemos apenas dos valores antecedentes dentro deste fragmento. Isto permite-nos, por exemplo, utilizar eficazmente as instruções SIMD.
Em princípio, o algoritmo calcula o XOR de um novo valor e o anterior. Desta forma obtemos uma espécie de diferença entre os valores e podemos armazenar esta diferença sozinhos. Em conjuntos de dados de séries temporais esta diferença tipicamente tem um número de zeros à esquerda e/ou à direita. Assim, as informações que precisamos armazenar são geralmente significativamente menores, mas também precisamos armazenar a contagem de zeros iniciais e o comprimento do fragmento XOR não-zero.
Estes conceitos são geralmente usados em algoritmos de compressões atuais, por exemplo, o Gorilla do Facebook . Por uma questão de eficiência de compressão, o Gorilla opera no nível de bits, mas estas operações são bastante expansivas. Nós projetamos nossa compressão para ser o mais rápido possível, então passamos de granularidade de bit para byte. Como consequência, seria de esperar uma taxa de compressão pior, mas nem sempre é o caso.
Com relação ao middle-out, a compressão opera em blocos de dados, mas isso não é um problema, já que as bases de dados de séries temporais usam blocos de qualquer forma.
E quanto à taxa de compressão?
Vamos examinar a taxa de compressão em dois cenários diferentes. O primeiro cenário – tomamos uma série de duplas (isto é, 0.1, 0.2, 0.3, …) e medimos a taxa de compressão dependendo da porção de pontos de repetição. Para comparação, usamos a compressão Gorilla do Facebook. Por padrão a Gorilla comprime tanto os valores como os timestamps dos dados da série temporal. Para nossos testes, a compressão dos timestamps é desativada.