خوارزمية تقصير الروابط

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

أي أفكار حول الموضوع؟


استخدم النظام 36 ، base 36 لتحويل رقم الاي دي الخاص بالرابط بعد اضافته الى قاعدة البيانات من النظام العشري الى النظام 36 ، ومن ثم عدل على ملف .htaccess

هل كل ما في الامر بالنسبة لي

وهذا مثال فعلي على استخدامه

طبعا لماذا 36 لانه يعطيني الحرية في ان يكون لدي ملايين الروابط دون ان يكون الرابط طويل ، اضافة الا انه يمكنني من التوجيه للرابط بدون ان احتاج للاستعلام من القاعدة على ما يوازيه من رقم اي دي ، لانني استطيع معرفة الاي دي مباشرة بعد ان احول الرقم من النظام 36 الى النظام العشري.

فهنا في هذا المقال (1zoko) يعبر عن الرقم 3344424

ولو كنا نريد المقال الذي يحمل الاي دي 8754874575 (لكان الرابط هو 40sfcgf)

أعجبتني طريقتك حيث أنها تقوم بتحويل الرقم المعرف للمقالة بسلسلة فريدة لا تكرر من المرة الأولى مباشرة، لأن الرقم المعرف في أصله فريد pk ويعتبر المفتاح بقاعدة البيانات والذي حدث مجرد تحويل لطريقة ترميز هذا المفتاح، ما فهمته أن النظام السادس والثلاثين الذي تستخدمه يوفر 26 حرفا إنجليزية بحالة upper case مثلا ومعها 10 أرقام من 0 إلى 9، أي أنني يمكن أن أزيد مدى الرموز إلى base 62 بإضافة الحروف ذات الحالة lower case وهكذا.

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

كنت لأفضل خدمة 36 من ناحية تجربة المستخدم

فأحيانا يتم إدراج الروابط المقصرة في اللافتات والمطبوعات والصور ما إلى ذلك، لذا لن يتم دوما نسخ الرابط، وضع حروف كبيرة وصغيرة سيصعب على المستخدم، فأحيانا المستخدمون يدخلون كل الحروف كبيرة، أو كلها صغيرة مما قد يؤدي لرابط خطأ، فلا بأس إذا ضحيت بكذا تريلون رابط من أجل تجربة جيدة D:

وجهة نظر سديدة لم أنتبه لها، نعم لا بأس بذلك طمعا في راحة المستخدم

الا تعتقد أن تجاهل الحروف الكبيرة سيجعل الروابط أطول ؟ ماذا تقترح؟

طول الرابط هو 6 أحرف

عدد الأحرف هو 36

يعني 6 أس 36

بمعنى لدينا 10314424798490535546171949056 رابط

عندما ينفذون، نضيف حرف آخر فحسب

ونسيت ان اقول الفائدة الاساسية هو انه الرابط يكون فريد لانه اصلا ترجمة لرقم الرابط في قاعدة البيانات. ومستحيل يتكرر لانه primary key