هل يوجد حل لقراءة رقم أكبر من حجم نوع البيانات double؟

نوع البيانات الخاص بالمفتاح الرئيسي Primary Key يعد من الأسباب المتكررة لتوقف الأنظمة التي تعمل لعدد من السنين.

إذا كنت قد عملت في تطوير النظم فحتماً فلا بد أن تكون قد فكّرت في نوع البيانات Data Type المناسب لكل عمود في قاعدة البيانات.

في هذه التدوينة أشاركك بعض الأفكار عن تعدي حدود أكبر نوع بيانات أولي بالجافا و تجربة ذلك فعلاً.

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

الزيادة المستمرة

من الطرق البسيطة التي تُستخدم هذه الأيام في تعريف المفتاح الرئيسي إسناد خاصية الزيادة التلقائية Auto Increment إلى الجداول، وذلك لسهولة هذه الطريقة مقارنة بمحاولة إيجاد عدد من الأعمدة المتميزة لتعريفها كمفتاح رئيسي، كما أن سرعة الوصول في عمليات الإتحاد Join أكثر كفاءة وسرعة عندما يكون المفتاح الرئيسي عمود واحد.

نوع البيانات unsinged integer

هنالك أسبابٌ كثيرة لذلك، ولكن ليس هذا ما أرغب بأن أحدثك عنه..

المهم في الأمر أن أغلب الجداول تعتمد على نوع البيانات Unsigned Integer و الذي غالباً ما يكون كافياً لأغلب الأنظمة المتوسطة لعدة سنوات.

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

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

ما هو أقصى رقم من الممكن أن نخزنه في متغير جافا؟

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

فما الذي سيحدث إذا تعدى الرقم الممكن إسنادُه إلى النوع double الحد الأقصى، ولا نملك نوعاً آخر رقمياً لنضع فيه هذه القيمة؟!!

مثلاً عندما تكون قيمة المتغير int أكبر من أقصى حد له فإن ذلك يولد خطئاً، و الحل هو تغيير نوع البيانات إلى نوع أكبر.

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

بكل بساطة عرفتُ متغيراً من النوع double و أسندت لهُ أكبر قيمة ممكنة.

double x = 1.7976931348623158 * Math.pow(10,308);

بتجاوز أقصى حد لنوع البيانات double كانت النتيجة أن القيمة تساوي infinity.

في الحقيقة أن هذا الرقم يساوي ما لا نهاية فعلاً، لأنه في الواقع من الصعب الوصول إلى هذا الرقم في جدول واحد!

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

الحد الأقصى لأنواع المتغيرات - جدول قاعدة بيانات

و هو كما ترى أقل من الحد الأقصى لنوع البيانات double و الذي يحتوي على 308 صفراً.

ولكن لنفترض أن برنامجك يحتاج إلى التعامل مع أرقام أكبر من الحد الأقصى الذي يسعه متغير من النوع double فإن هناك حلٌ آخر.

بكل بساطة تستطيع إستخدام الصنف BigDecimal و الذي يصل الحد الأقصى له لـ 4 أضعاف الحد الأقصى لمتغير double !

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

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

اظهر المزيد

مصطفى الطيب

صديقٌ لنُظمِ المعلُومات و عُلومِ الحَاسِب و مُختصٌ بهما، مُحبٌ للعِلمِ و نَشرِه. أُشاركُ معارفي و تَجاربي و خِبراتي في تَدويناتٍ و دوراتٍ من خلال مُدونةِ عُلوم.

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *

مقالات ذات صلة

زر الذهاب إلى الأعلى