Motor de banco de dados nativo em C Native C database engine
40 anos de refinamento. Algoritmo de indexação proprietário. Zero serialização. Zero ORM. Zero overhead. Construído em C puro para sistemas financeiros que exigem o máximo. 40 years of refinement. Proprietary indexing algorithm. Zero serialization. Zero ORM. Zero overhead. Built in pure C for financial systems that demand the best.
Benchmark real — 1 bilhão de registros
Real benchmark — 1 billion records
999.999.999 registros. Chaves de 4, 8 e 16 bytes. Inserção sequencial e aleatória. Três operações — criação de índice, busca e varredura completa (list). Mesmo servidor, mesmo conjunto de dados de origem para todos os engines. A e-tree (motor proprietário do SchipDB) contra BerkeleyDB (BTree), LMDB e RocksDB — sem pegadinhas.
999,999,999 records. 4, 8 and 16-byte keys. Sequential and random insertion. Three operations — index creation, search and full scan (list). Same server, same source dataset for every engine. e-tree (SchipDB's proprietary engine) against BerkeleyDB (BTree), LMDB and RocksDB — no tricks.
| Operação · chave | Operation · key | e-tree | BerkeleyDB | LMDB | RocksDB |
|---|---|---|---|---|---|
| Create · 4B | 1.150.338 | 12.478 | 67.440 | pendentepending | |
| Create · 8B | 819.672 | 9.272 | 50.945 | pendentepending | |
| Create · 16B | 517.330 | 7.445 | 37.545 | pendentepending | |
| Search · 4B | 1.447.178 | 177.429 | 993.048 | pendentepending | |
| Search · 8B | 1.455.604 | 172.860 | 998.003 | pendentepending | |
| Search · 16B | 1.392.757 | 165.180 | 884.173 | pendentepending | |
| List · 4B | 12.894.916 | 6.833.204 | 66.623.736 | pendentepending | |
| List · 8B | 10.309.278 | 6.896.552 | 66.666.666 | pendentepending | |
| List · 16B | 9.433.962 | 6.756.757 | 58.823.529 | pendentepending |
| Operação · chave | Operation · key | e-tree | BerkeleyDB | LMDB | RocksDB |
|---|---|---|---|---|---|
| Create · 4B | 22.727.272 | 109.841 | 119.005 | 292.056 | |
| Create · 8B | 11.904.761 | 107.054 | 83.843 | 294.464 | |
| Create · 16B | 6.711.409 | 83.878 | 57.247 | pendentepending | |
| Search · 4B | 16.666.666 | 394.166 | 1.251.564 | 14.166 | |
| Search · 8B | 14.084.507 | 380.083 | 1.084.598 | pendentepending | |
| Search · 16B | 7.812.499 | 334.784 | 1.016.260 | pendentepending | |
| List · 4B | 199.999.999 | 6.849.315 | 83.333.333 | 3.344.482 | |
| List · 8B | 199.999.999 | 6.896.552 | 71.428.571 | pendentepending | |
| List · 16B | 199.999.999 | 6.756.757 | 71.428.571 | pendentepending |
Arquitetura
Architecture
Cada decisão de design foi tomada para eliminar overhead. O registro em disco é a struct em memória. Não existe camada entre o código e os dados.
Every design decision was made to eliminate overhead. The on-disk record is the in-memory struct. There is no layer between code and data.
Início rápido
Quick start
Criar um banco completo com 80+ tabelas, índices e relacionamentos. Sem configuração, sem migrations, sem ORM.
Create a complete database with 80+ tables, indexes and relationships. No config files, no migrations, no ORM.
/* 1. Defina o schema com Tvar[] */ Tvar a_cliente[] = {{}, {{0,f_null,Ix, Type_cnpj, 1,0, "cnpj", "CNPJ"}}, {{0,f_null,Vw, Type_string,50,0, "rsoc", "Razão Social"}}, {{0,f_null,0, Type_date, 1,0, "dtcad", "Data Cadastro"}}, {{0,f_null,0, Type_bool, 1,0, "ativo", "Ativo"}}, {{0,f_pedido,Lt}}, /* lista de pedidos */ }; /* 2. Crie o banco — 1 chamada, tudo automático */ Tdb_new("meubanco", argv, Tdb_flg_init, F_meubanco, N_meubanco, NULL);
/* 3. Abra para produção */ Db = Tdb_open("meubanco", argv, Ok, F_meubanco, N_meubanco, dbinit); /* 4. Acesse — struct = registro em memória */ R.cliente->cnpj = 12345678000190LL; Tdb_write(P.cliente, Tflat_flg_newrec); /* Busca por índice — Tkey_for automático */ Tkey_for(P.cliente->f, pkeys, NULL, Ok) { printf("%s\n", R.cliente->rsoc); } /* Navegação por lista — O(1), sem JOIN */ Tdb_forlist(P.pedido, f_cliente, Tfile_flg_kinc) { printf("Pedido: %d\n", R.pedido->recid); }
/* Interface SQL via dbsql.c */ Tsql_result *r; r = Tsql_exec(db, "SELECT rsoc, cnpj FROM cliente" " WHERE ativo = 1 LIMIT 100"); r = Tsql_exec(db, "SELECT vendedorid, SUM(val)" " FROM nf GROUP BY vendedorid" " HAVING SUM(val) > 50000"); /* LINK — navegação nativa Lt/Pt */ r = Tsql_exec(db, "SELECT cliente.rsoc, pedido.val" " FROM cliente LINK pedido" " WHERE pedido.val > 1000"); printf("%s\n", Tsql_json(r)); Tsql_free(r);
Comparativo técnico
Technical comparison
SchipDB vs as principais alternativas para sistemas de alta performance.
SchipDB vs the leading alternatives for high-performance systems.
| Característica | Feature | SchipDB | PostgreSQL | BerkeleyDB | LMDB | Redis | RocksDB |
|---|---|---|---|---|---|---|---|
| Serialização de dados | Data serialization | ✓ Zero — struct = discoZero — struct = disk | ✗ AltaHigh | ✗ AltaHigh | ~ Baixa (zero-copy)Low (zero-copy) | ~ MédiaMedium | ✗ AltaHigh |
| HTTP/WebSocket nativo | Native HTTP/WebSocket | ✓ IntegradoIntegrated | ✗ | ✗ | ✗ | ✗ | ✗ |
| Relacionamentos nativos | Native relationships | ✓ Ponteiros O(1)O(1) pointers | ~ JOIN | ✗ | ✗ | ✗ | ✗ |
| ORM necessário | ORM required | ✓ NãoNo | ✗ SimYes | ✗ SimYes | ✗ SimYes | ✗ SimYes | ✗ SimYes |
| COUNT(*) | COUNT(*) | ✓ O(1) — header | ~ O(n) | ~ O(n) | ~ O(n) | ✓ O(1) | ~ O(n) |
| Tipos de domínio BR | Brazilian domain types | ✓ CNPJ, CPF, UF, CEP... | ✗ VARCHAR | ✗ VARCHAR | ✗ | ✗ | ✗ |
| Thread-safe nativo | Native thread-safe | ✓ pthread por tabela | ✓ | ~ | ✓ MVCC | ✓ | ✓ |
| Gerador de código | Code generator | ✓ .h + .c + hash | ✗ | ✗ | ✗ | ✗ | ✗ |
| Proteção de schema | Schema protection | ✓ Hash SHA256 automático | ~ migrations | ✗ | ✗ | ✗ | ✗ |
| Autocorreção | Auto-correction | ✓ NativaNative | ✗ | ✗ | ✗ | ✗ | ✗ |
| Busca aleatória (1B, k16) | Random search (1B, k16) | 1,39M/s | — | 165K/s | 884K/s | — | pendentepending |
| Validado em produção financeira | Validated in financial production | ✓ 40 anos40 years | ✓ | ~ | ✓ | ~ | ~ |
White Paper
White Paper
Entre em contato
Get in touch
Fale com a equipe SchipDB para discutir licenciamento, integração técnica ou uma demonstração com seus dados reais.
Talk to the SchipDB team to discuss licensing, technical integration or a demonstration with your real data.
contato@schip.com.brschip.com.br/schipdb