الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

Mysql vs NoSql

بدأه بسام العيساوي في 16 أبريل 2012 · 12 رد · 1,745 مشاهدة · في الأخبار والنقاشات التقنية
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

أقوم حاليا بمعاينه موقع إنترنت قمت ببنائه ولاحظت أن هناك بطئ بسبب كثرة جمل السيكول التي أستخدمها خصوصا في عمليات الإعدادات مثل عنوان الموقع وماتحتويه الصفحة ورسائل الخطأ كل هذا مسجل في جدول إسمه إعدادات ويحتوي على حقلين أساسيين هما الإعداد والقيمه

بعض الحلول التي قمت بها هي تسجيل جميع محتويات الجدول في مصفوفه خاصه بالجلسه وبذلك لن يتم عمل عرض للجدول في كل طلب للموقع , المشكله أن هذا الجدول ربما يصل عدد الإعدادات فيه إلى ألف إعداد وبحجم أربعه ميغا أو أكثر , لذلك رأيت أن هذا الحل غير منطقي

الحل الثاني هو إستخدام الملفات فقمت بحذف الجدول وإستبداله بملف يتم تخزين كل إعدادت بجانبه قيمته , تم الأمر ولكن عمليه عرض الملف والبحث فيه في كل طلب للموقع جعلني أحتار فهل هذا منطقي وماهي أفضل طريقه للتعامل مع مثل هذه المشكله

CMS Sfhati , Website Generator


نظام إدارة المحتوى صفحتي ... جربه الآن 


 


small-logo.png

#2

- صراحة أنا مهتم لمشاركتك وبودي لو تطلعنا لاحقا ماذا فعلت لتحسين الأداة

- هل استخدام الـ XML ممكن يفيد؟

مثلا تعمل دالة تستخرج محتويات الجدول إلى ملف XML، وأي تعديل على الجدول يتم انشاء XML جديد

تقوم بالقراءة من ملف الـ XML

هذا ألاحظه في البرامج التي فيها عدة لغات، يجعلون كل ملف لغة في ملف XML وإذا غيرت اللغة يتغير ملف XML المقروء

#3
اقتباس
بعض الحلول التي قمت بها هي تسجيل جميع محتويات الجدول في مصفوفه خاصه بالجلسه وبذلك لن يتم عمل عرض للجدول في كل طلب للموقع , المشكله أن هذا الجدول ربما يصل عدد الإعدادات فيه إلى ألف إعداد وبحجم أربعه ميغا أو أكثر , لذلك رأيت أن هذا الحل غير منطقي

قم بعمل Caching == أي قم بالطلب من الذاكره أولا فإن وجدت القيمه إرجعها و إلا قم بالطلب من قاعدة البيانات ... و ما تقوم بطلبه إحفظه في الذاكره للطلب القادم و هكذا .... طبعا على مستوى الجلسه ...

تم تعديل هذه المشاركة بواسطة __Unknown في 17 أبريل 2012 في 13:49

#4

لا تفكر بNoSQL الا اذا كنت تتوقع حجم traffic على موقعك يتعدى بضعة آلاف طلب لكل ثانية, غير هذا فأنت تدفع ثمناً غالياً مقابل لا شئ تقريباً

مصري في بلاد الفرنجة.

قريباً اقرأ مقالاتي على It-scoop

#5
اقتباس
لا تفكر بNoSQL الا اذا كنت تتوقع حجم traffic على موقعك يتعدى بضعة آلاف طلب لكل ثانية, غير هذا فأنت تدفع ثمناً غالياً مقابل لا شئ تقريباً

و إن كان عدد البيانات المخزنه سيتعدي مئات الملايين ....

2
#6
__Unknown كتب:

و إن كان عدد البيانات المخزنه سيتعدي مئات الملايين ....

التخزين نفسه ليس مشكلة, على العكس قواعد البيانات العلائقية أكثر كفاءة في تخزين البيانات بسبب طبيعة الNormalization و التي تقلل جداً من التكرار في البيانات, السؤال اذا كنت ستحتاج لسرعة عالية جداً في القراءة و الكتابة حتى يمكنك الاستجابة لعدد الطلبات الهائل, مع العلم أن هناك تضحيات ستقدمها على شكل التضحية ببعض خواص الACID و خاصة خاصية الConsistency و هي ما تقلل سرعة الكتابة و القراءة في القواعد العلائقية التقليدية.

بعض التطبيقات يستحيل عليها التضحية بهذه الخاصية مهما كانت الظروف مثل التطبيقات التي تتعامل مع الأموال أو الحجوزات أو أي بيانات تعبر عن موارد حقيقة في الطبيعة.

1

مصري في بلاد الفرنجة.

قريباً اقرأ مقالاتي على It-scoop

#7

أشكر الردود

اقتباس
- صراحة أنا مهتم لمشاركتك وبودي لو تطلعنا لاحقا ماذا فعلت لتحسين الأداة

- هل استخدام الـ XML ممكن يفيد؟

مثلا تعمل دالة تستخرج محتويات الجدول إلى ملف XML، وأي تعديل على الجدول يتم انشاء XML جديد

تقوم بالقراءة من ملف الـ XML

هذا ألاحظه في البرامج التي فيها عدة لغات، يجعلون كل ملف لغة في ملف XML وإذا غيرت اللغة يتغير ملف XML المقروء

مافعلته الإبتعاد عن أي دوال جاهزه لأن الأمر بسيط جدا قيمتين فقط يتم تخزينهما فلماذا ال xml ودوالها الكثيره ؟

فعليا يتم تخزين المفتاح وبجانبه القيمه مشفره 64 بت ليتم حذف أي أسطر أو ترميز معين وتكون القيمه على سطر واحد بالإضافه إلى رقم يدل على فتره بقاء هذا الإعداد مثل عمليه cache للقيمه , هذا مثال لسطر في الملف

home_page;Mzc=;155520000;1334603212

اقتباس
قم بعمل Caching == أي قم بالطلب من الذاكره أولا فإن وجدت القيمه إرجعها و إلا قم بالطلب من قاعدة البيانات ... و ما تقوم بطلبه إحفظه في الذاكره للطلب القادم و هكذا .... طبعا على مستوى الجلسه ...

هذا الحل المبدئي الذي قمت به ولكنني أعتقد أنه يؤثر في الماموري في حال وجود بيانات بحجم كبير

اقتباس
لا تفكر بNoSQL الا اذا كنت تتوقع حجم traffic على موقعك يتعدى بضعة آلاف طلب لكل ثانية, غير هذا فأنت تدفع ثمناً غالياً مقابل لا شئ تقريباً

في حاله وجود جمله سيكول واحده في الموقع فإنني أنتظر بضعه آلاف طلب في الثانيه ولكن في حال وجود بضعه آلاف طلب في الموقع هنا سيكون الطلب من شخصين لنفس الصفحة يعني عشرات الآلاف من الترافيك وهذا ماكنت أسأل عنه ومن خلال إجابتك فإن الملفات أفضل من قواعد البيانات في حالتي هذه إذ أقوم بتخزين قيمتين بدون وجود روابط علائقيه , وبنفس الوقت لم أستغني عن باقي الجداول نظرا لحاجتي إلى جمل السيكول و العلاقات بين الجداول

الخلاصه عمليه تخزين متغيرات كملفات مؤقته وفتحها والقراءه منها أسرع وأفضل من عمليه تخزينها في جدول ما وعرض بياناته في كل طلب ... صحيح ؟

تم تعديل هذه المشاركة بواسطة بسام العيساوي في 18 أبريل 2012 في 03:47

CMS Sfhati , Website Generator


نظام إدارة المحتوى صفحتي ... جربه الآن 


 


small-logo.png

#8
اقتباس
في حاله وجود جمله سيكول واحده في الموقع فإنني أنتظر بضعه آلاف طلب في الثانيه ولكن في حال وجود بضعه آلاف طلب في الموقع هنا سيكون الطلب من شخصين لنفس الصفحة يعني عشرات الآلاف من الترافيك وهذا ماكنت أسأل عنه ومن خلال إجابتك فإن الملفات أفضل من قواعد البيانات في حالتي هذه إذ أقوم بتخزين قيمتين بدون وجود روابط علائقيه , وبنفس الوقت لم أستغني عن باقي الجداول نظرا لحاجتي إلى جمل السيكول و العلاقات بين الجداول

لم أفهم ردك, أعذرني

اقتباس
الخلاصه عمليه تخزين متغيرات كملفات مؤقته وفتحها والقراءه منها أسرع وأفضل من عمليه تخزينها في جدول ما وعرض بياناته في كل طلب ... صحيح ؟

بالطبع لا, في النهاية أنت تريد أن تبحث عن قيمة محدد داخل مجموعة هائلة من البيانات, و عملية البحث لو لم تكن باستخدام indexing قوي ستستغرق أضعاف اضعاف ما يمكن أن تكون عليه

مصري في بلاد الفرنجة.

قريباً اقرأ مقالاتي على It-scoop

#9

السلام عليكم..

بسام العيساوي كتب:

الخلاصه عمليه تخزين متغيرات كملفات مؤقته وفتحها والقراءه منها أسرع وأفضل من عمليه تخزينها في جدول ما وعرض بياناته في كل طلب ... صحيح ؟

هل تقصد تخزين قيمة واحدة، أم تغيزين مصفوفة من القيم، ثم تحويلها لمصفوفة حقيقية، و الوصول للقيمة عبرها؟

في الحالتين - أعتذر لأني لم أقرأ كل الموضوع و الردود - أعتقد و الله أعلم أن ذلك أسرع، فإذا كانت طريقتك للوصول لتلك البيانات ذات كفاءة عالية، فهي أفضل كثيرًا جدًا من الاتصال مع خادم MySQL، ثم الاتصال بالقاعدة، ثم الاتصال بالجدول (عبارة عن ملف كبير!)، ثم البحث فيه!

لكن فكرة المصفوفة - هذا إن كنت تتحدث عنها ولم أكن قد فهمتك بشكل خاطئ - (و إن كانت تحتاج لتطبيق منظم معين حتى تكون طريقة "نظيفة")، ستكون كأنك تتعامل - بالضبط - مع قاعدة بيانات إما Key-based أو Document-based، و تلك من أنواع الـNoSQL!

شكرًا..

#10
اقتباس
لم أفهم ردك, أعذرني

أقصد لو كان السكريبت لسبب ما يقوم بعمل إستعلامات متتاليه عددها 1000 إستعلام , بهذه الحاله لو قام عشر أشخاص بتصفح الموقع في نفس الوقت فسيتم الإستعلام 10000 مرة خلال أقل من ثانيه !

لو قلبنا العمليه السابقه وجعلناها على ملف بحيث يتم فتح الملف والبحث فيه عن قيمه فهل تكون العمليه أفضل , أنا جربت العمليه في الحاله الأولى يعطي في معظم الأحيات رساله خطأ تفيد بأن عدد الطلبات لقاعده البيانات كبير , في الحاله الثانيه لايعطي الرساله ولاحظت سرعه في الطلب ملاحظه بدون حساب فارق الزمن بين الحالتين .

اقتباس

هل تقصد تخزين قيمة واحدة، أم تغيزين مصفوفة من القيم، ثم تحويلها لمصفوفة حقيقية، و الوصول للقيمة عبرها؟

في الحالتين - أعتذر لأني لم أقرأ كل الموضوع و الردود - أعتقد و الله أعلم أن ذلك أسرع، فإذا كانت طريقتك للوصول لتلك البيانات ذات كفاءة عالية، فهي أفضل كثيرًا جدًا من الاتصال مع خادم MySQL، ثم الاتصال بالقاعدة، ثم الاتصال بالجدول (عبارة عن ملف كبير!)، ثم البحث فيه!

لكن فكرة المصفوفة - هذا إن كنت تتحدث عنها ولم أكن قد فهمتك بشكل خاطئ - (و إن كانت تحتاج لتطبيق منظم معين حتى تكون طريقة "نظيفة")، ستكون كأنك تتعامل - بالضبط - مع قاعدة بيانات إما Key-based أو Document-based، و تلك من أنواع الـNoSQL!

شكرًا..

يتم التخزين والإستعلام عن طريق تحويل كلمات مفتاحيه داخل الملف إلى مصفوفه وتحويل الأسطر إلى مصفوفه أخرى والوصول إلى السطر عن طريق المصفوفه الأولى ثم تعديل السطر أو عرض محتوياته

فكرت في لو أني أستخدمت دوال xml ستكون النتيجه مشابهه للمايسيكول نظرا لبطئ العمليه على ملفات صغيره (تم ملاحظتها بدون حساب).

CMS Sfhati , Website Generator


نظام إدارة المحتوى صفحتي ... جربه الآن 


 


small-logo.png

#11

كان واجهني مشكلة قد تكون مشابهة لهذه الحالة

المشروع كان مكتبة رقمية وموجود عشر آلاف كتاب وكل كتاب فيه مئة صفحة تقريبا يصير العدد مليون صفحة

كان النظام السابق يجعل كل صفحة كتاب في ريكورد في الداتابيس

والنظام الجديد راح اجعله web-based

فكرت قليلا، قلت الآن نظام التشغيل فيه file system اذا طلبت اي ملف يعطيك اياه مباشرة ليش نستخدم قواعد بيانات

بعدين جعلت كل كتاب عبارة عن مجلد folder والعنوان هو رقم الكتاب

وداخل هذا الـ folder فيه الصفحات وكل صفحة ملف اكس ام ال

وأيضا داخل المجلد فيه ملف info.xml بيانات الكتاب اسم المؤلف وعنوان الكتاب والتصنيف

والموضوع صار سهل جدا وتخلصت من قواعد البيانات

- الموضوع يعتمد على حسب البيانات الي عندك اذا كانت البيانات التعديل عليها قليل، أحد الحلول أنك تنشأ الـ front-end أو الواجهات كل ما حصل تعديل من خلال الادمن وبالتالي تكون static للزوار أما الادمن اذا عدل شيء تنشأ نسخة view جديدة

1
#12

السلام عليكم ...

كأني فهمت ان البيانات التي تتحدث عنها ثابتة وهي جزء من اعدادات النظام ولكن في نفس الوقت قابلة للتعديل/الزيادة من قبل ادمن النظام، وكانك تتحدث عن php ... لوكانت asp.net لكان هناك حل وهو تحميل هذه البيانات في الذاكرة بشكل دائم داخل Collection أو List<> ...

حل مشكلتك الفعلي هو رفع البيانات في ذاكرة السيرفر دائما Cached سواء من اعدادات قاعدة البيانات (قرأت مرة عن Oracle) بأنك يمكن تعريف cached table وهناك اسلوب آخر إذا كانت PHP وهو تعريف برنامج C او C++ صغير يبقى Resident في الذاكرة ... مثل windows service أو Linux daemon ... وتحميل البيانات في ذاكرة الكمبيوتر من خلاله والتعامل معه عن طريق استدعاؤة بالـ Parameters المطلوبة واسترجاع النتيجة فورا وارسالها إلى الـ Client.

هناك اسلوب آخر بسيط وهو تعريف memory disk drive والابقاء على طريقتك في استرجاع ملف ولكن يتم وضعه على الـ Memory disk بدلا من الهاردديسك الخاص بالسيرفر.

(طبعا جميع هذه المعطيات مبنية على فهمي للموضوع .. وعلى حجم حوالي 4 ميجا بايت بيانات نسبيا لا شيء بالنسبة للسيرفر، تبقى هناك بقية للموضوع على مستوى التفاصيل مثل اللغة، ونظام التشغيل، وقاعدة البيانات)

تم تعديل هذه المشاركة بواسطة sanousy.howari في 22 أبريل 2012 في 02:28

سنوسي حواري

عمان - الأردن

المدونة

بريد الكتروني: sanousy.howari@gmail.com

سكايب: Sanousy.howari

فيسبوك : facebook

تويتر: Twitter

#13

نظام الملفات أثبت فعاليته في هذه الحاله فالسرعه عاليه ولا يوجد خطأ وجود الكثير من الإستعلامات الذي كان يظهر سابقا , حتى الآن المشكله تم حلها بشكل إيجابي وبدون تعديل كبير في الكود فقد كنت أستخدم داله لعمليه الحفظ والإسترجاع وتم تعديل كود الداله فقط والحمد لله

تم تعديل هذه المشاركة بواسطة بسام العيساوي في 22 أبريل 2012 في 09:18

CMS Sfhati , Website Generator


نظام إدارة المحتوى صفحتي ... جربه الآن 


 


small-logo.png

مواضيع مشابهة