# نموذج الهيكلة والتجميع

نموذج الهيكلة والتجميع (بالإنجليزية: نموذج الهيكلة والتجميع) هو نموذج برمجي، طورته شركة جوجل لإجراء عمليات حسابية بشكل متزامن على كمية كبيرة جداً من البيانات (عدة بيتابايت), وتتم هذه العمليات على عدة حواسيب تسمى بالعناقيد الحاسوبية. كما يطلق اسم MapReduce على اسم المكتبة البرمجية لهذا النموذج وليس فقط على النموذج نفسه. باستخدام طريقة الهيكلة والتجميع سيتم معالجة البيانات على ثلاثة مراحل (التجزئة، الخلط، التجميع) وبالانجليزية على التوالي (Map, shuttle ,reduce), اثنتان منهم تتم من قِبَل المستخدم وهما التجزئة والتجميع. -- وبالتالي يمكن إجراء العمليات الحسابية على عدة حواسيب وفي الوقت نفسه، أي بشكل متواز. تكمن أهمية هذه التقنية في الدور الذي تلعبه في توزيع العمليات على عدة حساب وإجرائها بشكل متزامن، ومن ثم جمع النتائج في المرحلة الثانية (الخلط). بصورة أوضح يمكننا القول أننا نقسم المشكلة الكبيرة إلى عدة أجزاء ونحل كل جزء منها على حدا ومن ثم نجمع هذه الحلول مع بعضها لتشكل في النهاية الحل للمشكلة الكبيرة. فكرة هذا النموذج مستوحاة من الدوال Map و Reduce, اللذان يستخدمان بكثرة في البرمجة الوظيفية.
في عام 2010 تم منح براءة اختراع أمريكية على هذه التقنية.

## طريقة العمل

الصورة (MapReduce) توضح كيفية حساب البيانات في تقنية الهيكلة والتجميع وهي كالتالي:
* في البداية لدينا البيانات (D,A,T,A) المُراد حسابها، ويتم توزيع هذه البيانات على مجموعة من عمليات الهيكلة Map, وكل عملية تقوم بوظيفة معينة يتم تحديدها من قِبَل المستخدم.
* يتم تنفيذ هذه العمليات بشكل متوازي.
* كل عملية من هذه العمليات تقوم بطرح مخرجاتها الأولية (هذه المخرجات ممثلة باللون الزهري), مع العلم أن العملية الواحدة يمكنها توزيع مخرجاتها على أكثر من مكان تخزين.
* هنا نأتي إلى مرحلة الخلط، حيث يتم خلط هذه البيانات مع بعضها البعض، وهنا أيضاً يتم تبادل البيانات كثيرًا بين الأجهزة (الأماكن التي تتواجد فيها النتائج الأولية).
* عندما تنتهي مرحلة الخلط فإنه يمكننا القول أنها بداية مرحلة التجميع Reduce (باللون الأزرق).
* يتم هنا إجراء عملية تجميع واحدة لكل مكان تخزين (اللون الزهري) وتتم أيضاً هذه العمليات بشكل متواز، ومن ثم تطرح كل عملية من هذه العمليات مخرجاتها على حدا، وهي (X,Y,Z).

## تعريف اقتران الهيكلة والتجميع

يقوم اقتران الهيكلة والتجميع بتحويل قائمة من المدخلات إلى قائمة من المخرجات، وكل قائمة-المدخلات والمخرجات- تتكون من قيم ومفتاح لكل قيمة، كما هو الحال في دوال التجزئة أو ال دالة تجزئة.
    ${\begin{aligned}\mathrm {MapReduce} :(K\times V)^{*}&\to (L\times W)^{*}\\{\lbrack (k_{1},v_{1}),\ldots ,(k_{n},v_{n})\rbrack }&\mapsto \lbrack (l_{1},w_{1}),\ldots ,(l_{m},w_{m})\rbrack \end{aligned}}$

### شرح اقتران الهيكلة والتجميع

* المجموعات $K$ و $L$ تحوي على المفاتيح، بينما تحوي المجموعات $V$ و $W$ على القيم.
* كل المفاتيح $k\in K$ هي من نفس النوع، مثلاً: نص أو String.
* كل المفاتيح $l\in L$ هي من نفس النوع، مثلاً: عدد صحيح.
* كل القيم $v\in V$ هي من نفس النوع، مثلاً: عدد عشري.
* كل القيم $w\in W$ هي من نفس النوع، مثلاً: عدد حقيقي.
* إذا كانت $A$ و $B$ هي مجموعات، فإن $A\times B$ هي مجموعة كل الأزواج $(a,b)$ , بحيث أن $a\in A$ و $b\in B$ (الضرب الديكارتي).
* إذا كانت $M$ هي مجموعة، فإن $M^{*}$ هي مجموعة كل المجموعات التي يمكن تكوينها من عناصر $M$, أو ما تسمى بنجمة كلين.

### تعريف اقتران الهيكلة Map واقتران التجميع Reduce

    ${\begin{aligned}\mathrm {Map} :K\times V&\to (L\times W)^{*}\\(k,v)&\mapsto \lbrack (l_{1},x_{1}),\ldots ,(l_{r_{k}},x_{r_{k}})\rbrack \end{aligned}}$
أو
    ${\begin{aligned}\mathrm {Reduce} :L\times W^{*}&\to X^{*}\\\left(l,{\lbrack y_{1},\ldots ,y_{s_{l}}\rbrack }\right)&\mapsto \lbrack w_{1},\ldots ,w_{m_{l}}\rbrack \end{aligned}}$

## المصادر

* ↑ Google spotlights data center inner workings | Tech news blog - CNET News.com نسخة محفوظة 19 أكتوبر 2013 على موقع واي باك مشين.
* ↑ "Our abstraction is inspired by the map and reduce primitives present in Lisp and many other functional languages." -"MapReduce: Simplified Data Processing on Large Clusters", von Jeffrey Dean und Sanjay Ghemawat, مختبرات جوجل نسخة محفوظة 11 ديسمبر 2017 على موقع واي باك مشين.
* ↑ USP 7,650,331 (United States Patent and Trademark Office) نسخة محفوظة 03 يوليو 2017 على موقع واي باك مشين.
* بوابة تقانة المعلومات
* بوابة جوجل
* بوابة علم الحاسوب