الاختيار بالدليل
درس 6 من 6
6الاختيار بالدليل
أسرع بـ٢٠٥ مرات في القراءة، وثمنه ١٢ وثيقة متقادمة من تغيير اسم واحد. هذا الجزء يقيس المقايضة بدل أن يتفلسف فيها، ثم يعطيك إطار قرار من خمسة أسئلة.
ماذا تشاهد في الرسم: تبدأ بالسؤال الأكثر تكرارًا، تقيسه على بيانات حقيقية، تحسب الثمن، ثم تقرّر وتكتب سبب قرارك.
خارطة هذا الجزء
المفاهيم بالترتيب، اضغط أيًّا منها للقفز إليه:
طريقان إلى نفس الفكرة
اختيار طريقة الحفظ مثل اختيار سيارة: الرياضية أسرع، لكنها لا تحمل أغراض العائلة. لا توجد سيارة «أفضل» مطلقًا، بل أنسب لرحلتك. هذا الدرس يعلّمك أن تجرّب وتقيس قبل أن تقرر، لا أن تختار ما هو مشهور.
القرار بالدليل يعني قياس نفس الاستعلام على نفس البيانات في كل نموذج، ثم موازنة السرعة مقابل كلفة الصيانة والاتساق (مثل تكرار البيانات في المستندات). إطار القرار يسأل عن نمط القراءة والكتابة، وحاجة المعاملات، وحجم النمو، وخبرة الفريق، وكلفة التغيير.
المتطلبات قبل البداية
الجزء الخامس
أربعة نماذج، والدرس أن الفهرس أعطى نفس زمن تخطّي الرسم البياني.
استعداد لقراءة رقم
كل حكم في هذا الجزء مسنود بقياس على بياناتنا. والرقم بلا سياق لا يعني شيئًا، فسنذكر دائمًا الحجم والسؤال.
قبول المقايضة
لا يوجد نموذج يفوز في كل شيء. من يبحث عن «الأفضل» لن يجده؛ ومن يسأل «الأفضل لأي سؤال وبأي ثمن» يجد جوابًا دائمًا.
المفاهيم الأساسية
ليست «سريع مقابل بطيء» بل سرعة القراءة مقابل كلفة التحديث. التطبيع يجعل الحقيقة في مكان واحد (تحديث رخيص، قراءة أغلى)، والتكرار يجعلها في أماكن كثيرة (قراءة رخيصة، تحديث أغلى وأخطر).
أول شيء تكتبه قبل أي اختيار: أسئلتك العشرة الأكثر تكرارًا ونسبة تكرار كل واحد. النظام الذي يُقرأ ألف مرة لكل كتابة ليس هو النظام الذي يُكتب فيه كل ثانية.
البيانات المكرّرة تتقادم لحظة تغيّر الأصل. والسؤال الهندسي ليس «هل تتقادم؟»، بل كم ثانية من التقادم مقبولة، ومن يتحمّل الكلفة إن طالت؟ اسم في تعليق: دقائق مقبولة. رصيد حساب: صفر.
اجعل نموذجًا واحدًا مصدرًا للحقيقة، وكل شكل آخر مشتقًّا يمكن إعادة بناؤه منه. من يجعل الشكل المخصّص مصدرًا للحقيقة يصير عاجزًا عن الإجابة عن سؤال جديد.
في نظام موزّع لا تملك تناسقًا فوريًّا وتوفّرًا كاملًا معًا حين تنقطع الشبكة بين العقد، لا بد أن تختار. والقرار ليس تقنيًّا بل تجاريًّا: هل نردّ بجواب قديم أو نردّ بخطأ؟
«لا أعرف أسئلتي بعد» جواب شائع وصادق. وفي هذه الحالة الاختيار الصحيح هو العلائقي: لأنه الأقدر على الإجابة عن سؤال لم تتوقّعه، والهجرة منه لاحقًا أرخص من الهجرة إليه.
كيف يعمل؟
شكل 1، المقايضة بأرقام حقيقية من القياس أدناه
شكل 2، إطار القرار: خمسة أسئلة قبل أن تُسمّي أي منتج
| نسبة القراءة : الكتابة | الميل الطبيعي | السبب |
|---|---|---|
| ١٠٠٠ : ١ | تكرار وأشكال مشتقّة | التحديث نادر، فكلفته مقبولة |
| ١٠ : ١ | علائقي مع فهارس جيدة | لا تطرف يبرّر نفسه |
| ١ : ١ | تطبيع | كل تكرار يصير عبئًا على كل كتابة |
| ١ : ١٠ (كتابة غالبة) | تطبيع + كتابة ملحقية | الأشكال المشتقّة تُبنى لاحقًا |
التمرين: ٢٠٥ أضعاف في القراءة، و١٢ وثيقة متقادمة
قِسنا المقايضة على شاشة واحدة يعرفها كل نظام: صفحة العضو، اسمه ومدينته ومنشوراته وتعليقات كل منشور مع أسماء أصحابها. بنيناها مرتين على نفس البيانات: مرة بالضمّ من أربعة جداول، ومرة كوثيقة واحدة محفوظة مسبقًا.
def profile_joined(u):
row = users[u]
out = {"name": row["name"], "city": cities[row["city_id"]]["name"], "posts": []}
for p_id in posts_by_user[u]: # join 1
p = posts[p_id]
cs = []
for c_id in comments_by_post.get(p_id, []): # join 2
c = comments[c_id]
cs.append({"text": c["text"],
"author": users[c["author_id"]]["name"]}) # join 3
out["posts"].append({"text": p["text"], "comments": cs})
return out
docs = {u: profile_joined(u) for u in range(N)} # the same screen, stored$ python3 profile.py tables: users=50000 cities=300 posts=200000 comments=600000 documents: 50000 one document is 657 bytes of JSON 3 joins per profile 26.64 ms for 2000 profiles 1 document read per profile 0.13 ms for 2000 profiles
--- the cost of the document shape --- before rename: comment author in doc 0 = user29647 renamed user 29647 in the users table joined view now says : renamed_user document still says : user29647 <-- stale documents that must be rewritten to fix one rename: 12
ولاحظ أن الرقم ١٢ خاصّ ببياناتنا: مستخدم شعبي يعلّق كثيرًا قد يظهر في آلاف الوثائق. ولهذا السؤال العملي ليس «كم وثيقة؟» بل «ما أسوأ حالة، ومن يتحمّلها؟»
| مطبّع · جداول | مكرّر · وثائق | |
|---|---|---|
| قراءة ٢٠٠٠ صفحة | ٢٦٫٦٤ مللي ثانية | ٠٫١٣ مللي ثانية |
| تغيير اسم واحد | تحديث واحد | ١٢ وثيقة (في بياناتنا) |
| بعد التغيير مباشرة | صحيح دائمًا | متقادم حتى تُعاد الكتابة |
| سؤال جديد غير متوقّع | استعلام جديد | غالبًا إعادة بناء كل الوثائق |
| مساحة | أقل | أكبر، ٦٥٧ بايت × ٥٠ ألف |
| مناسب لـ | كتابة متكرّرة، أسئلة متنوّعة | قراءة غالبة، شاشة ثابتة |
اعتقاد شائع × الحقيقة
| الاعتقاد | الحقيقة |
|---|---|
| «التكرار سيّئ دائمًا.» | أعطانا قراءة أسرع بـ٢٠٥ مرات. السيّئ هو التكرار بلا خطّة لإعادة البناء. |
| «التطبيع يبطّئ النظام.» | التطبيع يبطّئ القراءة ويسرّع التحديث. والنظام الذي يُكتب فيه كثيرًا يكسب منه. |
| «الوثائقي يلغي التطبيع.» | ينقل كلفته إلى الكتابة: تغيير اسم واحد صار ١٢ وثيقة في بياناتنا، وقد يصير آلافًا. |
| «نختار نموذجًا واحدًا للنظام كله.» | الأنظمة الناضجة تستخدم أكثر من شكل بأدوار واضحة: واحد مصدر للحقيقة والبقية مشتقّة. |
| «التقادم عطل.» | التقادم قرار. العطل هو ألّا تعرف مدّته ولا من يتحمّلها. |
| «لا أعرف أسئلتي، فسأختار الأحدث.» | لا تعرف أسئلتك ← اختر العلائقي. هو الأقدر على سؤال لم تتوقّعه، والخروج منه أرخص. |
جرّب بنفسك
صفحة تُقرأ ١٠٠٠ مرة لكل كتابة، ومحتواها ثابت الشكل. ما الميل الصحيح؟
النسبة ١٠٠٠ : ١ تجعل كلفة التحديث مقبولة، فتكسب الـ٢٠٥ أضعاف في القراءة. لكن احتفظ بمصدر الحقيقة مطبّعًا لتستطيع الإجابة عن سؤال جديد وإعادة بناء الشكل المشتقّ. والخيار الثالث خطر لأنه يجعل الشكل المخصّص مصدرًا للحقيقة.
رصيد محفظة مستخدم. كم ثانية تقادم مقبولة؟
لأن قارئ الرقم سيتّخذ قرارًا ماليًّا به فورًا. التقادم المقبول يتبع كلفة الخطأ لا رغبتنا في السرعة: اسم في تعليق تتحمّل دقائق، والرصيد لا يتحمّل ثانية.
بطاقات مراجعة سريعة
تحقّق من فهمك
1. بجملة واحدة: لماذا الـ٢٠٥ أضعاف ليست دليلًا كافيًا لاختيار الوثائق؟
لأنها تقيس القراءة وحدها، والقياس الثاني أظهر أن تغييرًا واحدًا كلّف ١٢ وثيقة، فالقرار يحتاج الرقمين معًا ونسبة القراءة إلى الكتابة في نظامك.
2. اشرح بالتفصيل من أين جاءت الـ٢٦٫٦٤ مللي ثانية.
كل صفحة تحتاج ثلاث مطابقات: منشورات العضو، وتعليقات كل منشور، واسم صاحب كل تعليق. فصفحة واحدة فيها أربعة منشورات وثلاثة تعليقات لكل منشور تعني ٤ قراءات للمنشورات و١٢ للتعليقات و١٢ لأسماء الأصحاب، نحو ٢٨ قراءة للصفحة الواحدة، أي نحو ٥٦ ألف قراءة لألفي صفحة. والوثيقة تحوّل هذه الـ٢٨ إلى قراءة واحدة لأن العمل أُنجز وقت الكتابة لا وقت القراءة. التكرار لا يلغي العمل، بل ينقله إلى لحظة أخرى.
3. (اكتشف الخطأ) فريق خزّن اسم المستخدم داخل كل تعليق «للسرعة»، ثم تغيّرت الأسماء. ماذا ينقصهم؟
لا ينقصهم القرار بل خطّة إعادة البناء. التكرار قرار سليم للقراءة الغالبة، لكنه يتطلّب: معرفة كل مكان تكرّرت فيه القيمة، وعملية تحدّث تلك الأماكن عند تغيّر الأصل، وحدًّا معلنًا للتقادم، ومراقبة تنبّه إن تجاوزته. وبلا هذه الأربعة يكون النظام صحيحًا يوم بُني وخاطئًا بصمت بعد شهر.
4. عندك نظام ١ : ١ قراءة إلى كتابة. أي النماذج تميل إليه ولماذا؟
التطبيع. لأن كل تكرار سيُدفع ثمنه في كل كتابة تقريبًا، فالمكسب في القراءة يقابله خسارة مساوية أو أكبر، ويضيف فوق ذلك خطر التقادم وتعقيد إعادة البناء بلا مقابل. التكرار يُبرّر نفسه حين تكون القراءة أكثر من الكتابة بمراتب، لا بمرّة.
5. (قرار) الفريق يريد إعادة بناء النظام كله على نموذج وثائقي لأن «القراءة أسرع ٢٠٠ مرة». ما ردّك؟
أن الرقم صحيح وغير كافٍ. وأطلب ثلاثة أشياء قبل أي قرار: نسبة القراءة إلى الكتابة في نظامنا فعلًا، وقائمة القيم المكرّرة مع أسوأ حالة لعدد الأماكن التي تتقادم، وحدًّا للتقادم يقبله أصحاب كل شاشة. ثم أقترح الطريق الأرخص والقابل للتراجع: نُبقي الجداول مصدرًا للحقيقة، ونبني الشكل الوثائقي للشاشة الأثقل وحدها، ونقيس. إعادة بناء النظام كله تجعل القرار غير قابل للتراجع قبل أن نملك دليلًا، وأسوأ من نموذج خاطئ هو نموذج خاطئ لا يمكن الرجوع منه.
مصادر هذا الدرس
مرتّبة بالنوع. ابدأ بالتوثيق الرسمي إذا تبي المرجع الدقيق، وبالمقال أو الفيديو إذا تبي الشرح أولًا.
مقالات2
خلّصت الدرس؟
سجّل الدخول ليُحفظ تقدّمك.