خالد مرتضى نشر 24 يناير 2022 أرسل تقرير نشر 24 يناير 2022 ان كنا سنقوم بتحويل الوصور الى base64 قبل ارسالها الى المستخدم فلماذا لا نخزنها من البداية في قاعدة البيانات على هيئة base64 1 اقتباس
0 شرف الدين حفني نشر 24 يناير 2022 أرسل تقرير نشر 24 يناير 2022 بوجهٍ عام لا يُفضل تخزين الصور على هيئة تشفيل 64 بيت (base 64 encoding) وذلك لأن هذا النوع من التشفير يزيد من حجم الصورة بما يُقارب ال33% وبالتالي سيتم تخزين 33% زيادة في قاعدة البيانات وبالتالي ستُصبح عمليات القراءة والكتابة من قاعدة البيانات أبطأ مع العلم أن قاعدة البيانات في الغالب تخزن البيانات في القرص الصلب والذي هو بمثابة عنق الزجاجة في الحوسبة حيث أن عمليات القراءة والكتابة في القرص الصلب في غاية البطؤ مقارنةً بالذاكرة العشوائية لذلك من الأفضل تخزين البيانات في القرص الصلب بأقل مساحة ممكن والقيام بأي عمليات في الذاكرة العشوائية. 1 اقتباس
0 Mohamed Abu Abdo نشر 24 يناير 2022 أرسل تقرير نشر 24 يناير 2022 الصور تستهلك الكثير من الذاكرة ,وبوضعها داخل قاعدة البيانات سيتسبب هذا بمرور الوقت في ضرورة تكبير الحيز المتاح لقاعدة البيانات هذا أولاً, ثانياً سيتسبب هذا في تأخر طلبات الإستعلام من وإلي قاعدة البيانات, ثالثا كبر حجم الاستعلام نفسه فعلي سبيل المثال إذا كان المستخدم سيطلب عرض Slides يحتوي علي عدة صور وليكن أربعة صور كل صورة منهم حجمها يفوق 500 كيلوبايت ,مما يعني 2 ميغابايت حجم الصور الإجمالي أو أكثر , عوضاً عن باقي البيانات , في هذا الوضع تخيل أن سرعة الانترنت لدي مستخدمين هذا الموقع أقل من 100 كيلوبايت في الثانية الواحدة أو لنفرض 100, وهذا يعني أن زمن تنفيذ واستلام هذا الطلب يترواح بين 15 إلى 25 ثانية ,في حين أنك قد تكون مضطراً إلى ضبط إعدادات موقعك والسيرفر الذي يديره علي زمن انتظار أو timeOut أقل من هذا الحيز بكثير , مما عني في نهاية الأمر فشل الطلب وظهور رسالة Error time out للمستخدمين الذين يمتلكون سرعة اتصال بالانترنت أقل من 500 كيلوبايت , لا أخفي عليك القول أنني في هذه اللحظة لا يمكنني الدخول إلى موقعك هذا لأنني أمتلك سرعة اتصال أقل من جيدة. غير ذلك كبر حجم الطلبات المرسلة يستغرق الكثير من الموارد المخصصة لموقعك او تطبيقك, البديل لتلك الطريقة هو حفظ اسماء الصور فقط في قاعدة البيانات , بينما يتم حفظ الصور في مكان أخر أو ربما سيرفر أخر تماما وهذا ما يقوم به العديد من المواقع ,فمثلا يمكنك إنشاء موقعك علي أي استضافة ثم حفظ الصور او الملفات علي اسضافة أخري أقل تكلفة وأفضل ك Amazon S3 , وهنا حاول تخيل وضع المستخدم الذي يحاول تحميل موقع به العديد من الصور بالإضافة إلى Slides الموجود في رأس الصفحة الرئيسية, فمع حفظ جميع الصور في قاعدة البيانات مضغوطة بbase64 سيصبح من الصعب الوصول لموقعك. ولكن في حال وجود الصور بعيداً عن قاعدة البيانات سيكون تحميل كل صورة فقط عندما يحاول المستخدم عرضها , كأن يتحرك داخل Slides ,أو يحاول عرض اجزاء من الصفحة تحوي صوراً إلى أخره. ولكن نعود إلى نقطة مهمة ذكرتها في سؤالك"وهي إن كنا نقوم بتحويلها إلى base64 قبل الإرسال!" فأولاً من الأفضل تشفير الصور إلى base64 داخل frontend أو حتي عدم تشفيرها فذلك ليس ضرورياً, وربما في حالات معينة مثل محاولة اخفاء الخادم الذي يتم الاحتفاظ بالصور بداخله, حتي مع هذا الإجراء فأنت تقلل الاعتماد علي قاعدة البيانات في أمور بعينها , ولكن يظل هناك جانب مرهق واقع علي الخادم أو علي الجزء المعني بتحويل الصور وإرسالها للمستخدم. وإن لم يكن الجانب الأمني في اعتبارك فأنصح بإرسال url او لينك الصور بدلا من تحويلها, وبالتأكيد هناك الكثير من الأسباب التقنية التي لم أتطرق إليها. بالتوفيق 1 اقتباس
السؤال
خالد مرتضى
ان كنا سنقوم بتحويل الوصور الى base64 قبل ارسالها الى المستخدم فلماذا لا نخزنها من البداية في قاعدة البيانات على هيئة base64
2 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.