
منذ بداية وقتها ، اشتهرت PHP (وانتقدت) لدعم التكامل مع مجموعة من المكتبات ، وكذلك مع جميع نظم إدارة قواعد البيانات في السوق. ومع ذلك ، نظرًا لبعض الأسباب الغريبة ، لم تدعم قواعد البيانات الهرمية على العالم.
Globals هي هياكل لتخزين المعلومات الهرمية. إنها تذكرنا إلى حد ما بقاعدة البيانات "key -> value" ، والفرق الوحيد هو أن المفتاح يمكن أن يكون متعدد المستويات:
Set ^inn("1234567890", "city") = "Moscow" Set ^inn("1234567890", "city", "street") = "Req Square" Set ^inn("1234567890", "city", "street", "house") = 1 Set ^inn("1234567890", "year") = 1970 Set ^inn("1234567890", "name", "first") = "Vladimir" Set ^inn("1234567890", "name", "last") = "Ivanov"
في هذا المثال ، تخزن لغة ObjectScript المدمجة في
^ ^ inn ، والتي يتم تخزينها على القرص الثابت (المشار إليها بواسطة أيقونة ^ أمام الاسم العمومي) ، معلومات متعددة المستويات.
بطبيعة الحال ، للعمل مع globals من PHP ، سنحتاج إلى وظائف جديدة ستضاف بواسطة وحدة PHP ، والتي ستتم مناقشتها أدناه.
تدعم Globals العديد من الوظائف للعمل مع التسلسل الهرمي: تجاوز المفاتيح في كل مستوى على حدة ، وحذف ونسخ ولصق الأشجار والعقد الفردية بأكملها. حسنا ، وكذلك أي قاعدة بيانات المعاملات ACID جيدة. كل هذا يحدث بسرعة كبيرة (حوالي 10
5 -10
6 عمليات إدراج في الثانية على الأجهزة العادية) ، لسببين:
- Globals هي مستوى تجريد أقل من SQL ،
- لقد تم إنتاج القواعد العالمية منذ عقود وخلال هذه الفترة تمكنت من لعق الكود وتحسينه تمامًا.
المزيد عن globals في سلسلة مقالات "Globals - Swords-Masons for Data Storage":
الأشجار. الجزء 1الأشجار. الجزء 2صفائف متفرق. الجزء 3في هذا العالم ، وجدت globals مكانها الرئيسي للتطبيق في أنظمة التخزين الخاصة بالمعلومات ذات التنظيم المنخفض والمتفرق مثل: البيانات الطبية والبيانات الشخصية والخدمات المصرفية وما إلى ذلك.
أحب PHP (وأطوره) وأردت أن ألعب حول العالم. لم يكن هناك وحدة الانتهاء. كتبت إلى InterSystems تطلب مني إنشائها. لم يؤد الانتظار إلى أي شيء ، وفي النهاية قمنا (أنا ، مع طالب الدراسات العليا) بتكوين الوحدة بأنفسنا. قامت InterSystems برعاية التطوير كجزء من منحة تعليمية.
بشكل عام ، InterSystems IRIS عبارة عن نظم إدارة قواعد بيانات متعددة النماذج ، لذلك من PHP يمكنك التعامل معها من خلال ODBC باستخدام SQL ، لكنني كنت مهتمًا بالعالم ، ولم يكن هناك مثل هذا الرابط.
لذلك ، تتوفر الوحدة النمطية لـ PHP 7.x (تم اختباره تحت 7.0-7.2). حاليًا ، يمكنه العمل فقط مع InterSystems IRIS و Caché المثبتة على نفس المضيف.
صفحة الوحدة النمطية على OpenExchange (كتالوج للمشاريع والإضافات للمطورين على InterSystems IRIS و Caché).
يوجد قسم DISCUSS مفيد يشارك فيه الأشخاص تجارب استخدامهم.
تحميل هنا:
https://github.com/intersystems-community/php_ext_iris
قم بتنزيل المستودع من سطر الأوامر:
git clone https://github.com/intersystems-community/php_ext_iris
تعليمات لتثبيت الوحدة باللغة الإنجليزية والروسية.وظائف الوحدة:
إذا كنت تريد اللعب مع الوحدة بنفسك ، فقم بما يلي:
خاصة بالنسبة لمستخدمي Habr ، تم إنشاء Dockerfile لإنشاء الصورة. git clone https://github.com/intersystems-community/php_ext_iris cd php_ext_iris/iris docker-compose build docker-compose up -d
اختبار الصفحة التجريبية على
المضيف المحلي: 52080 في المتصفح.
توجد ملفات PHP التي يمكن تحريرها وتشغيلها معهم في مجلد php / demo وسيتم تحميلها داخل الحاوية.
لاختبار IRIS ، استخدم
مسؤول اسم المستخدم ، وكلمة المرور هي
SYS .
لإدخال إعدادات IRIS ، استخدم عنوان URL التالي:
http: // localhost: 52773 / csp / sys / UtilHome.cspلإدخال وحدة التحكم IRIS في هذه الحاوية ، استخدم الأمر:
docker exec -it iris_iris_1 iris session IRIS
خاصة لمستخدمي Habr و InterSystems Caché ، تم رفع virtualka مع php-module. للتثبيت الذاتي للوحدة النمطية تحت InterSystems Caché- لديك لينكس. اختبرت تحت Ubuntu ، تحت ويندوز أيضا ينبغي أن تكون وحدة بنيت ، لكنني لم اختباره.
- تحميل نسخة مجانية:
- تثبيت وحدة cach.so في PHP وفقا للتعليمات .
في حاوية الإرساء على جهاز الكمبيوتر الشخصي الخاص بي (AMD FX-9370 @ 4700Mhz 32GB ، LVM ، SATA SSD) ، من أجل المتعة ، قمت بإجراء اختبارين بدائيين على سرعة إدخال قيم جديدة في قاعدة البيانات.
- استغرق إدخال مليون عنصر جديد في المجموعة 1.81 ثانية أو 552 ألف إدخال في الثانية.
- استغرق تحديث قيمة في نفس الوقت العالمي 1،000،000 مرة 1.98 ثانية أو 505 ألف تحديثات في الثانية. حقيقة مثيرة للاهتمام هو أن يحدث الإدراج من التحديث. يبدو أن هذا نتيجة لتحسين قاعدة البيانات الأولية للإدخال السريع.
من الواضح أن هذه الاختبارات لا يمكن أن تدعي أنها دقيقة ومفيدة ، لأنها بدائية ، مصنوعة في حاوية. على أجهزة أكثر قوة مع نظام قرص PCIe SSD ، يمكن تحقيق عشرات الملايين من الإدخالات في الثانية.
ما يمكن أن تكتمل والحالة الحالية
- يمكنك إضافة وظائف مفيدة للتعامل مع المعاملات (لا يزال بإمكانك استخدامها من خلال iris_exec).
- لا يتم تنفيذ وظيفة إرجاع الهيكل العام بالكامل بحيث لا يتجاهل PHP العمومي.
- لم يتم تنفيذ وظيفة حفظ مجموعة PHP كشجرة فرعية.
- لم يتم تطبيق الوصول إلى متغيرات قاعدة البيانات المحلية. فقط من خلال iris_exec ، على الرغم من أنه أفضل من خلال iris_set.
- لم تنفذ تجاوز العالمية في العمق في الاتجاه المعاكس.
- لا يتم تطبيق الوصول إلى قاعدة البيانات من خلال الكائن باستخدام أساليب (مشابهة للوظائف الحالية).
من المحتمل ألا تكون الوحدة الحالية جاهزة للإنتاج: لم تكن هناك اختبارات للأحمال الكبيرة وتسريبات الذاكرة. ومع ذلك ، إذا كان هناك من يحتاج إليها ، فاتصل بي (سيرجي كامينيف update@mail.ru).
الخاتمة
لفترة طويلة ، لم تتقاطع عوالم PHP والقواعد الهرمية على العالم ، على الرغم من أن globals توفر وظائف قوية وسريعة على أنواع بيانات محددة (طبية ، شخصية).
آمل أن تكون هذه الوحدة بمثابة حافز للتجارب من قبل مبرمجي PHP مع مبرمجين عالميين ومبرمجي ObjectScript لتطوير بسيط لواجهات الويب في PHP.
سكرتير خاص شكرا لاهتمامكم!