بنية قاعدة البيانات & القرص الصلب السعي الوقت الارتباك

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

  •  03-07-2019
  •  | 
  •  

سؤال

أن بعض واحد ساعدني في محاولة لفهم كيفية القرص الصلب تسعى يعمل.

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

إذا كان متوسط السعي الوقت من القرص الصلب 10ms و سرعة القراءة هو 300MB/s أنا حسبت أنه أسرع في قراءة() من التماس() مع قيمة أقل من 3MB.هو صحيح ؟ هل هناك حمل عند إجراء جديد تسعى ، والتي القراءة الحالية تيار لا ؟

التي تعتقد أن يكون أكثر ملاءمة بنية الملف على فهرس.

Entry1:Value:PointerIntoToData
Entry2:Value:PointerIntoToData
Entry3:Value:PointerIntoToData
Data, Data, Data

Or

Entry1:Value:Data
Entry2:Value:Data
Entry3:Value:Data

عند قراءة تأشيرة دخول إذا كانت القيمة غير صحيحة سيتم تجاهل.لذلك عندما تدفق الملف هو أسرع:1.عند الدخول لا يلزم استخدام تسعى() لتخطي ذلك 2.عند دخول ليست هناك حاجة لقراءته ثم تجاهل البيانات 3.أو استخدام أول هيكل عند الدخول مطلوب تسعى() في مستودع البيانات في نهاية المطاف.

دخول 4 بايت القيمة 8 بايت & البيانات 12KB

هتافات

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

المحلول

كل تسعى استدعاء نظام لا يتغير موقف في الملف التالي قراءة سيكون.فإنه لا تتحرك بالسيارة الرأس.رؤوس محرك الأقراص تتحرك عند قراءة البيانات أو مكتوبة وأنت لا تملك السيطرة المباشرة على ما هو نظام التشغيل سوف تفعل المقبل.

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


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


إذا كانت قاعدة البيانات كبيرة جدا:

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

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

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

و كل من استراتيجيات تنظيم البيانات المستخدمة في الممارسة.على سبيل المثال, MS SQL Server بشكل افتراضي مخازن البيانات الطريقة الأولى:يتم تخزين البيانات بشكل منفصل والمؤشرات تحتوي فقط على البيانات من الأعمدة المفهرسة و عناوين من صفوف البيانات في الملفات.ولكن إذا كان يمكنك تحديد فهرس متفاوت المسافات ثم جميع البيانات المخزنة ضمن هذا المؤشر.كل المؤشرات تشير إلى البيانات عبر فهرس متفاوت المسافات الرئيسية بدلا من العنوان الفعلي.الطريقة الأولى هي أبسط ولكن البعض قد يكون أكثر فعالية بكثير إذا كنت في كثير من الأحيان القيام بمسح يتراوح من البيانات بناء على فهرس متفاوت المسافات.

نصائح أخرى

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

حاول أساليب مختلفة ومقارنة تشغيل مرات.اختبار تحت نظام مختلف الأحمال (أي عندما يكون النظام خاملا باستثناء التطبيق الخاص بك و عندما مشغول).

نعتبر أن التحسينات الخاصة بك على القرص الصلب قد تصبح غير صحيحة عند جديدا أسرع الأقراص الصلبة مختلفة التحسينات الداخلية التي رمي العمل الخاص بك من النافذة.

متتابعة قراءة دائما أسرع من الذي يتطلب رأس تسعى (ليس موضع البحث).نموذجية القرص الصلب perf على قراءة متتابعة 50-60 ميجا بايت/ثانية ، تسعى قطرات وصولا إلى أسوأ ~0.4 MB/sec.مرة واحدة بالسيارة رؤساء تتمركز بشكل أساسي في الحصول على البيانات في الاسطوانة مجانا.ملف ذاكرة التخزين المؤقت نظام يستفيد من هذا قبل القراءة القطاعات من اسطوانة.

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

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

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