Telegram kanalımıza katılarak duyurular ve yenilikler hakkında anlık bildirimler alabilirsiniz . . . . .   Forumda dil, din, ırk ayrımı yapmak yasaktır . . . . .   Lütfen forum kurallarına uyun, gereksiz ve anlamsız mesajlardan kaçının, küfür ve argo kullanmayın . . . . .   Forum içeriğine sınırsız erişim için BURADAN paket satın alabilirsiniz . . . . .

(Node.js) Çoklu Çekirdek Sorgulama İşlemi

  • Konbuyu başlatan Sucrose
  • Başlangıç tarihi
  • 183
  • Cevaplar : 3
Sucrose

Sucrose

Üye
Son görülme
Katılım
2 Mar 2024
Konular
181
Mesajlar
290
Beğeni
10,535
Puanları
0
Konum
Frankfurt
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.


  1. Tüm modüllerimizi yükleyelim; npm install mysql express cluster os
  2. 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());
  3. 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 });
  4. 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}`; };
  5. Fonksiyondan sonra çekirdek sayımızı çekelim;
    const numCPUs = os.cpus().length;
  6. 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!