مضحي Modhy نشر 12 أغسطس 2021 أرسل تقرير نشر 12 أغسطس 2021 (معدل) السلام عليكم استعمل مكتبة pg في النود وفيها طريقتين للاستعلام عن البيانات كالتالي const { Pool, Client } = require('pg') pool.query('SELECT NOW()', (err, res) => { console.log(err, res) pool.end() }) client.connect() client.query('SELECT NOW()', (err, res) => { console.log(err, res) client.end() }) ما الفرق بين الطريقتين ؟ ومتى استخدم الاولى ومتى الاخرى ؟ تم التعديل في 12 أغسطس 2021 بواسطة مضحي Modhy تعديل العنوان 1 اقتباس
0 Wael Aljamal نشر 12 أغسطس 2021 أرسل تقرير نشر 12 أغسطس 2021 يقوم Pool بعمل أكثر من نسخة من client أي أكثر من instance of client والتي بدورها مسؤولة عن اتصال ثابت وحيد وتفيد في تخديم مستخدم واحد، أما Pool يعمل على خلق عدد محدد ولكن كبير نسبيا من client instance أو كينونات المستخدم وهذا يسمح بعمل عدة استعلامات متزامنة والتي بدورها تخدم أكثر من عمل client بنفس الوقت، وإن إغلاق Pool.end سيوقف جميع الاتصالات في المشروع لديك. Clinet توفر اتصال ساكن static connection Pool توفر اتصال ديناميكي dynamic list/pool of Client objects وتسمح لنا بإعادة استخدام الاتصال من النوع Client re-usable open client instances الأفضل إنشاء كائن Pool واستخدامه، هذا يقلل من البطء وضعف الأداء الذي يتولد من إنشاء عدد كبير من الأغراض Client وهدمها و إعادة إنشائها لكل اتصال جديد مما يشكل عبئ على البرنامج وبطء مثلا Pool تقوم بإنشاء 50 وحدة من Clinet والتي تخدم جميع الاتصالات من المستخدمين بنفس الوقت بدون هدم أي منهم، إنما بعد توقف أحد الاتصالات يستقبل أحد هذه ال Clinet الموجودة بالفعل الاتصال الجديد، لذلك لا تقم باستدعاء pool.end حتى آخر مرحلة من تشغيل المخدم أي في Terminate والإنهاء.. نفس هذه التقنية يمكن إيجادها في المسالك ضمن المعالجات Thread Pool لأن عملية قتل و إعادة إنشاء مسلك مكلفة للوقت اقتباس
0 مضحي Modhy نشر 13 أغسطس 2021 الكاتب أرسل تقرير نشر 13 أغسطس 2021 طيب الان عند انشاء اتصال للتأكد من بيانات المستخدم ( اسم المستخدم وكلمة المرور ) هنا استخدم pool او client وهل يتم انهاءه بعد جلب البيانات ؟ شرحك للتصور العام للمفهومين واضح ولكن ربما بالمثال تتضح الصورة لي اكثر، لان الى الان توجد ضبابية عندي لاستخدام احدهما على الاخر اقتباس
0 Salah Eddin Beriani2 نشر 13 أغسطس 2021 أرسل تقرير نشر 13 أغسطس 2021 أعتقد أن كلاهما متماثل. لكن pool.query سيسمح لك بتنفيذ استعلام فردي أساسي عندما تحتاج إلى التنفيذ من عميل يمكن الوصول إليه من مجموعة مؤشرات ترابط العميل. لذلك يمكن استخدام pool.query لتشغيل الاستعلام مباشرة بدلاً من الحصول على عميل ثم تشغيل الاستعلام مع هذا العميل. يمكنك استخدام pool بهذه الطريقة const { Pool } = require('pg') const pool = new Pool() pool.connect((err, client, release) => { if (err) { return console.error('Error acquiring client', err.stack) } client.query('SELECT NOW()', (err, result) => { release() if (err) { return console.error('Error executing query', err.stack) } console.log(result.rows) }) }) نفس العملية في الأعلى بدون استخدام pool const { Client } = require('pg').Client const client = new Client() client.connect() client.query('SELECT NOW()', (err, res) => { if (err) throw err console.log(res) client.end() }) مباشرة استدعاء query من pool const { Pool } = require('pg') const pool = new Pool() // Direct query without acquiring client object. pool.query('SELECT $1::text as name', ['brianc'], (err, result) => { if (err) { return console.error('Error executing query', err.stack) } console.log(result.rows[0].name) // brianc }) اقتباس
0 مضحي Modhy نشر 13 أغسطس 2021 الكاتب أرسل تقرير نشر 13 أغسطس 2021 كلام جميل صلاح وشرحك وضح الصورة اكثر بالنسبة لطريقة الاستخدام السؤال ما الحكمة من تواجد الخيارين ؟ لماذا لا يوجد فقط ال pool ؟ اقتباس
0 Wael Aljamal نشر 13 أغسطس 2021 أرسل تقرير نشر 13 أغسطس 2021 بتاريخ الآن قال مضحي Modhy: لماذا لا يوجد فقط ال pool ؟ لأنه يستخدم موارد الجهاز بشكل أكبر حيث يحجز ذاكرة أكثر وليس ضروريا إن كان عدد المستخدمين المتوقع قليل. اقتباس
0 مضحي Modhy نشر 13 أغسطس 2021 الكاتب أرسل تقرير نشر 13 أغسطس 2021 كم يعني قليل ؟ ومتى اعمل end لهذا ال pool ؟ اقتباس
0 Wael Aljamal نشر 13 أغسطس 2021 أرسل تقرير نشر 13 أغسطس 2021 بتاريخ 9 دقائق مضت قال مضحي Modhy: كم يعني قليل ؟ Client تستعمل عندما يكون عدد الزوار بالعشرات، أما Pool بالآلاف بتاريخ 9 دقائق مضت قال مضحي Modhy: ومتى اعمل end لهذا ال pool ؟ لايتوجب إيقافها طالما أن المخدم يعمل، فهي لا تستجيب لطلبية واحدة فقط، إنما لجميع طلبيات المستخدمين طيلة فترة تشغيل المخدم لا تقم بإيقافها اقتباس
0 مضحي Modhy نشر 13 أغسطس 2021 الكاتب أرسل تقرير نشر 13 أغسطس 2021 بتاريخ 3 ساعات قال Salah Eddin Berriani: pool.connect((err, client, release) => { ما فائدة release هنا ؟ اقتباس
0 Salah Eddin Beriani2 نشر 20 أغسطس 2021 أرسل تقرير نشر 20 أغسطس 2021 بتاريخ On 8/13/2021 at 10:29 قال مضحي Modhy: ما فائدة release هنا ؟ هي وظيفة يمكنك مناداتها بعد انتهاء العملية للتنظيف const client = await pool.connect() try { const res = await client.query('SELECT * FROM users WHERE id = $1', [1]) console.log(res.rows[0]) } catch (error) { console.log(err.stack) } finally { // تحرير العملية client.release() } اقتباس
السؤال
مضحي Modhy
السلام عليكم
استعمل مكتبة pg في النود وفيها طريقتين للاستعلام عن البيانات كالتالي
ما الفرق بين الطريقتين ؟
ومتى استخدم الاولى ومتى الاخرى ؟
تم التعديل في بواسطة مضحي Modhyتعديل العنوان
9 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.