@teamnet/ic-orm
Version:
Database Management System for Total.js v4 and standalone
251 lines (188 loc) • 8.82 kB
Markdown
- [__Documentation__](https://docs.totaljs.com/dbms/)
- [Website](https://www.totaljs.com/)
- [__Documentation__](https://docs.totaljs.com/total4/)
- [Chat support](https://platform.totaljs.com/?open=messenger)
- [Join __Total.js Telegram__](https://t.me/totalplatform)
- [Support](https://www.totaljs.com/support/)
- supports `PostgreSQL`, `MySQL`, Total.js `TextDB` and `MongoDB` (with connection pooling)
---
Esta librería incluye documentación completa y detallada para desarrolladores:
Guías completas para trabajar con MongoDB:
- **59 tests certificados** ✅
- [Guía de Inicio Rápido](./docs/mongodb/mongodb-quickstart.md)
- [Connection Pooling y ReplicaSets](./docs/mongodb/mongodb-connection.md)
- [Operaciones CRUD](./docs/mongodb/mongodb-crud.md)
- [Query Builder Avanzado](./docs/mongodb/mongodb-query-builder.md)
- [Operadores Matemáticos](./docs/mongodb/mongodb-operators.md)
- [Operaciones Avanzadas (Scalar, GridFS, Aggregation)](./docs/mongodb/mongodb-advanced.md)
- [Ejemplos Prácticos](./docs/mongodb/mongodb-examples.md)
### 🐘 [PostgreSQL - Documentación Completa](./docs/postgresql/)
Guías completas para trabajar con PostgreSQL:
- **108 tests certificados** ✅
- [Guía de Inicio Rápido](./docs/postgresql/postgresql-quickstart.md)
- [Connection Pooling v16 Optimizado](./docs/postgresql/postgresql-connection.md)
- [Operaciones CRUD](./docs/postgresql/postgresql-crud.md)
- [Query Builder Avanzado](./docs/postgresql/postgresql-query-builder.md)
- [Operadores (GREATEST, LEAST, NOT)](./docs/postgresql/postgresql-operators.md)
- [Operaciones Avanzadas (Transacciones ACID, JSONB)](./docs/postgresql/postgresql-advanced.md)
- [Ejemplos Prácticos](./docs/postgresql/postgresql-examples.md)
**Total: 8,735+ líneas de documentación profesional | 167 tests certificados**
---
## Initialization
- installation `$ npm i @teamnet/ic-orm`
- install MySQL: `$ npm install mysql2`
- install PostgreSQL: `$ npm install pg`
- install MongoDB: `$ npm install mongodb`
```js {"id":"01J5MZWYZG4RMQZZ3JTJEYW4GG"}
const dbms = require('@teamnet/ic-orm');
dbms.init([alias], connection_string);
// @alias {String} Optional, alias for connection string (default: 'default')
// @connection_string {String} A connection string to DB
// PostgreSQL
dbms.init('postgresql://user:pass@localhost:5432/dbname');
dbms.init('mypg', 'postgresql://user:pass@localhost:5432/dbname?max=10'); // with a name and connection pool
// MySQL & Maria DB
dbms.init('mysql://user:pass@localhost:3306/dbname');
dbms.init('mysql', 'mysql://user:pass@localhost:3306/dbname?max=10'); // with a name and connection pool
// MongoDB
dbms.init('mongodb://user:pass@localhost:27017/dbname');
dbms.init('mongo', 'mongodb://user:pass@localhost:27017/dbname?max=10'); // with a name and connection pool
// MongoDB with ReplicaSet
dbms.init('mongodb://user:pass@server1:27017,server2:27017,server3:27017/dbname?replicaSet=rs0&readPreference=secondaryPreferred&max=30');
// Total.js NoSQL embedded
dbms.init('nosql');
dbms.init('mynosql', 'nosql'); // with a name for more DB engines
// Total.js Table
dbms.init('table');
dbms.init('mytable', 'nosql'); // with a name for more DB engines
```
```js {"id":"01J5MZWYZK2TDT6RFFP72RRWVP"}
// Is a global method
var db = DBMS();
// Finds records
// A response: Array
// returns QueryBuilder
db.find('collection_table_name');
db.find('mypg/collection_table_name');
db.find('mynosql/collection_table_name');
db.find('mytable/collection_table_name');
// Finds the one record
// A response: Object
// returns QueryBuilder
db.one('collection_table_name');
db.one('mypg/collection_table_name');
db.one('mynosql/collection_table_name');
db.one('mytable/collection_table_name');
// Inserts a new record
// A response: Number
// returns QueryBuilder
db.insert('collection_table_name', document, [unique]);
db.insert('mypg/collection_table_name', document, [unique]);
db.insert('mynosql/collection_table_name', document, [unique]);
db.insert('mytable/collection_table_name', document, [unique]);
```
ICORM soporta connection pooling para PostgreSQL, MySQL y MongoDB. Los parámetros de configuración se pasan a través de la cadena de conexión.
```js
// Formato: postgresql://user:pass@host:port/dbname?max=10&min=2&timeout=1000
// - max: número máximo de conexiones en el pool (por defecto: 8, recomendado: 8-20)
// - min: número mínimo de conexiones en el pool (por defecto: 2, recomendado: 2-4)
// - timeout: tiempo de inactividad en milisegundos (por defecto: 30000)
// - ssl: habilitar SSL (true/false)
// - pooling: habilitar pooling (por defecto: true)
// - native: usar bindings nativos (opcional)
dbms.init('postgresql://user:pass@localhost:5432/dbname?max=10&min=2&timeout=10000');
// Configuración optimizada para alta concurrencia (PostgreSQL v16):
dbms.init('postgresql://user:pass@10.21.24.200:5432/pro_icone?max=8&min=2&timeout=10000');
```
**Mejoras PostgreSQL v16:**
- ✅ Pool compartido con reconexión automática
- ✅ Reintentos inteligentes con backoff exponencial
- ✅ Manejadores de eventos del pool
- ✅ Soporte para `maxUses` (previene memory leaks)
- ✅ Compatible con PostgreSQL v16 y driver `pg` v8.x
```js
// Formato: mysql://user:pass@host:port/dbname?max=10
// - max: límite de conexiones (connectionLimit) (por defecto: 4)
// - ssl: habilitar SSL (true/false)
dbms.init('mysql://user:pass@localhost:3306/dbname?max=10');
```
```js
// Formato: mongodb://user:pass@host:port/dbname?max=10
// - max o maxPoolSize: número máximo de conexiones en el pool (por defecto: 10)
// - Soporta todas las opciones estándar de MongoDB como replicaSet, readPreference, etc.
dbms.init('mongodb://user:pass@localhost:27017/dbname?max=10');
// Ejemplo con ReplicaSet
dbms.init('mongodb://user:pass@server1:27017,server2:27017,server3:27017/dbname?replicaSet=rs0&readPreference=secondaryPreferred&max=30');
```
Puedes cerrar explícitamente las conexiones para MongoDB y PostgreSQL:
**MongoDB:**
```js
const mongo = require('./mongo');
// Cerrar la conexión explícitamente
await mongo.disconnect();
// O con callback
mongo.disconnect(function() {
console.log('Conexión MongoDB cerrada');
});
```
**PostgreSQL:**
```js
const pg = require('./pg');
// Cerrar todos los pools de PostgreSQL
await pg.disconnect();
// O con callback
pg.disconnect(function(err) {
if (err) console.error('Error al cerrar pools:', err);
else console.log('Pools de PostgreSQL cerrados');
});
```
**En Total.js v4 (al cerrar la aplicación):**
```js
// definitions/events.js
ON('exit', async function() {
console.log('Cerrando conexiones de base de datos...');
await require('icorm/pg').disconnect();
await require('icorm/mongo').disconnect();
console.log('Conexiones cerradas correctamente');
});
```
---
Para aprender más sobre cómo usar icorm con MongoDB o PostgreSQL, consulta la documentación completa:
- 🍃 **[MongoDB - Documentación Completa](./docs/mongodb/)** - Guías, ejemplos y mejores prácticas
- 🐘 **[PostgreSQL - Documentación Completa](./docs/postgresql/)** - Guías, transacciones ACID y operaciones avanzadas
- 📚 **[Índice General](./docs/)** - Vista general de toda la documentación
**Incluye:**
- Guías de inicio rápido paso a paso
- Connection pooling optimizado
- Operaciones CRUD completas
- Query Builder avanzado con todos los operadores
- Operaciones matemáticas y SQL específicas
- Transacciones, Scalar operations, BLOB storage
- Ejemplos prácticos de sistemas completos
- Solución de problemas y mejores prácticas
**✅ Todo verificado con 167 tests certificados (59 MongoDB + 108 PostgreSQL)**
---
## 👥 Autor y Mantenimiento
**icorm v1.2.0** - Actualizado y mantenido por **[Teamnet.S.L.](https://www.teamnet.es)**
- 🔧 Mejoras de PostgreSQL v16 con connection pooling optimizado
- 🔧 Soporte completo para MongoDB con ReplicaSets
- 🔧 Reintentos automáticos con backoff exponencial
- 🔧 Event handlers y gestión avanzada de pools
- 📚 Documentación completa profesional (8,735+ líneas)
- ✅ 167 tests certificados
**Basado en Total.js DBMS** - Framework original por [Total.js Platform](https://www.totaljs.com)
---
## 📄 Licencia
Esta es una versión modificada y mejorada del ORM de Total.js, mantenida por Teamnet.S.L. para uso interno y de clientes.
Para la versión pública original, consulta: [Total.js DBMS](https://docs.totaljs.com/dbms/)