التحكم في التزامن

في مجال تكنولوجيا المعلومات وعلوم الحاسوب ، وخاصة في مجالات برمجة الحاسوب وأنظمة التشغيل والمعالجات المتعددة وقواعد البيانات ، يضمن التحكم في التزامن توليد نتائج صحيحة للعمليات المتزامنة ، مع الحصول على تلك النتائج بأسرع وقت ممكن.

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

على سبيل المثال، يمكن أن يؤدي الفشل في التحكم في التزامن إلى تلف البيانات نتيجة لعمليات القراءة أو الكتابة الممزقة .

التحكم في التزامن في قواعد البيانات

تعليقات:

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

يضمن التحكم بالتزامن في أنظمة إدارة قواعد البيانات (DBMS؛ على سبيل المثال، Bernstein et al. 1987 ، وWeikum and Vossen 2001 )، والكائنات المعاملاتية الأخرى ، والتطبيقات الموزعة ذات الصلة (مثل الحوسبة الشبكية والحوسبة السحابية ) تنفيذ معاملات قواعد البيانات بشكل متزامن دون الإخلال بسلامة بيانات قواعد البيانات المعنية . وبالتالي، يُعد التحكم بالتزامن عنصرًا أساسيًا لصحة أي نظام حيث يمكن لمعاملتين أو أكثر من معاملات قواعد البيانات، المنفذة بتداخل زمني، الوصول إلى نفس البيانات، كما هو الحال عمليًا في أي نظام قاعدة بيانات للأغراض العامة. ونتيجة لذلك، تراكمت كمية هائلة من الأبحاث ذات الصلة منذ ظهور أنظمة قواعد البيانات في أوائل سبعينيات القرن الماضي. وقد تم توضيح نظرية راسخة للتحكم بالتزامن في أنظمة قواعد البيانات في المراجع المذكورة أعلاه: نظرية التسلسلية ، والتي تسمح بتصميم وتحليل أساليب وآليات التحكم بالتزامن بفعالية. كما تم تقديم نظرية بديلة للتحكم بالتزامن في المعاملات الذرية على أنواع البيانات المجردة في ( Lynch et al. 1993 )، ولن يتم استخدامها فيما يلي. هذه النظرية أكثر دقةً وتعقيدًا وأوسع نطاقًا، وقد استُخدمت بشكل أقل في أدبيات قواعد البيانات مقارنةً بالنظرية الكلاسيكية المذكورة أعلاه. لكل نظرية مزاياها وعيوبها، ونقاط تركيزها ورؤيتها . وإلى حد ما، تُكمّل كلٌّ منهما الأخرى، وقد يكون دمجهما مفيدًا.

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

معاملات قاعدة البيانات وقواعد ACID

تطوّر مفهوم معاملة قاعدة البيانات (أو المعاملة الذرية ) لتمكين فهم سلوك نظام قاعدة البيانات جيدًا في بيئة معيبة حيث يمكن أن تحدث الأعطال في أي وقت، ولتمكين التعافي من العطل إلى حالة قاعدة بيانات مفهومة جيدًا. معاملة قاعدة البيانات هي وحدة عمل، تُغلف عادةً عددًا من العمليات على قاعدة البيانات (مثل قراءة كائن قاعدة البيانات ، والكتابة، والحصول على قفل، وما إلى ذلك)، وهو تجريد مدعوم في قواعد البيانات وأنظمة أخرى أيضًا. لكل معاملة حدود محددة جيدًا من حيث تنفيذات البرنامج/التعليمات البرمجية المضمنة في تلك المعاملة (يحددها مبرمج المعاملة عبر أوامر معاملات خاصة). تلتزم كل معاملة قاعدة بيانات بالقواعد التالية (بدعم من نظام قاعدة البيانات؛ أي أن نظام قاعدة البيانات مصمم لضمانها للمعاملات التي يُنفذها):

  • الخاصية الذرية - إما أن تبقى آثار جميع العمليات أو لا تبقى أي منها ("دلالة الكل أو لا شيء") عنداكتمال المعاملة ( إما أن تُنفذ أو تُلغى على التوالي). بعبارة أخرى، بالنسبة للعالم الخارجي، تبدو المعاملة المنفذة (من خلال آثارها على قاعدة البيانات) غير قابلة للتجزئة (ذرية)، بينما لا تؤثر المعاملة الملغاة على قاعدة البيانات إطلاقًا. إما أن تُنفذ جميع العمليات أو لا تُنفذ أي منها.
  • الاتساق - يجب أن تترك كل معاملة قاعدة البيانات في حالة متسقة (صحيحة)، أي أن تحافظ على قواعد سلامة البيانات المحددة مسبقًا (القيود المفروضة على كائنات قاعدة البيانات وفيما بينها). يجب أن تُحوّل المعاملة قاعدة البيانات من حالة متسقة إلى أخرى (مع ذلك، تقع مسؤولية التأكد من صحة المعاملة نفسها على عاتق مبرمجها، أي أنها تُنفّذ ما هو مُراد منها تنفيذه بشكل صحيح (من وجهة نظر التطبيق) بينما يفرض نظام إدارة قواعد البيانات قواعد السلامة المحددة مسبقًا). وبالتالي، بما أنه لا يُمكن تغيير قاعدة البيانات عادةً إلا من خلال المعاملات، فإن جميع حالات قاعدة البيانات تكون متسقة.
  • العزل - لا يمكن للمعاملات أن تتداخل مع بعضها البعض (كنتيجة نهائية لتنفيذها). علاوة على ذلك، عادةً (بحسب طريقة التحكم في التزامن) لا تكون آثار المعاملة غير المكتملة مرئية حتى للمعاملات الأخرى. يُعد توفير العزل الهدف الرئيسي للتحكم في التزامن.
  • المتانة - يجب أن تستمر آثار المعاملات الناجحة (الملتزمة) من خلال الأعطال (عادةً عن طريق تسجيل آثار المعاملة وحدث الالتزام بها في ذاكرة غير متطايرة ).

توسّع مفهوم المعاملات الذرية على مرّ السنين ليشمل ما يُعرف بالمعاملات التجارية التي تُنفّذ أنواعًا من سير العمل، وهي ليست ذرية. ومع ذلك، تستخدم هذه المعاملات المُحسّنة عادةً المعاملات الذرية كمكوّنات.

لماذا هناك حاجة للتحكم في التزامن؟

إذا نُفذت المعاملات بشكل تسلسلي ، أي بالتتابع دون تداخل زمني، فلا يوجد تزامن في المعاملات. مع ذلك، إذا سُمح بتنفيذ معاملات متزامنة تتضمن عمليات متداخلة بطريقة غير مُنظمة، فقد تحدث بعض النتائج غير المتوقعة وغير المرغوب فيها، مثل:

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

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

آليات التحكم في التزامن

فئات

الفئات الرئيسية لآليات التحكم في التزامن هي:

  • النهج التفاؤلي - يسمح هذا النهج بإتمام المعاملات دون حظر أي من عملياتها (القراءة والكتابة) ("...مع التفاؤل بشأن استيفاء القواعد...")، ويتحقق فقط من انتهاكات قواعد التكامل المطلوبة (مثل قابلية التسلسل وقابلية الاسترداد ) عند إتمام كل معاملة. في حال اكتشاف انتهاكات عند إتمام المعاملة، يتم إجهاضها وإعادة تشغيلها. يُعد هذا النهج فعالاً للغاية عند إجهاض عدد قليل من المعاملات.
  • التشاؤم - حظر عملية من عمليات المعاملة، إذا كان من المحتمل أن تتسبب في انتهاك القواعد (مثل قابلية التسلسل وقابلية الاسترداد)، حتى يزول احتمال الانتهاك. عادةً ما يرتبط حظر العمليات بانخفاض الأداء.
  • شبه متفائل - يستجيب بشكل متشائم أو متفائل اعتمادًا على نوع الانتهاك ومدى سرعة اكتشافه.

تُقدّم الفئات المختلفة أداءً متفاوتًا، أي معدلات إنجاز معاملات ( إنتاجية ) متفاوتة، وذلك تبعًا لتنوع أنواع المعاملات، ومستوى التوازي الحسابي، وعوامل أخرى. إذا توفرت خيارات ومعرفة بالمفاضلات، فينبغي اختيار الفئة والطريقة لتحقيق أعلى أداء.

يؤدي الحجب المتبادل بين معاملتين (حيث تحجب كل منهما الأخرى) أو أكثر إلى حالة جمود ، حيث تتوقف المعاملات المعنية ولا يمكنها الإكمال. معظم الآليات غير المتفائلة (التي تتضمن الحجب) عرضة لحالات الجمود، والتي تُحل بإلغاء متعمد لمعاملة متوقفة (مما يحرر المعاملات الأخرى في حالة الجمود)، ثم إعادة تشغيلها وتنفيذها فورًا. عادةً ما يكون احتمال حدوث حالة الجمود منخفضًا.

تؤدي عمليات الحظر والتعطل والإجهاض إلى انخفاض الأداء، وبالتالي المفاضلات بين الفئات.

طُرق

توجد العديد من طرق التحكم في التزامن. يمكن تطبيق معظمها ضمن أي من الفئتين الرئيسيتين المذكورتين أعلاه. أما الطرق الرئيسية، [ 1 ] والتي لكل منها العديد من المتغيرات، وفي بعض الحالات قد تتداخل أو تُدمج، فهي:

  1. التأمين (مثل التأمين ثنائي المرحلة - 2PL) - التحكم في الوصول إلى البيانات من خلال الأقفال المخصصة لها. قد يتم حظر وصول معاملة إلى عنصر بيانات (كائن قاعدة بيانات) مؤمّن بواسطة معاملة أخرى (بحسب نوع القفل ونوع عملية الوصول) حتى يتم تحرير القفل.
  2. فحص مخطط التسلسل (يسمى أيضًا قابلية التسلسل، أو التعارض، أو فحص مخطط الأسبقية) - فحص الدورات في مخطط الجدول الزمني وكسرها عن طريق عمليات الإجهاض.
  3. ترتيب الطوابع الزمنية (TO) - تعيين الطوابع الزمنية للمعاملات، والتحكم في الوصول إلى البيانات أو التحقق منه حسب ترتيب الطوابع الزمنية.

تشمل أنواع التحكم الرئيسية الأخرى في التزامن التي تُستخدم بالتزامن مع الطرق المذكورة أعلاه ما يلي:

  • التحكم في التزامن متعدد الإصدارات (MVCC) - زيادة التزامن والأداء عن طريق إنشاء إصدار جديد من كائن قاعدة البيانات في كل مرة يتم فيها كتابة الكائن، والسماح بعمليات قراءة المعاملات لعدة إصدارات ذات صلة (لكل كائن) اعتمادًا على طريقة الجدولة.
  • التحكم في تزامن الفهرسة - مزامنة عمليات الوصول إلى الفهارس بدلاً من بيانات المستخدم. توفر الأساليب المتخصصة مكاسب كبيرة في الأداء.
  • نموذج مساحة العمل الخاصة ( التحديث المؤجل ) - تحتفظ كل معاملة بمساحة عمل خاصة لبياناتها التي تم الوصول إليها، ولا تصبح بياناتها المتغيرة مرئية خارج المعاملة إلا عند إتمامها (على سبيل المثال، ويكوم وفوسن 2001 ). يوفر هذا النموذج سلوكًا مختلفًا للتحكم في التزامن، وله فوائد في كثير من الحالات.

يُعدّ نظام القفل الثنائي الصارم القوي (SS2PL، ويُسمى أيضًا الجدولة الصارمة أو 2PL الصارمة ) أكثر أنواع آليات القفل شيوعًا في أنظمة قواعد البيانات منذ بداياتها في سبعينيات القرن الماضي، وهو حالة خاصة (متغير) من نظام القفل الثنائي (2PL). يتسم هذا النظام بالتشاؤم. وعلى الرغم من اسمه الطويل (لأسباب تاريخية)، فإن فكرة آلية SS2PL بسيطة: "تحرير جميع الأقفال التي طبقتها المعاملة فقط بعد انتهائها". ويُطلق مصطلح SS2PL (أو الصرامة) أيضًا على مجموعة جميع الجداول الزمنية التي يمكن إنشاؤها بواسطة هذه الآلية، أي أن جداول SS2PL (أو الصرامة) هذه تتمتع بخاصية SS2PL (أو الصرامة).

الأهداف الرئيسية لآليات التحكم في التزامن

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

الصواب

قابلية التسلسل

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

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

إمكانية الاسترداد
انظر إلى إمكانية الاسترداد في قابلية التسلسل

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

توزيع

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

استعادة

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

النسخ

لضمان التوافر العالي، غالبًا ما يتم نسخ كائنات قاعدة البيانات . يجب الحفاظ على تزامن تحديثات النسخ المتماثلة لنفس كائن قاعدة البيانات. قد يؤثر هذا على طريقة التحكم في التزامن (على سبيل المثال، Gray et al. 1996 [ 2 ] ).

التحكم في التزامن في أنظمة التشغيل

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

انظر أيضاً

مراجع

الاقتباسات

  1. فيليب أ. بيرنشتاين ، إريك نيومر (2009): مبادئ معالجة المعاملات ، الطبعة الثانية . مؤرشف في 7 أغسطس 2010 على موقع Wayback Machine ، مورغان كوفمان (إلسيفير)، يونيو 2009، رقم ISBN 978-1-55860-623-4(الصفحة 145)
  2. غراي، ج .؛ هيلاند، ب.؛ أونيل، بشاشا، د. (1996). وقائع مؤتمر ACM SIGMOD الدولي لإدارة البيانات لعام 1996. مخاطر التكرار وحلها (ملف PDF) . الصفحات 173-182 . doi : 10.1145/233269.233330 .