InfinityDB
إنفينيتي دي بي هو محرك قواعد بيانات مضمن بالكامل مكتوب بلغة جافا ، ونظام إدارة قواعد بيانات يعمل بنظام العميل/الخادم، مزود بواجهة java.util.concurrent.ConcurrentNavigableMap الموسعة (وهي واجهة فرعية من java.util.Map)، ويتم نشره على الأجهزة المحمولة، والخوادم، ومحطات العمل، وفي بيئات موزعة. يعتمد التصميم على بنية شجرية من نوع B متزامنة وخالية من الأقفال، مما يُمكّن مبرمجي العميل من تحقيق مستويات أداء عالية دون خطر حدوث أعطال. [ 1 ]
يخضع الإصدار الجديد من برنامج العميل/الخادم 5.0 حاليًا للاختبار التجريبي، حيث يقوم بتغليف الإصدار المدمج القائم لتوفير وصول مشترك عبر خادم آمن وبعيد.
في النظام المدمج ، تُخزَّن البيانات وتُسترجع من ملف قاعدة بيانات مدمج واحد باستخدام واجهة برمجة تطبيقات InfinityDB التي تتيح الوصول المباشر إلى مساحات العناصر ذات الأطوال المتغيرة. يستطيع مبرمجو عميل قاعدة البيانات إنشاء علاقات تقليدية، بالإضافة إلى نماذج متخصصة تلبي احتياجات التطبيق التابع بشكل مباشر. لا يوجد حد لعدد العناصر أو حجم قاعدة البيانات أو حجم JVM ، لذا يمكن لـ InfinityDB العمل في أصغر بيئة توفر تخزينًا عشوائي الوصول، كما يمكن توسيع نطاقها لتشمل بيئات كبيرة. يمكن توجيه العلاقات التقليدية والنماذج المتخصصة إلى ملف قاعدة البيانات نفسه. يمكن تحسين InfinityDB للعلاقات القياسية، بالإضافة إلى جميع أنواع البيانات الأخرى، مما يسمح لتطبيقات العميل بتنفيذ مليون عملية على الأقل في الثانية على نظام افتراضي ثماني النواة.
AirConcurrentMap هي خريطة في الذاكرة تُطبّق واجهة Java ConcurrentMap ، [ 2 ] ولكنها تستخدم داخليًا تصميمًا متعدد النوى، مما يجعلها الأسرع أداءً واستهلاكًا للذاكرة بين خرائط Java عند ترتيب البيانات، وتستوعب أعدادًا متوسطة إلى كبيرة من المدخلات. [ 3 ] يُعدّ تكرار AirConcurrentMap أسرع من أي مُكرِّر آخر لخرائط Java، بغض النظر عن نوع الخريطة المُحدَّد.
واجهة برمجة تطبيقات الخرائط
يمكن الوصول إلى InfinityDB كواجهة موسعة من نوع java.util.concurrent.ConcurrentNavigableMap، أو عبر واجهة برمجة تطبيقات منخفضة المستوى تُسمى 'ItemSpace'. تُعد واجهة ConcurrentNavigableMap واجهة فرعية من java.util.Map، ولكنها تتميز بترتيب خاص وطرق تزامن: وهي نفس واجهة برمجة التطبيقات الخاصة بـ java.util.concurrent.ConcurrentSkipListMap. يمكن تداخل الخرائط لتكوين هياكل معقدة. تتمتع الخرائط بالدلالات القياسية، ولكنها تعمل داخليًا على "مساحة الصفوف"، بينما لا يتم تخزين الخرائط فعليًا، بل هي أدوات مساعدة، حيث لا يُمثل كل منها سوى بادئة صف غير قابلة للتغيير. يمكن إنشاء الخرائط ديناميكيًا بسرعة عالية عند الحاجة للوصول إليها، وهي آمنة للاستخدام في بيئات متعددة الخيوط ومتزامنة على أنوية متعددة. تشمل أنواع المفاتيح والقيم المتاحة جميع أنواع البيانات الأولية في جافا ، والتواريخ، والسلاسل النصية، ومصفوفات الأحرف أو البايتات الصغيرة، وسلاسل البايت، وفهارس المصفوفات الضخمة، وكائنات الأحرف الطويلة، وكائنات الثنائيات الطويلة، بالإضافة إلى الأنواع ذات الأغراض الخاصة "EntityClass" و"Attribute". يمكن أن تكون الخرائط متعددة القيم. يمكن للتطبيقات اختيار استخدام الوصول القائم على الخرائط فقط، ويمكنها دمج الوصول إلى "ItemSpace" منخفض المستوى على نفس الصفوف، حيث أن الوصول إلى الخرائط هو مجرد غلاف ولا يوجد تمييز على مستوى الصفوف.
نموذج بيانات "مساحة العناصر" ذو المستوى الأدنى
تُسمى أنواع البيانات الأولية الاثني عشر "مكونات"، وهي عناصر ذرية. يمكن دمج المكونات في وحدات مركبة قصيرة تُسمى "عناصر"، وهي وحدة التخزين والاسترجاع. تُصمم هياكل البيانات عالية المستوى التي تجمع هذه العناصر من قِبل المستخدم، وتشمل على سبيل المثال سجلات غير محدودة الحجم تحتوي على عدد غير محدود من الأعمدة أو السمات، مع قيم سمات معقدة غير محدودة الحجم. قد تكون المفاتيح عبارة عن تركيبة من المكونات. يمكن أن تكون قيم السمات مجموعات مرتبة من المكونات المركبة، أو كائنات نصية كبيرة (CLOB)، أو كائنات ثنائية كبيرة (BLOB)، أو مصفوفات متفرقة غير محدودة . تشمل هياكل البيانات الأخرى عالية المستوى المبنية من عناصر متعددة ارتباطات المفتاح/القيمة مثل الخرائط المرتبة، والمجموعات المرتبة، وشبكات الكيان-السمة-القيمة الرباعية، والأشجار، والرسوم البيانية الموجهة غير الدورية (DAGs)، والتصنيفات، وفهارس البحث النصي الكامل. يمكن أن تظهر مزيجات من هذه الهياكل إلى جانب هياكل أخرى مخصصة يُحددها المستخدم.
يمكن تمثيل أي مساحة بيانات (ItemSpace) كمستند JSON موسع، وتتوفر طابعات ومحللات JSON. لا تُعد مستندات JSON أصلية، بل يتم ربطها بمجموعات من العناصر عند الحاجة، على أي نطاق يُحدده بادئة العنصر التي تُمثل مسار المستند الفرعي. وبالتالي، يمكن تمثيل قاعدة البيانات بأكملها أو أي شجرة فرعية منها وصولاً إلى قيمة واحدة كمستند JSON موسع. ولأن العناصر تُحفظ مُرتبة دائمًا، فإن مفاتيح JSON للكائن تكون دائمًا مُرتبة.
ترميز البيانات
يمثل "مساحة العناصر" قاعدة البيانات بأكملها، وهي عبارة عن مجموعة بسيطة مرتبة من العناصر، دون أي حالة أخرى. يُخزَّن العنصر فعليًا مع كل مكون مُشفَّر بصيغة ثنائية متغيرة الطول في مصفوفة أحرف، حيث تكون المكونات ذاتية الوصف بتنسيق قياسي يُرتب بشكل صحيح. يتعامل المبرمجون مع المكونات كعناصر أساسية فقط، والبيانات المخزنة ذات أنواع قوية. لا تُخزَّن البيانات كنص ليتم تحليله بأنواع ضعيفة كما في JSON أو XML ، ولا يتم تحليلها من تمثيلات تدفق ثنائية مُعرَّفة من قِبل المبرمج. لا توجد تنسيقات ثنائية مخصصة من تصميم العميل قد تصبح هشة، والتي قد تُسبب مشاكل أمنية، أو توثيقية، أو ترقية، أو اختبار، أو إصدار، أو توسيع، أو تصحيح أخطاء، كما هو الحال مع تسلسل كائنات Java.
تحسين الأداء
يتم الوصول إلى النظام بالكامل عبر بضع طرق أساسية لتخزين أو استرجاع عنصر واحد أو مجموعة بيانات متغيرة الطول في كل مرة، بسرعة تصل إلى مليون عملية في الثانية عند تجميعها عبر عدة خيوط معالجة في الذاكرة. تُستخدم في هذه العمليات إما واجهة برمجة تطبيقات الخرائط القياسية (Map API) للتكرارات، أو على مستوى أدنى، عمليات أخرى مثل `map` و`map` و`map` و`map` و` get()map` put()و` insert()map` و` map` delete()و` map` . يبلغ حجم العناصر النموذجية حوالي 30 بايت غير مضغوطة في الذاكرة، بينما تستخدم كائنات LOB، على سبيل المثال، عناصر بحجم 1 كيلوبايت. ونظرًا لأن كل عملية تؤثر على عنصر واحد فقط، فإن الوصول إلى هياكل البيانات الصغيرة سريع. يختلف هذا عن الوصول المُجزأ، مثل تنسيق وتحليل نصوص JSON أو XML كاملة، أو رسوم بيانية لتسلسل كائنات Java. يتميز توسع مساحة وأداء ItemSpace بالسلاسة، حيث يتم إنشاء أي هيكل متعدد العناصر، أو زيادته، أو تقليصه، أو اختفاؤه، مهما كان حجمه. يُشابه أداء التخزين المباشر أداء أي شجرة B-tree مُوجّهة نحو الكتل، حيث يبلغ حجم الكتل حوالي 4 كيلوبايت، أي ما يعادل زمن وصول O (log( n )). يوجد ذاكرة تخزين مؤقتة للكتل بحجم 2.5 ميجابايت افتراضيًا، وهي غير محدودة الحجم ولكنها غالبًا ما تصل إلى حوالي 100 ميجابايت. وتزداد سعة هذه الذاكرة المؤقتة حسب الحاجة فقط.update()first()next()last()previous()
توسيع الفضاء
لتحقيق الأداء الأمثل والكفاءة، تُخزَّن العناصر داخل شجرة B واحدة مضغوطة بادئة ومتغيرة الطول، كسلسلة بايتات غير مُفسَّرة لمزيد من الضغط. قد يصل حجم شجرة B عادةً إلى نطاق 100 جيجابايت، ولكن ليس لها حدود. يوجد ملف واحد فقط، لذا لا توجد سجلات أو ملفات أخرى للكتابة إليها وتفريغها. يُقلِّل InfinityDB حجم ملف قاعدة البيانات من خلال أربعة أنواع من الضغط ( البادئة ، واللاحقة، و zlib ، و UTF-8 ).
ترقية بدون مخطط
تتم ترقية المخطط عند توسيع الهياكل أو تعديلها عن طريق إضافة أو إزالة العناصر بطرق جديدة في وقت التشغيل، ولا توجد نصوص ترقية - وبالتالي فإن نموذج البيانات هو NoSQL وبدون مخطط.
إلى جانب أنواع البيانات الأولية العادية في جافا، توجد أنواع "EntityClass" و"Attribute"، يُعرَّف كل منها باسم أو رقم. هذه بيانات وصفية اختيارية يمكن دمجها مع مكونات أي عنصر. يمكن استخدامها لتمثيل الجداول، على سبيل المثال، حيث يُعطى كل جدول EntityClass معينًا في بداية العنصر، ويُعطى كل عمود Attribute مختلفًا. يبدأ كل عنصر من عناصر الجدول بـ EntityClass معين، ثم يوجد نوع بيانات أولي واحد أو أكثر يمثل "كيانًا" (مثل مفتاح)، ثم توجد Attribute معينة تُقابل عمودًا، وأخيرًا بعض أنواع البيانات الأولية التي تمثل قيمة تلك Attribute. يمكن توسيع هذا النمط البسيط في أي وقت للسماح بجداول متداخلة داخل أي Attribute، أو سمات متداخلة داخل سمات أخرى، أو سمات متعددة القيم، وغير ذلك الكثير. لا يوجد مخطط ثابت في أي مكان آخر، لذا فإن البيانات الجديدة التي تصل إلى النظام تصف نفسها بنفسها، بدقة على مستوى العنصر. يمكن تمثيل فئات الكيانات وأرقام أو أسماء السمات في JSON الموسع. عند عرض البيانات في متصفح قاعدة بيانات العميل/الخادم على الويب، يمكن عرضها ومعالجتها ونقلها كقائمة من العناصر المنسقة والمرتبة، أو كمستندات JSON، أو كجداول متداخلة يتحدد هيكلها المرئي بواسطة فئات الكيانات والسمات المدمجة في العناصر. يجمع هذا بين مرونة JSON الديناميكية ورسمية الجداول.
المعاملات
يُوفر كل من المعاملات العامة (ACD) والمعاملات الخاصة بكل خيط (ACID). يخزن كل مثيل من InfinityDB البيانات في ملف قاعدة بيانات واحد، ولا يتطلب ملفات سجلات أو ملفات استرجاع إضافية. في حالة حدوث أي كارثة باستثناء انقطاع التيار الكهربائي أو أي عطل آخر في الأجهزة، يُضمن أن تكون قاعدة البيانات متسقة مع الحالة التي كانت عليها عند اكتمال آخر عملية تثبيت عامة. يكون الاسترداد بعد الإنهاء المفاجئ فوريًا ولا يتطلب إعادة تشغيل السجلات ببطء. التحميل المجمع هو معاملة عامة بحجم بيانات غير محدود، ويتزامن مع جميع الاستخدامات الأخرى. لا توفر المعاملات العامة عزلًا بين الخيوط، لذا فإن دلالاتها هي (ACD) (بدلاً من (ACID)). بدلاً من ذلك، تستخدم معاملات ACID القفل التفاؤلي للسماح بعزل الخيوط.
جمع القمامة فوراً
مع نمو هياكل البيانات وانكماشها، تُستعاد المساحة المُحررة فورًا وتُتاح لهياكل أخرى. يمكن للأنظمة العمل بشكل مستمر دون تسرب تدريجي للمساحة أو انقطاعات طويلة أثناء مراحل استعادة البيانات المهملة. عندما يصبح هيكل البيانات فارغًا، تُعاد تدوير مساحته بالكامل، بدلًا من ترك "علامات حذف" أو عناصر نائبة أخرى. على سبيل المثال، قد يتقلص سمة متعددة القيم، ربما تكون كبيرة جدًا، إلى قيمة واحدة، لتصبح بنفس كفاءة أي سمة أحادية القيمة، وإذا حُذفت تلك القيمة الأخيرة، تُستعاد جميع المساحة المخصصة لها، بما في ذلك مساحة السمة التي كانت مرتبطة بها، وإذا كان الصف يحتوي فقط على سمات بدون قيم، يُستعاد الصف بالكامل أيضًا. إذا فقد جدول جميع صفوفه، تُستعاد مساحة الجدول. تتمتع أي بنية بيانات، مهما كان حجمها أو نوعها، بهذه الخاصية. لا توجد عدادات مرجعية، وبالتالي يتم جمع أي نوع من الرسوم البيانية بشكل تدريجي تلقائيًا.
منتجات
ميزات عميل/خادم InfinityDB (في مرحلة الاختبار التجريبي):
- نظام عميل/خادم للوصول المشترك الآمن عن بعد إلى مجموعة من ملفات قاعدة بيانات InfinityDB Embedded.
- وحدة تحكم إدارة الويب الخلفية لإدارة آمنة للمستخدمين والأدوار وقواعد البيانات والصلاحيات.
- تصفح وتحرير قواعد البيانات بشكل آمن عبر الويب من خلال واجهة خلفية، مع عرض البيانات في شكل جداول، وJSON، وItemSpace. يعرض الوضع الجدولي البيانات على شكل مستندات وجداول وقوائم قابلة للتداخل، مع إمكانية التحرير والتحديث المتزامن على مستوى الفقرة أو عنصر البيانات.
- الوصول الآمن إلى بيانات RESTful باستخدام Python و bash عبر curl لبيانات JSON و BLOB.
- الوصول عن بعد بواسطة برامج جافا باستخدام ميزة RemoteItemSpace.
- استعلامات نمطية لإعادة هيكلة واستعلام هياكل بيانات ItemSpace بشكل تعسفي وغير SQL، بما في ذلك ما يعادل ItemSpace من نظام إدارة قواعد البيانات العلائقية، والاختيار، والإسقاط، والربط، والترتيب حسب.
- توفر خاصية نقل لاحقة العنصر إمكانية نقل البيانات داخل قواعد البيانات أو بينها من خلال النسخ والنقل والاختلاف والاتحاد والتقاطع.
ميزات InfinityDB Encrypted (الإصدار 5) (في مرحلة الاختبار التجريبي):
- التشفير باستخدام AES-128 أو AES-256 على مستوى كتلة قاعدة البيانات
- المصادقة باستخدام HMAC-SHA256 على مستوى الكتلة
- التجزئة السريعة للكتل المشفرة
- تجزئة الكتل غير المشفرة للتحقق من صحة HMAC
- التوقيع باستخدام شهادات متعددة أو مفاتيح عامة
- التوقيع التدريجي - كل عملية فتح لقاعدة البيانات تسمح بإضافة المزيد من التوقيعات
- تخزين الشهادات وتنظيمها في البيانات الوصفية في ملف قاعدة البيانات الواحد
- استراتيجيات التحقق المخصصة من توقيع العميل - "N of M"، أي شهادة معتمدة، والمزيد
- التحقق من صحة الشهادة
ميزات InfinityDB Embedded (الإصدار 4):
- نموذج NoSQL - هو مخزن قيم/مفاتيح هرمي مُرتب يُسمى "مساحة العناصر" للتبسيط، ولكنه في الوقت نفسه عام.
- مليون عملية في الثانية، وقابلية توسع جيدة متعددة النوى
- ضغط يصل إلى 10 أضعاف أو أكثر
- المعاملات
- تثبيت فوري، بدون إدارة: قاعدة البيانات بأكملها موجودة في ملف واحد
- طباعة/تحليل JSON مع امتدادات لأنواع بيانات أكثر: يمكن لـ JSON تمثيل أي بيانات ItemSpace.
- يمنع نمط تحديث الملفات القوي حدوث التلف.
- استعادة فورية بعد إغلاق مفاجئ للتطبيق بدون سجل
- 12 نوعًا من البيانات الأولية
- BLOBs/CLOBs، أي الكائنات الثنائية الطويلة والكائنات النصية الطويلة
- أنواع البيانات الأولية للبيانات الوصفية "EntityClass" و "Attribute" لهياكل مرنة وقابلة للتوسيع أثناء التشغيل
AirConcurrentMap هو تطبيق لـ ConcurrentNavigableMap في لغة جافا. يتميز بما يلي:
- أسرع من خرائط JDK للأحجام المتوسطة إلى الكبيرة. هذا قيد الحصول على براءة اختراع.
- تتميز بكفاءة ذاكرة أفضل من جميع خرائط مكتبة جافا القياسية التي تحتوي على حوالي 1000 مدخل.
- تُعد عملية المسح المتوازي للخرائط الخاصة أسرع من تلك الخاصة بـ Java 1.8.
- تُعد دالة forEach أسرع من دالة Maps في Java 1.8.
لكل من InfinityDB و AirConcurrentMap:
- تؤدي المعالجة المتزامنة متعددة الخيوط على أنوية متعددة دون استخدام الأقفال إلى زيادة الأداء على منصات متعددة الأنوية، مثل معالج Intel i7، بمقدار سبعة أضعاف تقريبًا. كلا المنتجين قيد الحصول على براءة اختراع.
- يُستخدم الوصول القياسي إلى الخرائط في جافا. تم تطبيق واجهة محسّنة من نوع java.util.concurrent.ConcurrentNavigable، مما يسمح بالاستبدال المباشر في أي تطبيق أو كود اختبار موجود. توفر هذه الواجهة طرقًا متخصصة للتزامن، بالإضافة إلى ميزات ترتيب تُحسّن من أداء SortedSet الأصلي.
تاريخ
قام روجر إل. ديران بتصميم وتطوير محرك قاعدة بيانات إنفينيتي منذ أكثر من 20 عامًا، وهو حاصل على براءتي اختراع أمريكيتين رقم 5283894 [ 4 ] و10417209 [ 5 ]. تم استخدام محرك قاعدة بيانات إنفينيتي لأول مرة بلغة التجميع Intel 8088 في برنامج تحرير الفيديو الرياضي ROSCOR (RSVE) الذي تم ترخيصه لفرق دوري كرة القدم الأمريكية (NFL) في ثمانينيات القرن الماضي. اشترت شركة ليكسيكون برنامج RSVE في عام 1989، ووسعت نطاق استخدامه بشكل كبير ليشمل جميع أنواع الرياضات الاحترافية والجامعية [ 6 ] . أضافت جافا الإصدار 2.0 ميزة المعاملات، بينما أضاف الإصدار 3.0 ميزات التزامن التي لا تزال قيد الحصول على براءة اختراع، وهي تنطبق على كل من InfinityDB وAirConcurrentMap. لا يزال InfinityDB قيد الاستخدام النشط في آلاف المواقع المختلفة، بينما يُعد AirConcurrentMap برنامجًا جديدًا.
تشمل استخدامات برنامج InfinityDB المكتوب بالكامل بلغة جافا، والذي تسوقه شركة Boiler Bay Inc. منذ عام 2002، ما يلي:
- توحيد البيانات الصيدلانية والطبية
- جمع ووصف وتوحيد ومشاركة البيانات المتعلقة بعلم الطيور
- تمثيل التصنيفات من مختلف الأنواع
- أدوات بيئة البرمجة مثل التنقل في مستودع شفرة المصدر
- فهارس النصوص
- أنظمة توحيد البريد الإلكتروني
- أنظمة جمع البيانات الصناعية الموزعة.
مراجع
- ↑ بيترز، ل. ولافرز، ت. (2008). اختبار Swing Extreme: المنهج المتطرف لاختبار تطبيقات Java الكاملة . دار نشر Packt. ص 224. ISBN 9781847194824.
- ↑ "واجهة الخريطة (دروس جافا™ > المجموعات > الواجهات)" .
- ↑ "اختبار أداء AirConcurrentMap" (ملف PDF) . مؤرشف من النسخة الأصلية (ملف PDF) بتاريخ 11-03-2016.
- ↑ US 5283894 "طريقة الوصول إلى بيانات تعريف فهرس شجرة B المتزامنة بدون تأمين للعقد المخزنة مؤقتًا"
- ↑ US 10417209 "فهرس متزامن باستخدام النسخ عند الكتابة"
- ↑ صحيفة نيويورك تايمز - مقالات رياضية خاصة: تقنية الفيديو؛ إعادة عرض مخصصة
انظر أيضاً
- أنظمة إدارة قواعد البيانات الاحتكارية
- التخزين المنظم
- برامج متعددة المنصات
- قواعد البيانات المضمنة
- الأنظمة المدمجة
