Sucrose
Üye
Asenkron işlem yapmadan çoklu çekirdek kullanarak anında çekirdek sayınız kadar sorgu attırabileceğiniz ve sorunsuz bir işlem sağlayabileceğiniz bir sistem yapacağız. Toplu kod vermek istemiyorum o zaman öğreticinin bi anlamı olmaz.
Node.js 16.x+ kullanarak yapabilirsiniz.
Node.js 16.x+ kullanarak yapabilirsiniz.
- Tüm modüllerimizi yükleyelim;
npm install mysql express cluster os
- Gerekli modüllerimizi çağırmalıyız;
const mysql = require('mysql'); const express = require('express'); const os = require('os'); const cluster = require('cluster') const app = express(); app.use(express.json());
- Bir Pool oluşturmalıyız ki Veritabanımız düzgün bir şekilde getirilsin;
const pool = mysql.createPool({ host: "<MySQL Bağlantı IP>", user: "root", password: "<MySQL Şifreniz>", database: "<101m Veya 109m'nin bulunduğu veritabanı>", port: 3306 });
- Otomatik kolay sorgu oluşturma ve Restful API'mizeden gelen request için güzel bir fonksiyon yazalım;
const buildQuery = (request) => { const tableName = pool.escapeId(request.table); const columns = request.columns && request.columns.length ? request.columns.map(col => pool.escapeId(col)).join(', ') : '*'; let conditions = '1'; if (request.conditions && request.conditions.length) { conditions = request.conditions.map(({ column, value, operator = '=' }) => { return `${pool.escapeId(column)} ${operator} ${pool.escape(value)}`; }).join(` ${request.logicalOperator || 'AND'} `); } return `SELECT ${columns} FROM ${tableName} WHERE ${conditions}`; };
- Fonksiyondan sonra çekirdek sayımızı çekelim;
const numCPUs = os.cpus().length;
- Cluster yani çoklu çekirdek ve örnek sorgu işlemi yapacağımız bir sistem kodunu girelim ve 80 portu ile açalım;
if (cluster.isMaster) { console.log(`Master ${process.pid} is running`); for (let i = 0; i < numCPUs; i++) { cluster.fork(); } cluster.on('exit', (worker, code, signal) => { console.log(`Worker ${worker.process.pid} died`); }); } else { app.post('/query', (req, res) => { const request = req.body; const query = buildQuery(request); pool.getConnection((err, connection) => { if (err) { console.error('Database connection error:', err); return res.status(500).json({ error: 'Database connection error' }); } connection.query(query, (err, results, fields) => { connection.release(); if (err) { console.error('Query error:', err); return res.status(500).json({ error: 'Query error' }); } res.json(results); }); }); }); app.listen(80, () => { console.log(`Worker ${process.pid} started`); }); }
Postman aracılığıyla sorgu atarken Body'niz ise;
{ "table": "<101 veya 109m olan tablonun ismi>", "columns": [], "conditions": [ { "column": "AD", "operator": "=", "value": "AHMET" }, { "column": "SOYAD", "operator": "=", "value": "ÖZTÜRK" } ] }
Şeklinde gönderdiğiniz de ad soyad ile sorgu işlemi yapar bu dilediğiniz gibi istediğiniz şekilde sorgu işlemi yapabilirsiniz sadece localhost/query olan bir bağlantıya bunu göndermeniz yeterli olacaktır. Postman, Fetch, Ajax, XMLRequest veya Curl ile gönderme işlemi yapabilirsiniz sadece POST olmalı.
TC için conditions içindeki Array>Object olan verilerde column TC yazarak ve valueyide sorgulamak istediğiniz kişi yazarak sonuçlara erişebilirsiniz çok kolay ve çok kullanışlıdır. Aynı zamanda sorgu hızı gereğinden fazla ve promisesiz ve asenkronsuz hızlı bir optimizasyon sağlamaktır. Ram harcamaz!