Object-relational mapping:ما هي أفضل طريقة لتنفيذ حاصل?

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

  •  05-07-2019
  •  | 
  •  

سؤال

ما يجب أن يحدث عندما اتصل $user->get_email_address()?

الخيار 1:سحب البريد الإلكتروني من قاعدة البيانات على الطلب

public function get_email_address() {
    if (!$this->email_address) {
        $this->read_from_database('email_address');
    }
    return $this->email_address;
}

الخيار 2:سحب عنوان البريد الإلكتروني (وغيرها من سمات المستخدم) من قاعدة البيانات على إنشاء الكائن

public function __construct(..., $id = 0) {
    if ($id) {
        $this->load_all_data_from_db($id);
    }
}

public function get_email_address() {
    return $this->email_address;
}

بلدي السؤال الأساسي هو ما إذا كان من الأفضل تقليل عدد استعلامات قاعدة البيانات ، أو ما إذا كان من الأفضل لتقليل كمية البيانات التي يحصل نقلها من قاعدة البيانات.

احتمال آخر هو أنه من الأفضل تحميل السمات التي سوف تحتاج أكثر / تحتوي على الأقل البيانات في إنشاء كائن وكل شيء آخر على الطلب.

متابعة السؤال:ماذا ORM التجريد أطر مثل Activerecord تفعل ؟

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

المحلول

هناك في الحقيقة ليست الجواب الصحيح هذا.يعتمد على كيفية العديد من المستخدمين أنت التحميل في وقت واحد ، كم من النص/blob الحقول في الجدول المستخدم ، سواء المستخدم الخاص بك جدول الأحمال أي الكائنات التابعة.كما aaronjensen يقول ويسمى هذا النمط تحميل كسول - و العكس السلوك (التحميل كل شيء مقدما فقط في حال كنت في حاجة إليها) كما هو معروف حريصة التحميل.

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

public function get_email_address() {
    if (!$this->email_address) {
        $this->load_all_data_from_db($this->id)
    }
    return $this->email_address;
}

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

نصائح أخرى

والتقليل من عدد من الاستفسارات. و# الأمثل للاستفسار هو 0، ولكن إذا كان يجب الاستعلام لأنه ليس مؤقتا، انها 1. الاستعلام عن كل الممتلكات هو وسيلة النار تأكد من النظام الذي سوف النطاق أبدا، لديه مشاكل خلاف واسع، وسوف يسبب بطريقة أكثر الصداع من قيمته.

وأود أن أذكر أن هناك قيمة لتحميل كسول (وهو ما كنت تتحدث عنه في الخطوة 1) <م> إذا انه من غير المحتمل أنك سوف تحتاج البيانات التي يتم تحميلها بتكاسل. إذا كنت تستطيع ذلك، فمن الأفضل أن تكون واضحة، وجلب تماما أو تقريبا بالضبط ما تحتاجه. الوقت الذي تقضيه في أقل الاستعلام، وقتا أقل لديك اتصال مفتوحة وأكثر قابلة للنظام الخاص بك هو.

وأنا أتفق مع aaronjensen، إلا عندما يكون كمية البيانات التي يتم سحب هو من الضخامة بحيث أن عليك أن تبدأ في استخدام ما يصل كمية زائدة من الذاكرة. أنا أفكر فيها على التوالي على 3 حقول النص التي هي كلها كبيرة جدا وكل ما نريده هو حقل معرف.

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