easy-database-connector
v1.4.1
Published
A flexible database connector service with MSSQL support, pagination, caching, and encryption
Downloads
165
Maintainers
Readme
Easy Database Connector
Performans odaklı, güvenli ve esnek bir veritabanı bağlantı servisi. MSSQL desteği, sayfalama, önbellek, şifreleme ve işlem yönetimiyle gelir.
Özellikler
- 🔒 Hassas veriler için yerleşik şifreleme desteği
- 🚀 Optimal performans için bağlantı havuzu (connection pooling)
- 📄 Önbellekli sayfalama desteği
- 💾 Redis önbellekleme entegrasyonu
- 🔄 İşlem (transaction) desteği
- 🔌 Toplu işlemler (bulk operations)
- 📦 TypeScript desteği
- 🛡️ Tip güvenliği
- 🔧 Eşzamanlı işlem desteği ve paralelleştirilmiş güvenlik
Kurulum
npm install easy-database-connectorHızlı Başlangıç
import { query, execute, queryWithPagination, transaction } from 'easy-database-connector';
// Temel sorgu
const users = await query<User>({
sql: 'SELECT * FROM users WHERE active = @p0',
parameters: [true]
});
// Önbellekli sayfalama sorgusu
const pagedUsers = await queryWithPagination<User>({
sql: 'SELECT * FROM users',
parameters: [],
page: 1,
pageSize: 10,
orderBy: 'name ASC',
cache: {
key: 'users:page1',
ttl: 300 // 5 dakika
}
});
// Şifrelenmiş veri
await execute({
sql: 'INSERT INTO secure_data (data) VALUES (@p0)',
parameters: ['sensitive information'],
encryption: {
open: { aes: true, masterkey: true },
data: ['0']
}
});
// İşlem (transaction) örneği
await transaction(async (trx) => {
await execute({
sql: 'INSERT INTO users (name) VALUES (@p0)',
parameters: ['John'],
transaction: trx
});
await execute({
sql: 'INSERT INTO logs (action) VALUES (@p0)',
parameters: ['user_created'],
transaction: trx
});
});Yapılandırma
.env dosyası oluşturun:
# Veritabanı Yapılandırması
DB_TYPE=mssql
DB_HOST=localhost
DB_USER=your_user
DB_PASSWORD=your_password
DB_DATABASE=your_database
DB_PORT=1433
DB_ENCRYPT=true
# Şifrelenmiş Sütunlar İçin
MSSQL_SYNNETRIC_KEY_NAME=your_key_name
MSSQL_CERTIFICATE_NAME=your_cert_name
MASTER_KEY_PASSWORD=your_master_key_password
# Redis Yapılandırması
REDIS_ENABLED=true
REDIS_HOST=localhost
REDIS_PORT=6379
REDIS_PASSWORD=your_redis_password
REDIS_TTL=3600API Referansı
Sorgu Fonksiyonları
query<T>(input: ExecuteInput): Promise<T[]>
İsteğe bağlı önbellekleme ile SELECT sorguları çalıştırır.
const users = await query<User>({
sql: 'SELECT * FROM users',
parameters: [],
cache: {
key: 'all-users',
ttl: 3600
}
});queryWithPagination<T>(input: ExecuteInput): Promise<QueryResult<T>>
Toplam sayı ile sayfalanmış bir sorgu çalıştırır.
const result = await queryWithPagination<User>({
sql: 'SELECT * FROM users',
page: 1,
pageSize: 10,
orderBy: 'created_at DESC'
});execute(input: ExecuteInput): Promise<unknown[]>
INSERT, UPDATE, DELETE sorguları veya toplu işlemler çalıştırır.
// Toplu ekleme
await execute({
sql: 'INSERT INTO users',
parameters: users,
bulk: {
columns: [
['name', mssql.NVarChar(100)],
['email', mssql.NVarChar(100)]
],
batchSize: 1000
}
});transaction<T>(callback: (trx: Transaction) => Promise<T>): Promise<T>
Bir işlem içinde birden fazla sorgu çalıştırır.
await transaction(async (trx) => {
await execute({
sql: 'DELETE FROM users WHERE id = @p0',
parameters: [1],
transaction: trx
});
});Tipler
ExecuteInput
interface ExecuteOptions {
sql: string;
parameters?: SqlValue[];
encryption?: {
open: boolean | { aes?: boolean; masterkey?: boolean };
data: string[];
};
bulk?: {
columns: ColumnType[];
batchSize?: number;
};
page?: number;
pageSize?: number;
orderBy?: string;
cache?: {
key: string;
ttl?: number;
};
transaction?: mssql.Transaction;
}QueryResult
interface QueryResult<T> {
data: T[];
pagination: {
page: number;
pageSize: number;
total: number;
totalPages: number;
};
}Paralel İşlemler ve Performans İyileştirmeleri
Bu kütüphanenin son sürümü, özellikle paralel işlemlerde ve AES şifreleme işlemlerinde performans ve güvenilirliği artırmak için önemli iyileştirmeler içermektedir:
- İyileştirilmiş Anahtar Yönetimi: Eşzamanlı işlemler için mutex tabanlı güvenlik ve doğru anahtar izolasyonu
- Bağlantı Havuzu Optimizasyonu: Güvenilir havuz yönetimi ve bağlantı ömrü kontrolü
- Hata İzleme ve Günlükleme: Kapsamlı hata izleme ve tanılama yetenekleri
- Önbellek Yönetimi: Redis bağlantı havuzu ve güvenilir önbellekleme
- Hafıza Yönetimi: Toplu işlemlerde ve AES şifreleme işlemlerinde geliştirilmiş hafıza yönetimi
En İyi Kullanım Örnekleri
- Şifrelenmiş verileri işlerken daha küçük toplu işlem boyutları kullanın:
await execute({
sql: 'INSERT INTO secure_data',
parameters: largeDataset,
bulk: {
columns: [
['data', mssql.NVarChar(500)],
],
batchSize: 500 // Şifrelenmiş veriler için daha küçük batch boyutu
},
encryption: {
open: { aes: true, masterkey: true },
data: ['data']
}
});- İşlemlerde bağlantı havuzunu verimli kullanmak için:
// Uzun süreli büyük işlemler yerine daha küçük, bağımsız işlemler tercih edin
const batchSize = 1000;
for (let i = 0; i < items.length; i += batchSize) {
const batch = items.slice(i, i + batchSize);
await transaction(async (trx) => {
for (const item of batch) {
await execute({
sql: 'INSERT INTO items (name) VALUES (@p0)',
parameters: [item.name],
transaction: trx
});
}
});
}Katkıda Bulunma
Katkılarınızı bekliyoruz! Lütfen bir Pull Request göndermekten çekinmeyin.
Lisans
MIT Lisansı
