Globals عبارة عن سيوف كنز لتخزين البيانات. الأشجار. الجزء 2

Globals عبارة عن سيوف كنز لتخزين البيانات. الأشجار. الجزء 2البدء – انظر الجزء الأول.

3. متغيرات الهياكل عند استخدام الكرة الأرضية

هيكل مثل شجرة مرتبة له حالات خاصة مختلفة. دعونا نفكر في تلك التي لها قيمة عملية عند العمل مع العالميين.

3.1 حالة خاصة 1. عقدة واحدة بدون فروع


Globals عبارة عن سيوف كنز لتخزين البيانات. الأشجار. الجزء 2يمكن استخدام المتغيرات العالمية ليس فقط كمصفوفة، ولكن أيضًا مثل المتغيرات العادية. على سبيل المثال، كعداد:

Set ^counter = 0  ; установка счётчика
Set id=$Increment(^counter) ;  атомарное инкрементирование

في هذه الحالة، يمكن أن يكون للعالم، بالإضافة إلى معناه، فروع أيضًا. واحد لا يستبعد الآخر.

3.2 حالة خاصة 2. قمة واحدة والعديد من الفروع

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

Globals عبارة عن سيوف كنز لتخزين البيانات. الأشجار. الجزء 2

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

  1. أحرف فاصلة.
    Set ^t(id1) = "col11/col21/col31"
    Set ^t(id2) = "col12/col22/col32"
  2. نظام صارم يشغل فيه كل حقل عددًا محددًا مسبقًا من البايتات. كما هو الحال في قواعد البيانات العلائقية.
  3. دالة خاصة $LB (متوفرة في ذاكرة التخزين المؤقت)، والتي تنشئ سلسلة من القيم.
    Set ^t(id1) = $LB("col11", "col21", "col31")
    Set ^t(id2) = $LB("col12", "col22", "col32")

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

لنقم بإنشاء فهرس عالمي في العمود الأول.

Set ^i("col11", id1) = 1
Set ^i("col12", id2) = 1

الآن، للبحث بسرعة عن المعلومات في العمود الأول، علينا أن ننظر إلى العالم ^i وابحث عن المفاتيح الأساسية (المعرف) المقابلة للقيمة المطلوبة للعمود الأول.

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

TSTART
Set ^t(id1) = $LB("col11", "col21", "col31")
Set ^i("col11", id1) = 1
TCOMMIT

تفاصيل حول كيفية القيام بذلك على M الجداول على الكرات العالمية, مضاهاة الفهارس الثانوية.

ستعمل مثل هذه الجداول بنفس سرعة العمل في قواعد البيانات التقليدية (أو حتى بشكل أسرع) إذا كانت وظائف إدراج/تحديث/حذف الصفوف مكتوبة بلغة COS/M وتم تجميعها.لقد قمت بمراجعة هذا البيان من خلال اختبارات مجمعة على INSERT وSELECT في جدول واحد مكون من عمودين، بما في ذلك استخدام أوامر TSTART وTCOMMIT (المعاملات).

لم أختبر سيناريوهات أكثر تعقيدًا مع الوصول المتزامن والمعاملات الموازية.

وبدون استخدام المعاملات، كان معدل الإدراج 778 إدراجًا في الثانية لكل مليون قيمة.
مع 300 مليون قيمة - 422 إدراجًا في الثانية.

عند استخدام المعاملات - 572 إدخالًا في الثانية مقابل 082 مليون إدخال. تم تنفيذ جميع العمليات من كود M المترجم.
محركات الأقراص الصلبة عادية وليست SSD. RAID5 مع إعادة الكتابة. معالج فينوم II 1100T.

لاختبار قاعدة بيانات SQL بطريقة مماثلة، تحتاج إلى كتابة إجراء مخزن يقوم بإجراء عمليات الإدراج في حلقة. عند اختبار MySQL 5.5 (تخزين InnoDB)، باستخدام هذه الطريقة، تلقيت أرقامًا لا تزيد عن 11 ألف إدخال في الثانية.
نعم، يبدو تنفيذ الجداول على العموميات أكثر تعقيدًا من قواعد البيانات العلائقية. لذلك، تتمتع قواعد البيانات الصناعية العالمية بإمكانية الوصول إلى SQL لتبسيط العمل مع البيانات الجدولية.

Globals عبارة عن سيوف كنز لتخزين البيانات. الأشجار. الجزء 2بشكل عام، إذا لم يتغير مخطط البيانات بشكل متكرر، فإن سرعة الإدراج ليست حرجة ويمكن تمثيل قاعدة البيانات بأكملها بسهولة في شكل جداول تمت تسويتها، فمن الأسهل العمل مع SQL، لأنها توفر مستوى أعلى من التجريد .

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

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

3.3 حالة خاصة 3. شجرة ذات مستويين، كل عقدة من المستوى الثاني لها عدد محدد من الفروع

Globals عبارة عن سيوف كنز لتخزين البيانات. الأشجار. الجزء 2ربما خمنت ذلك: هذا تطبيق بديل للجداول على الكرات العالمية. دعونا نقارن هذا التنفيذ بالتنفيذ السابق.

الجداول على شجرة ذات مستويين مقابل. على شجرة ذات مستوى واحد.

سلبيات
الايجابيات

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

  1. وصول أسرع إلى قيم الأعمدة الفردية، حيث ليست هناك حاجة لتحليل السلسلة. وفقًا لاختباراتي، فهو أسرع بنسبة 11,5% على عمودين وأكثر على عدد أكبر من الأعمدة.
  2. أسهل لتغيير مخطط البيانات
  3. رمز أكثر وضوحا

الخلاصة: ليست للجميع. نظرًا لأن السرعة هي إحدى أهم فوائد العوالم، فلا فائدة من استخدام هذا التطبيق، لأنه على الأرجح لن يؤدي أداءً أسرع من الجداول في قواعد البيانات العلائقية.

3.4 حالة عامة. الأشجار والأشجار المرتبة

أي بنية بيانات يمكن تمثيلها كشجرة تتناسب تمامًا مع البيانات العالمية.

3.4.1 كائنات ذات كائنات فرعية

Globals عبارة عن سيوف كنز لتخزين البيانات. الأشجار. الجزء 2

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

تخيل قاعدة بيانات SQL تحتوي على جداول: "المريض" ~ 100 حقل، "الطب" - 000 حقل، "العلاج" - 100 حقل، "المضاعفات" - 000 حقل، إلخ. وما إلى ذلك وهلم جرا. أو يمكنك إنشاء قاعدة بيانات تضم عدة آلاف من الجداول، كل منها مخصص لنوع معين من المرضى (ويمكن أن تتداخل!)، والعلاجات، والأدوية، وآلاف الجداول الأخرى للاتصالات بين هذه الجداول.

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

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

.
بالطبع، في SQL يمكنك أيضًا محاكاة شجرة باستخدام عدد قليل من الجداول (EAV, 1,2,3,4,5,6,7,8,9,10)، إلا أن هذا الأمر أكثر تعقيدًا وسيكون أبطأ. في الأساس، سيتعين عليك كتابة عمومية تعمل على الجداول وإخفاء كل العمل مع الجداول تحت طبقة التجريد. من الخطأ محاكاة تقنية المستوى الأدنى (العالميات) باستخدام تقنية المستوى الأعلى (SQL). غير مناسب.

ليس سراً أن تغيير مخطط البيانات على الجداول العملاقة (ALTER TABLE) قد يستغرق وقتًا طويلاً. على سبيل المثال، يقوم MySQL بإجراء ALTER TABLE ADD|DROP COLUMN عن طريق نسخ المعلومات بالكامل من الجدول القديم إلى الجدول الجديد (تم اختبار محركات MyISAM وInnoDB). والتي يمكن أن تعطل قاعدة بيانات عاملة تحتوي على مليارات السجلات لأيام، إن لم يكن لأسابيع.

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


لذلك، عندما يتعلق الأمر بتخزين الكائنات بعدد كبير من الخصائص الاختيارية، فإن العموميات تعد خيارًا رائعًا.

علاوة على ذلك، اسمحوا لي أن أذكرك أن الوصول إلى أي من الخصائص يكون فوريًا، نظرًا لأن جميع المسارات في النطاق العالمي عبارة عن أشجار B.

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

  1. حجم الوثيقة. وحدة التخزين عبارة عن نص بتنسيق JSON (وبشكل أكثر دقة BSON) ويبلغ حجمه الأقصى حوالي 16 ميجابايت. تم إجراء التقييد خصيصًا حتى لا تتباطأ قاعدة بيانات JSON أثناء التحليل إذا تم تخزين مستند JSON ضخم فيها ثم يتم الوصول إليها عن طريق الحقول. يجب أن تحتوي هذه الوثيقة على جميع المعلومات المتعلقة بالمريض. نعلم جميعًا مدى كثافة سجلات المرضى. الحد الأقصى لحجم البطاقة وهو 16 ميجابايت يضع حدًا على الفور للمرضى الذين تشتمل بطاقة مرضهم على ملفات التصوير بالرنين المغناطيسي وفحوصات الأشعة السينية وغيرها من الدراسات. في أحد فروع العالم، يمكنك الحصول على غيغابايت وتيرابايت من المعلومات. من حيث المبدأ، يمكننا أن نضع حداً لذلك، لكنني سأستمر.
  2. وقت الوعي/التغيير/حذف الخصائص الجديدة في مخطط المريض. يجب أن تقرأ قاعدة البيانات هذه الخريطة بأكملها في الذاكرة (هذه كمية كبيرة!)، وتحليل BSON، وإضافة/تغيير/حذف عقدة جديدة، وتحديث الفهارس، وتعبئتها في BSON، وحفظها على القرص. يحتاج العالم فقط إلى الوصول إلى خاصية معينة ومعالجتها.
  3. الوصول السريع إلى الخصائص الفردية. مع وجود العديد من الخصائص في المستند وبنيته متعددة المستويات، سيكون الوصول إلى الخصائص الفردية أسرع نظرًا لأن كل مسار في النطاق العام عبارة عن شجرة B. في BSON، عليك تحليل المستند خطيًا للعثور على الخاصية المطلوبة.

3.3.2 المصفوفات الترابطية

تتلاءم المصفوفات الترابطية (حتى مع المصفوفات المتداخلة) بشكل مثالي مع العموميات. على سبيل المثال، سيتم عرض مثل هذه المصفوفة من PHP في الصورة الأولى 3.3.1.

$a = array(
  "name" => "Vince Medvedev",
  "city" => "Moscow",
  "threatments" => array(
    "surgeries" => array("apedicectomy", "biopsy"),
    "radiation" => array("gamma", "x-rays"),
    "physiotherapy" => array("knee", "shoulder")
  )
);

3.3.3 الوثائق الهرمية: XML، JSON

كما يتم تخزينها بسهولة في الكرات العالمية. يمكن وضعها بطرق مختلفة للتخزين.

XML
أسهل طريقة لتحليل XML إلى عموميات هي تخزين سمات العلامة في العقد. وإذا كانت هناك حاجة للوصول السريع إلى سمات العلامة، فيمكننا نقلها إلى فروع منفصلة.

Globals عبارة عن سيوف كنز لتخزين البيانات. الأشجار. الجزء 2

<note id=5>
<to>Вася</to>
<from>Света</from>
<heading>Напоминание</heading>
<body>Позвони мне завтра!</body>
</note>

في COS، سيتوافق هذا مع الكود:

Set ^xml("note")="id=5"
Set ^xml("note","to")="Саша"
Set ^xml("note","from")="Света"
Set ^xml("note","heading")="Напоминание"
Set ^xml("note","body")="Позвони мне завтра!"

ملاحظة: بالنسبة إلى XML وJSON والمصفوفات الترابطية، يمكنك التوصل إلى العديد من الطرق المختلفة للعرض على النطاقات العالمية. في هذه الحالة، لم نعكس ترتيب العلامات الفرعية في علامة الملاحظة. عالميا ^ أكس أم أل سيتم عرض العلامات الفرعية بالترتيب الأبجدي. ولعكس الترتيب بدقة، يمكنك، على سبيل المثال، استخدام العرض التالي:

Globals عبارة عن سيوف كنز لتخزين البيانات. الأشجار. الجزء 2
جسون.
تُظهر الصورة الأولى من القسم 3.3.1 انعكاسًا لمستند JSON هذا:

var document = {
  "name": "Vince Medvedev",
  "city": "Moscow",
  "threatments": {
    "surgeries": ["apedicectomy", "biopsy"],
    "radiation": ["gamma", "x-rays"],
    "physiotherapy": ["knee", "shoulder"]
  },
};

3.3.4 هياكل متطابقة مرتبطة بعلاقات هرمية

أمثلة: هيكل مكاتب المبيعات، وموقع الأشخاص في هيكل الامتيازات والرهونات البحرية، وقاعدة بيانات الفتحات في الشطرنج.

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

Globals عبارة عن سيوف كنز لتخزين البيانات. الأشجار. الجزء 2

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

Globals عبارة عن سيوف كنز لتخزين البيانات. الأشجار. الجزء 2

4. في أي الحالات يكون استخدام الكرات العالمية أكثر فائدة؟

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

سرعة
سهولة معالجة/عرض البيانات

  1. الإدراج [مع الفرز التلقائي في كل مستوى]، [الفهرسة حسب المفتاح الرئيسي]
  2. إزالة الأشجار الفرعية
  3. كائنات تحتوي على الكثير من الخصائص المتداخلة التي تتطلب الوصول الفردي
  4. هيكل هرمي مع إمكانية تجاوز الفروع التابعة من أي فرع حتى الغير موجود منها
  5. العمق الأول اجتياز الأشجار الفرعية
  1. الكائنات/الكيانات التي تحتوي على عدد كبير من الخصائص/الكيانات الاختيارية [و/أو المتداخلة].
  2. بيانات أقل من المخطط. عندما تظهر خصائص جديدة غالبًا وتختفي الخصائص القديمة.
  3. تحتاج إلى إنشاء قاعدة بيانات مخصصة.
  4. قواعد المسار وأشجار القرار. عندما يكون من المناسب تمثيل المسارات كشجرة.
  5. إزالة الهياكل الهرمية دون استخدام التكرار

تمديد "إن العولمات عبارة عن سيوف كنز لتخزين البيانات. صفائف متفرقة. الجزء 3".

إخلاء المسئولية: هذه المقالة وتعليقاتي عليها هي رأيي ولا تمثل الموقف الرسمي لشركة InterSystems Corporation.

المصدر: www.habr.com

إضافة تعليق