يمكنني تخزين الكثير من البيانات (<= 4GB) في عمود جدول واحد. ولكن هل هو فكرة جيدة؟

StackOverflow https://stackoverflow.com/questions/2091541

  •  21-09-2019
  •  | 
  •  

سؤال

لجعل قصة قصيرة طويلة ، يحتاج جزء من التطبيق الذي أعمل عليه إلى تخزين حجم كبير إلى حد ما من البيانات في قاعدة بيانات ، لجزء آخر من التطبيق لالتقاط لاحقًا. عادةً ما يكون هذا أقل من 2000 صف ، ولكن يمكن أن يتجاوز أحيانًا 300000 صف. يجب تخزين البيانات مؤقتًا ويمكن حذفها بعد ذلك.

لقد كنت ألعب مع أفكار مختلفة ، وتبادر إلى الذهن شيء واحد اليوم. ال LONGTEXT يمكن أن تخزن نوع البيانات بحد أقصى 2^32 بايت ، والذي يعادل 4 جيجابايت. الآن ، هذا كثير من الأشياء التي يجب حشرها في صف طاولة واحد. ضع في اعتبارك أن البيانات ربما لن تتجاوز 60-80 ميغابايت على الأكثر. لكن سؤالي هو ، هل من الجيد فعل ذلك فعليًا؟

الحلان اللذان اللذان اللذان اللذان اللذان اللذتان اللذان اللذان لدي استخدامه هو شيء من هذا القبيل:

  • إدخال جميع البيانات كصفوف فردية في جدول "مؤقت" سيتم اقتطاعه بعد النهاية.
  • إدخال جميع البيانات كسلسلة تسلسلية في LONGTEXT عمود على التوالي الذي سيتم حذفه بعد الانتهاء.

بحتة من منظور الأداء ، هل سيكون من الأفضل تخزين البيانات على أنها 300000 صف فردي ، أو كـ 60 ميغابايت LONGTEXT دخول؟

إذا كان غسلًا ، فمن المحتمل أن أذهب مع LONGTEXT الخيار ، لأنه سيجعل جزء التطبيق الذي يلتقط البيانات أسهل في الكتابة. كما أنه سيربط بشكل أفضل مع جزء آخر ، مما سيزيد من الأداء الكلي للتطبيق.

سأكون أقدر أي أفكار حول هذا.

هل كانت مفيدة؟

المحلول

تسلسل كل تلك البيانات في LONGTEXT... تجديف!! قون

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

على الأقل ، يبدو أن إعطاء هذا الخيار هو الشيء الذكي الذي يجب القيام به. (ضع في اعتبارك أن التقليل من شأن متطلبات الحجم المستقبلية للبيانات بمجرد أن يكون خطأ فادح!)

وإذا قمت بتصميم طاولاتك بشكل صحيح ، فأنا أشك في أن 60 مترًا من البيانات التي تم نشرها على 300.000 صف ستكون أقل كفاءة من جلب 60 مترًا من النص وتحليلها على الواجهة الأمامية.

في النهاية ، السؤال هو: هل تعتقد أن الواجهة الأمامية الخاصة بك يمكن أن تحلل النص بشكل أكثر كفاءة مما يمكن أن يجلبه MySQL؟

نصائح أخرى

يجب أن يكون هذا جيدًا طالما أنت استخدم محرك تخزين الذاكرة. في MySQL ، هذا يعني استخدام محرك تخزين الذاكرة بدلاً من Innodb أو Myisam. وإلا فإن استخدام القرص سيحضر تطبيقك إلى ركبتيه.

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

يمكنك دائمًا تخزينها في قاعدة البيانات كتنسيق صف 300000 واستخدام Memcached لتخزين البيانات حتى لا تضطر إلى القيام بذلك مرة أخرى. يرجى ملاحظة أن Memcached يخزنها في ذكرى الجهاز ، لذا إذا كنت تستخدم الكثير من هذه البيانات ، فقد تتمكن من ضبط انتهاء صلاحية منخفضة. لكن memcached يسرع بشكل كبير من الوقت لجلب البيانات لأنك لست مضطرًا إلى إجراء استعلامات في كل صفحة تحميل.

إذا كنت ستكتب فقط نقطة كبيرة ومؤقتة ، فقد تفكر في الكتابة إلى ملف مؤقت على نظام ملفات مشترك بدلاً من ذلك.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top