المحتوى عن 'قياس أداء'.



مزيد من الخيارات

  • ابحث بالكلمات المفتاحية

    أضف وسومًا وافصل بينها بفواصل ","
  • ابحث باسم الكاتب

نوع المُحتوى


التصنيفات

  • التخطيط وسير العمل
  • التمويل
  • فريق العمل
  • دراسة حالات
  • نصائح وإرشادات
  • التعامل مع العملاء
  • التعهيد الخارجي
  • التجارة الإلكترونية
  • الإدارة والقيادة
  • مقالات ريادة أعمال عامة

التصنيفات

  • PHP
    • Laravel
    • ووردبريس
  • جافاسكريبت
    • Node.js
    • jQuery
    • AngularJS
    • Cordova
  • HTML5
  • CSS
    • Sass
    • إطار عمل Bootstrap
  • SQL
  • سي شارب #C
    • منصة Xamarin
  • بايثون
    • Flask
    • Django
  • لغة روبي
    • إطار العمل Ruby on Rails
  • لغة Go
  • لغة جافا
  • لغة Kotlin
  • برمجة أندرويد
  • لغة Swift
  • لغة R
  • لغة TypeScript
  • سير العمل
    • Git
  • صناعة الألعاب
    • Unity3D
  • مقالات برمجة عامة

التصنيفات

  • تجربة المستخدم
  • الرسوميات
    • إنكسكيب
    • أدوبي إليستريتور
    • كوريل درو
  • التصميم الجرافيكي
    • أدوبي فوتوشوب
    • أدوبي إن ديزاين
    • جيمب
  • التصميم ثلاثي الأبعاد
    • 3Ds Max
    • Blender
  • مقالات تصميم عامة

التصنيفات

  • خواديم
    • الويب HTTP
    • قواعد البيانات
    • البريد الإلكتروني
    • DNS
    • Samba
  • الحوسبة السّحابية
    • Docker
  • إدارة الإعدادات والنّشر
    • Chef
    • Puppet
    • Ansible
  • لينكس
  • FreeBSD
  • حماية
    • الجدران النارية
    • VPN
    • SSH
  • مقالات DevOps عامة

التصنيفات

  • التسويق بالأداء
    • أدوات تحليل الزوار
  • تهيئة محركات البحث SEO
  • الشبكات الاجتماعية
  • التسويق بالبريد الالكتروني
  • التسويق الضمني
  • استسراع النمو
  • المبيعات

التصنيفات

  • إدارة مالية
  • الإنتاجية
  • تجارب
  • مشاريع جانبية
  • التعامل مع العملاء
  • الحفاظ على الصحة
  • التسويق الذاتي
  • مقالات عمل حر عامة

التصنيفات

  • الإنتاجية وسير العمل
    • مايكروسوفت أوفيس
    • ليبر أوفيس
    • جوجل درايف
    • شيربوينت
    • Evernote
    • Trello
  • تطبيقات الويب
    • ووردبريس
    • ماجنتو
  • أندرويد
  • iOS
  • macOS
  • ويندوز

التصنيفات

  • شهادات سيسكو
    • CCNA
  • شهادات مايكروسوفت
  • شهادات Amazon Web Services
  • شهادات ريدهات
    • RHCSA
  • شهادات CompTIA
  • مقالات عامة

أسئلة وأجوبة

  • الأقسام
    • أسئلة ريادة الأعمال
    • أسئلة العمل الحر
    • أسئلة التسويق والمبيعات
    • أسئلة البرمجة
    • أسئلة التصميم
    • أسئلة DevOps
    • أسئلة البرامج والتطبيقات
    • أسئلة الشهادات المتخصصة

التصنيفات

  • ريادة الأعمال
  • العمل الحر
  • التسويق والمبيعات
  • البرمجة
  • التصميم
  • DevOps

تمّ العثور على 2 نتائج

  1. بعد أن استعرضنا في المقال السّابق أهميّة التجانس ما بين الإعلانات وصفحات الهبوط، وبعد أن استعرضنا أمثلة عن ذلك، سنواصل في هذا المقال مع أمثلة أخرى حول حملات إعلانية ناجحة على الشّبكات الاجتماعية، ثم سنختم بآلية قياس أداء هذه الحملات. دراسة حالة #4: نشر كتاب إلكتروني تعتبر الكتب الإلكترونية طريقة مذهلة لتقديم قيمة ممتازة لعملائك، ولكنها أيضًا طريقة مذهلة لجذب عملاء متخصّصين يبحثون عن حلّ لمشكلة ما. في الحالات المثالية سوف يوفر الكتاب الإلكتروني آلاف النصائح القابلة للتطبيق من جهة القارئ وأيضًا يخبره بمنتجك أنت في وسط كل ذلك. من الجميل أن ترى شركة تطبّق ما تروّج له مثلما نراه بشكل واضح مع HubSpot؛ فكلّ محتوى يقدّموه يوفّرون معه مجموعة من الصور المصمّمة خصّيصًا لكل شبكة تواصل اجتماعي على حدة لجذب وتكوين الصداقات مع العملاء. بلْ إنّهم عندما أطلقوا كتابهم الإلكتروني الجديد "Comprehensive Guide to Content Promotion" قاموا بتحديث غلاف صفحتهم على فيس بوك ليتناسب مع ذلك. وبالطبع كما نتوقّع قد ربطوا ذلك الإعلان بصفحة هبوط خاصة: إذًا فما هو أثر ذلك المنهج عليهم في النهاية؟ أجابت على ذلك Amanda Sibley مديرة حملات HubSpot فأخبرتْنا أنه في اليوم الأول للحملة ساهمت التحويلات القادمة من مواقع التواصل الاجتماعي بأكثر من 15% من إجمالي المشاهدات لذلك الكتاب الإلكتروني! نصيحة لتحسين صفحة الهبوط تأكد من أنَ طول نموذج التسجيل يتناسب مع القيمة التي سيأخذها العميل في المقابل، بالتالي استخدم حقولًا أقل إذا كنت ستعطي الزّائر أشياء مجانية ككتاب إلكتروني لتقليل احتمال أن يخرج الزّائر دون تسجيل. دراسة حالة #5 : إنشاء مسابقات ناجحة المسابقات طريقة سريعة للتسويق وجذب عملاء جُدُد، وتركيز كل التفاصيل في صفحة هبوط خاصّة يسهل تسويق مسابقاتك على القنوات المختلفة، الوصول إلى شريحة أوسع من المتابعين، وأيضا تحديد أيّ القنوات أكثر جذبًا للعملاء. عندما كُلِف موقع Junction بإدارة حملة تسويقيّة سنويّة لصالح موقع Wings كانت النتيجة النهائية لأداء صفحات الهبوط الخاصّة بالموقع: 117% زيادة في عدد المشاركين مقارنة بالسنة السابقة! لم يكلّفهم الكثير ليقوموا بإنشاء صفحات هبوط مخصّصة لكل قناة من قنوات توزيعهم الثلاث مؤديًا ذلك إلى محتوًى في غاية التناسق مع المطلوب. فيما يخص نسب التّحويل، كان نصيب الأسد للإعلانات مدفوعة الأجر على مواقع التواصل الاجتماعي حيث بلغ معدل التحويل عليها 14% متبوعًا بتحويل طبيعي (غير مدفوع الأجر) على الشّبكات الاجتماعية بنسبة 9% والإعلانات التقليدية بنسبة 1% باستخدام الراديو والطباعة. نصيحة لتحسين صفحة الهبوط لا تنس الإشارة إلى كل القواعد والخطوط العريضة لمسابقتك على صفحات الهبوط الخاصّة بها، وقارنها بالقوانين والسياسات العامة الخاصّة بموقعك وقم بالإشارة إلى شروطك بشكل واضح لتحافظ على بقاء زوّارك عندك. نصيحة #6: بيع التذاكر لفعالياتك سواءً كنت تستضيف فعاليّة لمرة واحدة لمئات من المتابعين أو تستضيف اجتماعًا دوريًا لمجموعة صغيرة، فصفحات الهبوط ستساعدك في تسويق فعاليّاتك للجمهور وأيضًا ستسهّل الحصول على المعلومات عن الحاضرين. كل ما تحتاج فعله هو تحديد فئاتك المُستهدَفة وإنشاء إعلانات مناسبة لهم تُحوِلُهم مباشرةً إلى صفحة الهبوط الخاصّة بالفعاليّة. عندما أراد موقع Weddingful تنظيم لقاء في الصيف الماضي قاموا بإنشاء إعلانات على فيس بوك تستهدِف جمهورًا من منطقة "فانكوفر": وقد سمح لهم هذا النوع من استهداف الجمهور بأن يرسلوا أشخاصًا مُؤهّلين جدًا لصفحة الهبوط الخاصّة باللقاء: بتوفير إمكانيّة التسجيل المباشر عبر صفحة الهبوط استطاعوا الحصول على 220 مشترك، في حين أن عدد الأماكن الذي خصّصوه للقاء كانت 200 فقط. نصيحة إضافية من أجل الحصول على لقاءات محليّة ناجحة قُم برفع قائمة عملائك المُحتملين في تلك المنطقة إلى منصّة الإعلانات الاجتماعيّة واستخدمها في إنشاء حملة تسويقيّة مُستهدِفة. سيزيد ذلك من احتمال حضور جمهورك الوفي وسيساعدونك في نشر حملتك للأشخاص الموجودين في شبكاتهم الخاصة. دراسة حالة #7: الإعلان عن إطلاق خاصية ما بإمكانك استخدام صفحات الهبوط للمساعدة في تقييم مدى قبول العملاء لطرح خاصيّة جديدة، كما يمكن استخدامها أيضًا في الإعلان عن إطلاق تلك الخاصيّة إذا ما نالت استحسانهم. عندما أطلقت Intercom خاصيّة الرسائل داخل التطبيق استخدموا مواقع التواصل الاجتماعي ليعلنوا عن ذلك: وهذه هي صفحة الهبوط المرتبطة به: وبمشاركة ذلك على صفحاتهم على مواقع التواصل وتوجيه الناس إلى صفحة هبوط تعريفية حصلوا على 1643 زيارة وعلى 46 عنوان بريد إلكتروني لزبائن مُحتملين جدد مباشرةً من مواقع التواصل الاجتماعي. نصيحة لتحسين صفحة الهبوط مقاطع الفيديو القصيرة طريقة فعّالة لشرح خاصيّة جديدة بدون الحاجة تخصيص جزء كبير من صفحة الهبوط لذلك. اجعل رسالتك موجزةً داخل الفيديو وحاول ما استطعت التركيز على الفوائد التي ستعود على المستخدم. راقب وتتبع نجاحك حسنًا .. أنت الآن على دراية ممتازة باستخدام صفحات الهبوط لحملاتك التسويقيّة على شبكات التّواصل في المستقبل، ولكن هل كل هذا المحتوى الثّري الذي تنشره سيخدمك بالفعل؟ هنالك عدد من الخطوات التي يمكنك اتباعها لإنشاء آلية مراقبة وتتبع خاص بك لقياس مدى نجاحك: الخطوة الأولى : قم بإنشاء ما يلزم من صفحات هبوط وصور لحملتك القادمة جهّز خطّة تسويق جيّدة (في هذا المثال سوف نستخدم "أداة تحسين صفحة الهبوط للمبتدئين"). صمّم ثمّ انشر صفحة الهبوط الخاصّة بحملتك لجذب المشتركين الجُدد، وصمّم صورًا متوافِقة معها لتسويقها على شبكات التواصل: الخطوة الثانية : أنشئ عناوين إنترنت تحتوي معاملات UTM أنشئ عناوين إنترنت تحتوي معاملات UTM لكل قناة اجتماعية باستخدام Google URL Builder. قم بتضمين عنوان صفحة الهبوط، عنوان المصدر (الاجتماعي)، الوسيط (لينكدإن، تويتر، فيسبوك) بالإضافة إلى اسم الحملة: يجب عليك أن تضيف هذه الوسوم إلى كل الرّوابط التي تستخدمها في حملتك (بما فيه الرّسائل البريدية التّرويجية). للمزيد حول وسوم UTM، ألق نظرة على هذا المقال: كيف تستخدم وسوم UTM لمتابعة نجاح حملتك التسويقية عبر البريد الإلكتروني؟ الخطوة الثالثة : قم بإطلاق حملتك وانشرها عبر شبكات التواصل هل تذكر تلك الصّور التي تكلّمنا عنها في الخطوة الأولى؟ الآن حان الوقت لتقوم باستخدامها لما تُطلق حملتك: الخطوة الرابعة : راقب وحسن والآن حان الوقت لتقوم برصد ومراقبة تَقدّم حملتك، إليك كيف يتمّ ذلك: ادخل إلى حسابك الخاص بـ "Google Analytics" ثمّ اضغط على "Aquisition" ثم "Campaigns": اختر من Secondary dimension > Source/Medium: اضغط على "advanced" على يمين مربع البحث. اختر "Exactly matching" ثمّ اكتب اسم الحملة كما كتبتها أثناء بناء الرّابط، وفي هذه الحالة أريد أن أعرض النتائج المتعلقة بـ"LPO-Beginners-Toolkit": انقر على "Apply". والآن تستطيع أن ترى عدد الجلسات التي تمّت، ومن أين يأتي أولئك الزّوار بالإضافة إلى أرقام متعلقة بحالات أخرى. تنبيه : لا يمكن أن تتوقف لا يعني انتهاؤك من تصميم الإعلان الجيّد وصفحة الهبوط المرتبطة به أنّك قد أنهيت حملتك.. بالطبع لا فيجب عليك أن تتفقّد من حين لآخر صفحات هبوطك وإعلاناتك لتتأكّد من أن أداءهما مستمر في التقدّم. جرّب عِدّة عناوين مختلفة، صور جديدة، مفاتيح أو أي شيء آخر مختلف تعتقد أنه سيزيد من نجاح صفحتك واستخدم أكثرها نجاحًا. هناك طرق كثيرة جدّا لاستخدام صفحات الهبوط للمساعدة في دفع الجهود التسويقيّة على شبكات التواصل للأمام، فقط يحتاج الأمر منك إلى عقلٍ منفتح وتفكيرٍ إبداعيّ وحسن إدارة وتنسيق لتحدث فروقًا عظيمة من أشياء صغيرة قد لا تلقي لها بالًا. ترجمة -وبتصرّف- للمقال How to Run Social Media Campaigns That Actually Convert لصاحبه Tia Fomenoff.
  2. MemSQL عبارة عن قاعدة بيانات تعمل مُباشرة من الذاكرة in-memory تستطيع أن تُخدِّم القراءة والكتابة بشكل أسرع من قواعد البيانات التقليديّة، وبالرغم من أنّها تقنية حديثة إلّا أنّها تتعامل بميفاق protocol قاعدة بيانات MySQL لذلك يكون التعامل معها مألوفًا. تضم MemSQL أحدث قدرات MySQL مع ميّزات حديثة مثل دعم JSON والقدرة على عمل upsert للبيانات (تعني كلمة upsert إدراج صف جديد إن لم يكن موجودًا أي insert، أو تحديث هذا الصف إن كان موجودًا أي update). إنّ أحد أهم نقاط تفوّق MemSQL على MySQL هي قدرتها على فصل الاستعلام query عبر عدّة عقد nodes، والمعروفة أيضًا باسم المعالجة المتوازية على نطاق واسع massively parallel processing، ممّا يؤدي إلى سرعة أكبر في قراءة الاستعلامات. سنقوم في هذا الدّرس بتثبيت MemSQL على خادوم Ubuntu، تنفيذ تجارب قياس الأداء benchmarks، والتعامل مع إدراج بيانات JSON عبر عميل سطر الأوامر في MySQL. المتطلبات الأساسيةسنحتاج لمتابعة هذا الدّرس إلى: Ubuntu 14.04 x64 Droplet مع ذاكرة RAM 8 غيغابايت على الأقل (أو خادوم محلّي بنفس المواصفات)مستخدم غير جذري non-root مع صلاحيّات sudo، والذي يُمكِن إعداده عن طريق درس الإعداد الأولي للخادوم مع Ubuntu.الخطوة الأولى – تثبيت MemSQLسنقوم في هذا القسم بتحضير بيئة العمل من أجل تثبيت MemSQL. يتم عرض آخر إصدار من MemSQL على صفحة تحميله، سنقوم بتحميل وتثبيت MemSQL Ops، والذي هو برنامج يدير تحميل وتحضير خادومنا لتشغيل MemSQL بشكل صحيح، الإصدار الأحدث من MemSQL Ops لدى كتابة هذا الدّرس هو 4.0.35. نقوم في البداية بتنزيل ملف حزمة تثبيت MemSQL من موقعها على الإنترنت: wget http://download.memsql.com/memsql-ops-4.0.35/memsql-ops-4.0.35.tar.gzنستخرج extract بعدها الحزمة: tar -xzf memsql-ops-4.0.35.tar.gzأنشأ استخراج الحزمة مجلّدًا يُدعى memsql-ops-4.0.35، نلاحظ أنّ اسم المجلّد يحتوي على رقم الإصدار، لذلك إن قمت بتنزيل إصدار أحدث من الإصدار المحدّد في هذا الدّرس فستملك مجلّدًا مع رقم الإصدار الذي نزّلته. نغير الدليل إلى هذا المجلّد: cd memsql-ops-4.0.35ثم نقوم بتنفيذ script التثبيت والذي هو جزء من حزمة التثبيت التي استخرجناها للتو: sudo ./install.shسنرى بعض الخَرْج output من الـ script، وسيسألنا بعد لحظات إذا ما كنّا نرغب بتثبيت MemSQL على هذا المُضيف host فقط، سنتعلّم تثبيت MemSQL على عدّة أجهزة في درس لاحق، لذا من أجل غرض هذا الدّرس فلنقل نعم yes عن طريق إدخال الحرف y: Installation script prompt and output . . . Do you want to install MemSQL on this host only? [y/N] y 2015-09-04 14:30:38: Jd0af3b [INFO] Deploying MemSQL to 45.55.146.81:3306 2015-09-04 14:30:38: J4e047f [INFO] Deploying MemSQL to 45.55.146.81:3307 2015-09-04 14:30:48: J4e047f [INFO] Downloading MemSQL: 100.00% 2015-09-04 14:30:48: J4e047f [INFO] Installing MemSQL 2015-09-04 14:30:49: Jd0af3b [INFO] Downloading MemSQL: 100.00% 2015-09-04 14:30:49: Jd0af3b [INFO] Installing MemSQL 2015-09-04 14:31:01: J4e047f [INFO] Finishing MemSQL Install 2015-09-04 14:31:03: Jd0af3b [INFO] Finishing MemSQL Install Waiting for MemSQL to start...نمتلك الآن مجموعة MemSQL مُثبَّتة على خادوم أوبونتو لدينا، ولكن نلاحظ من السجلّات السّابقة أنّه تم تثبيت MemSQL مرتين. تستطيع MemSQL أن تعمل بدورين مختلفين: عقدة مُجمِّع aggregator node وعقدة ورقة leaf node، إنّ سبب تثبيت MemSQL مرتين هو أنّها تحتاج على الأقل إلى عقدة مُجمِّع واحدة وعقدة ورقة واحدة لكي يعمل العنقود cluster. إنّ عقدة المُجمِّع aggregator node هي واجهتنا إلى MemSQL، وهي تبدو بالنسبة للعالم الخارجي مشابهة كثيرًا لـ MySQL، فهي تستمع إلى نفس المنفذ port، وبإمكاننا أن نربط إليها أدوات تتوقّع أن تتعامل مع MySQL ومكتبات MySQL المعياريّة، وظيفة المُجمِّع هي أن يعرف عن كافّة عُقَد الورقة leaf nodes لـ MemSQL، يتعامل مع عُملاء MySQL، ويترجم استعلاماتهم إلى MemSQL. تُخزِّن عقدة الورقة leaf node البيانات فعليًّا، فعندما تستقبل عقدة الورقة طلبًا من عقدة المُجمِّع لقراءة أو كتابة البيانات تقوم بتنفيذ هذا الاستعلام وتُعيد النتائج إلى عقدة المُجمِّع، تسمح MemSQL لنا بمشاركة بياناتنا عبر عدّة مضيفين، وتمتلك كل عقدة ورقة قسمًا من تلك البيانات (حتى مع وجود عقدة ورقة واحدة تكون البيانات تكون البيانات مُقسَّمة ضمن تلك العقدة). عندما نملك عدة عقد ورقة يكون المُجمِّع مسؤولًا عن ترجمة استعلامات MySQL لجميع عقد الورقة التي ينبغي أن تشارك في هذا الاستعلام، ومن ثمّ يتلقى الردود من جميع عقد الورقة ويُجمِّع النتيجة في استعلام واحد يعود إلى عميل MySQL لدينا، وهكذا تتم إدارة الاستعلامات المتوازية. يمتلك إعداد المضيف الوحيد لدينا عقدة مُجمِّع وورقة تعملان على نفس الجهاز، ولكن نستطيع إضافة المزيد من عقد الورقة عبر العديد من الأجهزة الأخرى. الخطوة الثانية – تنفيذ تجربة قياس أداءفلنرى مدى السّرعة التي تستطيع أن تعمل بها MemSQL باستخدام الأداة MemSQL Ops والتي تم تثبيتها كجزء من script تثبيت MemSQL. نذهب إلى http://you_server_ip:9000 في متصفحنا: تعطينا الأداة MemSQL Ops لمحة عامّة عن العنقود cluster لدينا، نمتلك عقدتي MemSQL: المُجمِّع الرئيسي وعقدة الورقة. فلنقم بإجراء اختبار السّرعة Speed Test على عقدة MemSQL في جهازنا المفرد، نضغط على Speed Test من القائمة الموجودة على اليسار، وبعدها نضغط على START TEST، وهذا مثال عن النتائج التي قد نراها: لن نشرح في هذا الدّرس كيفيّة تثبيت MemSQL على خواديم متعددة، ولكن من أجل المقارنة أدرجنا هنا قياس أداء من عنقود MemSQL على نظام Ubuntu يملك 8 جيجابايت من الذّاكرة Ram وعدّة عقد (عقدة مُجمِّع وعقدتا leaf): نكون قادرين بزيادة عدد عقد leaf أن نُضاعِف مُعدَّل الإدراج insert، وبالنظر إلى أقسام قراءة الصفوف Rows Read نستطيع أن نرى أنّ عنقود العقد الثلاثة لدينا قادر على قراءة الصفوف بشكل متزامن أكثر بمقدار 12 مليون صف من عنقود العقدة الواحدة وفي نفس المدة الزمنية. الخطوة الثالثة – التعامل مع MemSQL من خلال mysql-clientتبدو MemSQL بالنسبة للعملاء مثل MySQL، فكلاهما تتعامل بنفس الميفاق protocol، ولبدء التخاطب مع عنقود MemSQL لدينا نقوم بتثبيت mysql-client. في البداية نقوم بتحديث apt لكي نُثبِّت الإصدار الأخير من العميل client في الخطوة التالية: sudo apt-get updateنُثبِّت الآن عميل MySQL والذي سيُمكّننا من تنفيذ الأمر mysql: sudo apt-get install mysql-client-core-5.6نحن الآن على استعداد للاتصال بـ MemSQL باستخدام عميل MySQL، سنتصل باستخدام المستخدم الجذري root إلى المضيف 127.0.0.1 (والذي هو عنوان IP للمضيف المحلّي localhost لدينا) على المنفذ 3306، سنقوم بتخصيص رسالة المُحث prompt لتكون <memsql: mysql -u root -h 127.0.0.1 -P 3306 --prompt="memsql> "سنشاهد بعض أسطر الخَرْج متبوعة بالمُحث <memsql. فلنقم بسرد list قواعد البيانات: memsql> show databases; سنشاهد هذا الخَرْج: +--------------------+ | Database | +--------------------+ | information_schema | | memsql | | sharding | +--------------------+ 3 rows in set (0.01 sec)نُنشِئ قاعدة بيانات جديدة تُدعى tutorial: memsql> create database tutorial;ثم نتحوّل لاستخدام قاعدة البيانات الجديدة باستخدام الأمر use: memsql> use tutorial;نقوم بعدها بإنشاء جدول users والذي يملك الحقلين id و email، يجب علينا تحديد نوع لكلا هذين الحقلين، فلنجعل id من نوع bigint و email من نوع varchar بطول 255، سنخبر أيضًا قاعدة البيانات أنّ الحقل id هو مفتاح أساسي primary key والحقل email لا يُمكن أن يكون عَدم Null. memsql> create table users (id bigint auto_increment primary key, email varchar(255) not null);ربّما تلاحظ زمن تنفيذ بطيء للأمر الأخير (15-20 ثانية)، هناك سبب رئيسي يجعل من MemSQL بطيئة في إنشاء هذا الجدول الجديد وهو: توليد الشيفرة code generation. تستخدم MemSQL توليد الشيفرة لتنفيذ الاستعلامات، وهذا يعني أنّه في كل مرة تتم فيها مصادفة نوع جديد من الاستعلامات تحتاج MemSQL توليد وتصريف compile الشيفرة التي تُمثِّل الاستعلام، يتم بعدها نقل الشيفرة إلى العنقود لتنفيذها، وهذا يُسرِّع عمليّة معالجة البيانات الفعليّة ولكن هناك تكلفة من أجل التحضير، تبذل MemSQL جهدها لإعادة استخدام الاستعلامات المُولَّدة مُسبقًا pre-generated queries، ولكن تبقى الاستعلامات الجديدة ذات البُنية التي لم تشاهدها MemSQL من قبل بطيئة. وبالعودة إلى جدول users نقوم بإلقاء نظرة على تعريفه: memsql> describe users;+-------+--------------+------+------+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-------+--------------+------+------+---------+----------------+ | id | bigint(20) | NO | PRI | NULL | auto_increment | | email | varchar(255) | NO | | NULL | | +-------+--------------+------+------+---------+----------------+ 2 rows in set (0.00 sec)فلنقم الآن بإدراج بعض أمثلة عناوين البريد الإلكتروني في الجدول users، وهي نفس الصياغة syntax التي نستخدمها لقاعدة بيانات MySQL: memsql> insert into users (email) values ('one@example.com'), ('two@example.com'), ('three@example.com');Inserting emails output Query OK, 3 rows affected (1.57 sec) Records: 3 Duplicates: 0 Warnings: 0نستعلم الآن عن الجدول users: memsql> select * from users;بإمكاننا رؤية البيانات التي أدخلناها للتو: +----+-------------------+ | id | email | +----+-------------------+ | 2 | two@example.com | | 1 | one@example.com | | 3 | three@example.com | +----+-------------------+ 3 rows in set (0.07 sec) الخطوة الرابعة – إدراج واستعلام JSONتوفِّر MemSQL نوع JSON، لذا سنقوم في هذه الخطوة بإنشاء جدول أحداث events لاستخدام الأحداث الواردة، يمتلك هذا الجدول حقل id (كما فعلنا مع جدول users) وحقل event والذي سيكون من النوع JSON: memsql> create table events (id bigint auto_increment primary key, event json not null);فلنقم بإدراج حدثين، سنقوم في JSON بإرجاع حقل email والذي بدوره يقوم بإعادة الإرجاع إلى مُعرِّفات IDs المستخدمين الذين أدخلناهم في الخطوة الثالثة: memsql> insert into events (event) values ('{"name": "sent email", "email": "one@example.com"}'), ('{"name": "received email", "email": "two@example.com"}');نقوم الآن بإلقاء نظرة على الأحداث events التي أدرجناها للتو: memsql> select * from events;+----+-----------------------------------------------------+ | id | event | +----+-----------------------------------------------------+ | 2 | {"email":"two@example.com","name":"received email"} | | 1 | {"email":"one@example.com","name":"sent email"} | +----+-----------------------------------------------------+ 2 rows in set (3.46 sec)نستطيع بعدها الاستعلام عن كل الأحداث events التي تكون خاصّية JSON لها التي تُدعى name هي النّص “received email”: memsql> select * from events where event::$name = 'received email';+----+-----------------------------------------------------+ | id | event | +----+-----------------------------------------------------+ | 2 | {"email":"two@example.com","name":"received email"} | +----+-----------------------------------------------------+ 1 row in set (5.84 sec)نحاول تغيير هذا الاستعلام لإيجاد تلك الأحداث التي خاصيّة name لها هي النّص “sent email”: memsql> select * from events where event::$name = 'sent email';+----+-------------------------------------------------+ | id | event | +----+-------------------------------------------------+ | 1 | {"email":"one@example.com","name":"sent email"} | +----+-------------------------------------------------+ 1 row in set (0.00 sec)تم تنفيذ هذا الاستعلام الأخير بشكل أسرع من الاستعلام الذي سبقه لأنّنا غيّرنا فقط مُعامِل في الاستعلام، لذا كانت MemSQL قادرة على تخطّي توليد الشيفرة. فلنقم بعمل شيء أكثر تقدّمًا بالنسبة لقاعدة بيانات SQL مُوزَّعة، وهو ضم جدولين على أساس مفاتيح غير أساسيّة non-primary حيث يتم تداخل قيمة ما من الانضمام join بداخل قيمة JSON ولكن يكون الترشيح filter على أساس قيمة JSON مختلفة. نسأل في البداية عن كافّة حقول جدول المستخدمين users مع ضم جدول الأحداث events بمطابقة حقل البريد الإلكتروني email حيث يكون اسم الحدث هو “received email”. memsql> select * from users left join events on users.email = events.event::$email where events.event::$name = 'received email';+----+-----------------+------+-----------------------------------------------------+ | id | email | id | event | +----+-----------------+------+-----------------------------------------------------+ | 2 | two@example.com | 2 | {"email":"two@example.com","name":"received email"} | +----+-----------------+------+-----------------------------------------------------+ 1 row in set (14.19 sec)نجرب بعد ذلك نفس الاستعلام ولكن مع ترشيح الأحداث “sent email” فقط: memsql> select * from users left join events on users.email = events.event::$email where events.event::$name = 'sent email'; +----+-----------------+------+-------------------------------------------------+ | id | email | id | event | +----+-----------------+------+-------------------------------------------------+ | 1 | one@example.com | 1 | {"email":"one@example.com","name":"sent email"} | +----+-----------------+------+-------------------------------------------------+ 1 row in set (0.01 sec)وكما وجدنا سابقًا فإنّ الاستعلام الثاني أسرع بكثير من الأول، تظهر فائدة توليد الشيفرة عند تنفيذ أكثر من مليون صف، كما رأينا في قياس الأداء، إنّ مرونة استخدام قواعد بيانات SQL تفهم JSON وكيفيّة الانضمام بين الجداول هي ميزة قوية للمستخدمين. الخاتمةلقد قمنا بتثبيت MemSQL، تنفيذ تجربة قياس أداء العقد لدينا، التعامل مع العقدة من خلال عميل MySQL المعياري، وتعاملنا مع بعض الميّزات المتقدمة غير الموجودة في MySQL، ينبغي أن يعطينا هذا فكرة واضحة عمّا يمكن أن تفعله قاعدة بيانات SQL داخل الذاكرة لنا. لا يزال هناك الكثير لتعلّمه حول كيفيّة توزيع MemSQL لبياناتنا فعليًّا، كيفية بناء الجداول من أجل أفضل أداء، كيفيّة توسيع MemSQL عبر عدّة عقد، كيفيّة تكرار بياناتنا من أجل توافريّة عالية للبيانات، وكيفيّة تأمين MemSQL. ترجمة -وبتصرّف- لـ How to Install MemSQL on Ubuntu 14.04 لصاحبه Ian Hansen.