Saya ingin menggunakan Youtube sebagai contoh: mereka menggunakan ID dalam bentuk PEckzwggd78
.
Mengapa mereka tidak menggunakan bilangan bulat sederhana?
Atau imgur.com - mereka juga menggunakan ID seperti 9b6tMZS
untuk gambar dan galeri. Bukan bilangan bulat berurutan.
Mengapa mereka tidak menggunakan bilangan bulat (terutama yang berurutan)?
Dalam kasus apa itu keputusan bijak untuk menggunakan ID string seperti itu daripada bilangan bulat?
Jawaban:
Youtube tidak dapat menggunakan ID berurutan karena dua alasan:
Basis datanya hampir pasti didistribusikan, membuat penomoran berurutan menjadi rumit.
Ini memiliki opsi privasi "Video tidak terdaftar": yang tidak muncul di hasil pencarian, tetapi tersedia jika Anda mengetahui ID.
Oleh karena itu, ID video harus acak dan tidak dapat diprediksi. Apakah ID diwakili oleh digit saja, atau dengan kombinasi huruf dan digit, tidak relevan: ada pemetaan sepele dari satu representasi ke yang lain.
sumber
2^40
barang, di beberapa arsitektur ada alasan yang sah untuk memilih ruang2^80
atau2^120
bit. Contoh alasannya adalah: mengurangi tabrakan tanpa secara teknis memeriksa tabrakan; menggunakan jarangnya kunci sebagai bagian dari membuat rahasia sulit ditemukan ("video tidak terdaftar"), dll.Pada bentuk ID: Mereka menggunakan Base64 (menggunakan karakter
a
-z
,A
-Z
,0
-9
,-
, dan_
). Ini memungkinkan mereka untuk memiliki 6 bit informasi per karakter. YouTube menggunakan ID video 11-karakter, yang berarti mereka dapat menghasilkan 2 6 * 11 , atau lebih dari 7 * 10 19 ID. Seperti yang dikatakan Tom Scott , itu "cukup bagi setiap manusia di planet Bumi untuk mengunggah video setiap menit selama sekitar 18.000 tahun." Base64 juga mudah digunakan, karena 64 adalah kekuatan 2, yang berarti setiap karakter mewakili jumlah bit yang tepat. Kami menggunakan heksadesimal (basis 16) untuk alasan yang sama.Pada sifat ID yang tidak berurutan: itu berarti mereka tidak memerlukan penghitung yang disinkronkan antara semua server yang menetapkan ID untuk video. Mereka hanya dapat menghasilkan nomor acak, memeriksa apakah sudah digunakan, dan pergi dari sana. Mereka bahkan dapat menetapkan setiap server satu blok ID untuk dipilih dan menghilangkan pemeriksaan duplikasi. Saya tidak tahu apakah mereka melakukan itu, tetapi mereka bisa.
Alasan lain untuk ID non-sekuensial adalah karena inilah yang membuat video "tidak terdaftar" berfungsi. Ini adalah video yang tidak akan muncul di hasil pencarian atau sebagai saran, tetapi dapat diakses jika Anda memiliki tautan. Jika Anda menggunakan penghitungan berurutan, Anda bisa pergi ke video, menambah ID dengan satu, dan gagasan video tidak terdaftar sekarang rusak.
ID non-sekuensial juga membantu menyembunyikan informasi dari pesaing, seperti jumlah total video, atau jumlah video yang diunggah per kerangka waktu.
Saya sangat merekomendasikan video Tom Scott . Informasinya hampir selalu menarik dan akurat.
sumber
Integer tidak mengukur skala itu dengan baik, integer unsigned 32-bit "normal" akan maksimal lebih dari 4 miliar.
Mereka mungkin tidak ingin Anda tahu berapa banyak barang yang mereka miliki secara online atau melacak laju pertumbuhannya.
Surat dapat menampung lebih banyak informasi daripada angka, Anda membutuhkan lebih sedikit surat untuk mengekspresikan "angka" yang sama. Untuk database pengindeks besar ini bisa bertambah.
sumber
1) Mengapa beberapa situs web menggunakan surat dalam ID mereka? Apakah mereka string?
Kami tidak tahu apakah situs web tersebut menyimpan ID dalam database mereka sebagai string. Angka dan string benar-benar sama dengan komputer. String hanyalah angka, hanya ditampilkan dengan basis yang berbeda.
'A' = 0x41 = 65 = 0b1000001
, ke komputer itu semua sama. Tetapi jika Anda menampilkannya, semakin besar alasnya, semakin pendek penyajiannya, dan URL yang lebih pendek lebih mudah dibaca dan dibagikan untuk manusia. Situs-situs seperti YouTube dan Imgur menggunakan basis 62 (huruf, huruf besar dan kecil, plus digit) atau lebih besar (tambahkan tanda hubung atau karakter URL yang valid lainnya), yang relatif pendek untuk angka besar. Apa yang ingin Anda gunakan,youtu.be/23489234892348234933
atauyoutu.be/B9k6KMrv8vh
?2) Mengapa ID non-berurutan digunakan?
Jawaban oleh IMil menjelaskannya dengan baik:
Ini juga menjelaskan mengapa ID begitu besar: (YouTube tidak meng-host 23.489.234.892.344.234.933 video berbeda, jelas)
Saat membuat ID, itu masalah jika Anda secara tidak sengaja menghasilkan ID yang sama dua kali, jadi Anda membutuhkan ruang ID besar untuk mencegah masalah ulang tahun
Orang-orang hanya dapat menebak URL video yang tidak terdaftar jika peluang setiap ID yang valid yang digunakan untuk video tidak terlalu, sangat kecil.
sumber
People can just guess the URL of unlisted videos if the chance of any given valid ID being used for a video isn't very, very small.
- bagaimana Anda tahu jika video tidak terdaftar tidak dapat diakses untuk semua orang kecuali pembuatnya? bahkan jika orang lain sudah menebak ID-nyaSebagai tambahan, itu tidak selalu berarti bahwa representasi internal adalah sebuah string. Mereka sangat mungkin mengkodekan pengenal angka sebagai string alfanumerik untuk url yang lebih pendek.
sumber
Seperti yang telah Anda tunjukkan bahwa akan mudah untuk menggunakan ID unik yang universal hanya menggunakan angka karena di bawah kap semuanya adil
0
dan1
dan Anda dapat memperluas nomor menjadi lebih presisi hingga 128 bit atau lebih.Saya pikir alasan utama adalah bahwa, dengan asumsi beberapa rentang tetap sewenang-wenang seperti
uint32
(hanya untuk contoh), jika Anda menggunakan huruf juga Anda dapat memiliki ID yang lebih pendek secara total.Saya membayangkan bahwa ini adalah alasan estetika untuk URL tersebut. Alih-alih
4,129,873,773
dengan surat itu jauh lebih pendekFu837t
(hanya dibuat-buat oleh saya). Seorang pengguna bahkan mungkin dapat mengingat URL untuk memberikannya kepada seorang teman. Platform seperti Youtube biasanya memiliki UUID lebih lama dari 32 bit karena mereka akan kehabisan ruang dengan cepat.sumber
URL pendek diinginkan karena membuat tautan dan berbagi menjadi lebih mudah (mis. Anda dapat membagikan tautan dalam SMS, lebih cepat untuk mengetik dan sebagainya). Layanan seperti Youtube atau Imgurl ingin Anda berbagi URL dengan santai, jadi ini merupakan pertimbangan penting.
Menggunakan ID alfanumerik daripada angka berarti Anda membutuhkan lebih sedikit karakter untuk mengekspresikan ID dengan ukuran bit yang sama. Misalnya 6 digit memberi Anda satu juta id unik tetapi 6 karakter alfanumerik (menggunakan perangkat base64) memberi Anda 68 miliar pengidentifikasi unik.
Sejauh yang kita tahu, pengidentifikasi alfanumerik bisa berupa angka berurutan, hanya dikodekan dalam format alfanumerik seperti base64. Tetapi seringkali layanan komersial menghindari kode berurutan untuk mencegah orang menebak ID dan untuk menghindari pengungkapan informasi bisnis seperti jumlah pelanggan.
sumber
Ada beberapa alasan mengapa Anda akan menggunakan id non-numerik, tetapi juga memahami bahwa tidak semua nilai dengan karakter alfabet benar-benar string. YouTube memiliki reputasi jumlah video yang luar biasa, dengan urutan 300 jam video yang diunggah setiap menit ( ref ). Bilangan bulat unik yang mewakili video-video itu bisa cukup lama, jadi gunakan sesuatu seperti angka yang disandikan URL Base64 ( ref ).
Jenis Representasi Identifier:
Mereka semua memiliki kekuatan dan kelemahan mereka. Semakin unik karakter yang dapat Anda gunakan untuk pengidentifikasi Anda, semakin sedikit karakter yang Anda butuhkan untuk merepresentasikan angka. Basis nomor 64 adalah kompromi yang cukup bagus karena ada varian yang berfungsi untuk URL dan mengompres jumlah karakter yang diperlukan untuk mewakili angka 6 hingga 8 (yaitu ukuran 3/4).
String yang dapat dibaca berfungsi untuk blog karena mereka dapat meningkatkan kemampuan pencarian, dan jauh lebih mudah untuk menghasilkan judul yang unik ketika jumlah catatan kecil.
sumber
Hash konten
Kata "hash" tidak ditemukan dalam jawaban yang ada, bagus, jadi di sini kita mulai:
Seringkali, data dapat diidentifikasi dengan hash isinya daripada ID buatan yang independen. Ini sangat jelas dalam perangkat lunak seperti
git
atau sistem file seperti ZFS di mana properti khusus ini menggunakan hash konten tidak hanya membuat hal-hal lebih mudah (misalnya de-duplikasi), tetapi juga memiliki properti bagus lainnya seperti caching sepele, sejarah yang aman, mendeteksi bit busuk dll.Hash biasanya berupa angka hex (atau ruang huruf yang lebih besar), jadi itu sebabnya Anda tidak melihat ID integer. Ada hanya yang ada bilangan bulat (dalam kasus-kasus).
Hash baik jika objek data Anda tidak dapat diubah (seperti di ZFS atau
git
); mereka akan bagus untuk menyimpan gambar, misalnya, pada CDN besar. Saya tidak tahu apakah mereka ID tertentu sebenarnya adalah hash, tapi itu pasti akan masuk akal (dan sebagai Michael Kjörling berkomentar, singkat ID mungkin tidak hash untuk alasan yang jelas - sebagai pembanding, git menggunakan nilai-nilai SHA-1 yang 20 byte atau 40 hex digit).sumber
hashCode()
, dll. Tentu saja, semakin pendek hash, tabrakan acak lebih mungkin.Ok salah satu alasannya adalah bahwa karakter dikirim sebagai karakter dan bukan sebagai bilangan bulat. Ini karena cara kerja HTTP Get.
Ketika Anda berkata, "mengapa tidak menggunakan integer?" Nah, integer kemudian dicacah dan setiap digit dikirim sebagai karakter dan Anda berakhir dengan serangkaian karakter bagaimanapun. Jadi mengapa tidak menggunakan semua opsi untuk karakter?
Ada juga faktor manusia:
Ambil imgur misalnya: https://imgur.com/ ***** / s6UqP
s6UqP,
Rentang untuk setiap karakter adalah: a hingga z modal, sub-kapital z hingga, dan 0 hingga 9 = 26+ 26+ 10 = 62 opsi untuk setiap posisi dalam string. Dengan lima posisi itu 916132832 kemungkinan kombinasi. Jika Anda hanya menggunakan angka, Anda akan membutuhkan 9 digit.
Orang dapat menyimpan sekitar 7 objek dalam memori, 9 digit terlalu banyak, 5 karakter dapat dilakukan.
Angka ajaib 7
sumber