🔶 Avx-Arrow
Formato Colunar Nativo de Alta Performance
Visão Geral do Módulo
Avx-Arrow é um formato de dados colunar desenvolvido do zero para performance máxima em cargas de trabalho científicas e analíticas. Com tipos científicos nativos e otimizações SIMD avançadas, oferece 3-5x mais velocidade que implementações tradicionais.
Zero-Copy
Operações sem cópia de dados para máxima eficiência de memória e cache.
Tipos Científicos
Quaternions, Tensors, Complex e Spinors nativos para computação científica.
Compressão
LZ4, Zstd, Delta, RLE e Dictionary para reduzir uso de memória.
Integração
Bindings para Python/NumPy/Pandas e WebAssembly nativos.
Todos os Tipos Disponíveis
Tipos Primitivos
| Tipo | Descrição | Tamanho | Uso |
|---|---|---|---|
Int8/UInt8 |
Inteiros de 8 bits | 1 byte | Flags, pequenos contadores |
Int16/UInt16 |
Inteiros de 16 bits | 2 bytes | IDs pequenos, portas |
Int32/UInt32 |
Inteiros de 32 bits | 4 bytes | IDs, timestamps |
Int64/UInt64 |
Inteiros de 64 bits | 8 bytes | IDs grandes, timestamps precisos |
Float16 |
Float de meia precisão | 2 bytes | ML inference, GPU |
Float32 |
Float de precisão simples | 4 bytes | Gráficos, física |
Float64 |
Float de dupla precisão | 8 bytes | Ciência, engenharia |
Boolean |
Valor booleano | 1 bit | Flags, máscaras |
Tipos Científicos (Exclusivos)
🔄 Quaternion
Uso: Rotações 3D, orientação espacial, gráficos
let q = Quaternion::new(1.0, 0.0, 0.0, 0.0);
let from_euler = Quaternion::from_euler(0.0, 90.0, 0.0);
let rotated = q * from_euler;
📊 Tensor
Uso: Machine learning, arrays multidimensionais
let tensor = TensorArray::from_shape_vec(
vec![2, 3, 3],
vec![1.0, 2.0, 3.0, ...]
)?;
🔢 Complex
Uso: Processamento de sinais, FFT, física quântica
let c = Complex::new(1.0, 2.0);
let magnitude = c.magnitude();
let phase = c.phase();
⚛️ Spinor
Uso: Física quântica, teoria da relatividade
let spinor = Spinor::new([1.0, 0.0], [0.0, 1.0]);
let evolved = spinor.evolve(hamiltonian, time);
Exemplos de Uso
Exemplo 1: Arrays Básicos
use avx_arrow::array::*;
use avx_arrow::{Schema, Field, DataType, RecordBatch};
// Criar arrays
let ids = Int64Array::from(vec![1, 2, 3, 4, 5]);
let names = StringArray::from(vec!["Alice", "Bob", "Carol", "Dave", "Eve"]);
let scores = Float64Array::from(vec![95.5, 87.3, 92.1, 88.9, 91.0]);
// Schema
let schema = Schema::new(vec![
Field::new("id", DataType::Int64),
Field::new("name", DataType::Utf8),
Field::new("score", DataType::Float64),
]);
// RecordBatch
let batch = RecordBatch::try_new(
schema,
vec![Box::new(ids), Box::new(names), Box::new(scores)]
)?;
println!("Batch: {} linhas, {} colunas",
batch.num_rows(), batch.num_columns());
Exemplo 2: Operações de Computação
use avx_arrow::compute::*;
let a = Int32Array::from(vec![1, 2, 3, 4, 5]);
let b = Int32Array::from(vec![10, 20, 30, 40, 50]);
// Aritmética
let sum = add(&a, &b)?;
let product = multiply(&a, &b)?;
// Agregações
let total = sum_i32(&a)?;
let average = mean_f64(&a)?;
// Filtros
let mask = BooleanArray::from(vec![true, false, true, false, true]);
let filtered = filter(&a, &mask)?;
Exemplo 3: Compressão
use avx_arrow::compression::*;
// LZ4 (rápido)
let data = Int32Array::from(vec![1, 2, 3, 4, 5]);
let compressed = lz4_compress(&data)?;
// Zstd (máxima compressão)
let zstd = zstd_compress(&data, 3)?;
// Delta (séries temporais)
let timestamps = Int64Array::from(vec![1000, 1001, 1002]);
let delta = delta_encode(×tamps)?;
Referência da API
Core Types
| Tipo | Descrição | Métodos Principais |
|---|---|---|
Schema |
Define estrutura de dados | new(), fields(), field() |
Field |
Campo individual | new(), name(), data_type() |
RecordBatch |
Coleção de arrays | try_new(), num_rows(), columns() |
Operações de Computação
Aritméticos
add(a, b)- Adiçãosub(a, b)- Subtraçãomul(a, b)- Multiplicaçãodiv(a, b)- Divisão
Agregações
sum(array)- Somamean(array)- Médiamin(array)- Mínimomax(array)- Máximo
Filtros
filter(array, mask)take(array, indices)slice(array, offset, len)
Joins
inner_join(left, right)left_join(left, right)outer_join(left, right)
Performance
Benchmarks Detalhados (1M elementos)
| Operação | Avx-Arrow | Taxa | Otimização |
|---|---|---|---|
| add_i32 | 1.2 ms | 833k ops/ms | SIMD AVX2 |
| multiply_f64 | 1.5 ms | 666k ops/ms | SIMD AVX2 |
| filter | 0.8 ms | 1.25M ops/ms | Bitmap SIMD |
| sort | 12.5 ms | 80k ops/ms | Radix + SIMD |
Compressão (100MB dados)
| Algoritmo | Tempo | Taxa | Ratio |
|---|---|---|---|
| LZ4 | 45 ms | 2.2 GB/s | 2.5x |
| Zstd (level 3) | 180 ms | 555 MB/s | 4.2x |
| Delta | 12 ms | 8.3 GB/s | 8.0x |
| Dictionary | 25 ms | 4.0 GB/s | 10.0x |
Casos de Uso com Animações
📊 Analytics em Tempo Real
Processe milhões de registros por segundo com agregações, joins e window functions.
let grouped = group_by(&data, &["sensor_id"])?;
let avg = aggregate(&grouped, "temp", AggregateFunc::Mean)?;
📈 Time Series
Análise de séries temporais com compressão Delta otimizada.
let ma_7d = rolling_mean(&prices, 7)?;
let cumulative = cumsum(&prices)?;
🤖 Machine Learning
Features e tensors para pipelines de ML.
let features = TensorArray::from_shape_vec(
vec![10000, 128], data
)?;
Licença
⚖️ Propriedade Exclusiva
Este software é propriedade exclusiva de Nícolas Ávila. Todos os direitos reservados.
Para licenciamento comercial, entre em contato:
- 📧 nicolas@avila.inc
- 🌐 https://avila.inc