Saya ingin membuat layanan penyingkat URL di mana Anda dapat menulis URL panjang ke dalam kolom input dan layanan mempersingkat URL menjadi " http://www.example.org/abcdef
".
Alih-alih " abcdef
" bisa ada string lain dengan enam karakter yang mengandung a-z, A-Z and 0-9
. Itu membuat 56 ~ 57 miliar string mungkin.
Pendekatan saya:
Saya memiliki tabel database dengan tiga kolom:
- id, integer, peningkatan otomatis
- long, string, URL panjang yang dimasukkan pengguna
- pendek, string, URL singkat (atau hanya enam karakter)
Saya kemudian akan memasukkan URL panjang ke tabel. Lalu saya akan memilih nilai kenaikan-otomatis untuk " id
" dan membangun hashnya. Hash ini kemudian harus dimasukkan sebagai " short
". Tapi hash macam apa yang harus saya bangun? Algoritma hash seperti MD5 membuat string terlalu panjang. Saya tidak menggunakan algoritma ini, saya pikir. Algoritma yang dibangun sendiri akan bekerja juga.
Ide saya:
Untuk " http://www.google.de/
" saya mendapatkan id kenaikan-otomatis 239472
. Lalu saya melakukan langkah-langkah berikut:
short = '';
if divisible by 2, add "a"+the result to short
if divisible by 3, add "b"+the result to short
... until I have divisors for a-z and A-Z.
Itu bisa diulang sampai jumlahnya tidak habis dibagi lagi. Apakah Anda pikir ini pendekatan yang baik? Apakah Anda punya ide yang lebih baik?
Karena minat yang sedang berlangsung dalam topik ini, saya telah menerbitkan solusi yang efisien untuk GitHub , dengan implementasi untuk JavaScript , PHP , Python , dan Java . Tambahkan solusi Anda jika Anda suka :)
encode()
dandecode()
fungsinya. Oleh karena itu langkah-langkahnya adalah: (1) Simpan URL dalam basis data (2) Dapatkan ID baris unik untuk URL tersebut dari basis data (3) Konversikan ID integer ke string pendek denganencode()
, misalnya273984
kef5a4
(4) Gunakan string pendek (mis.f4a4
) Di URL sharable (5) Saat menerima permintaan untuk string pendek (mis.20a8
), dekode string ke ID integer dengandecode()
(6) Cari URL dalam database untuk ID yang diberikan. Untuk konversi, gunakan: github.com/delight-im/ShortURL