Ky artikull do të tregojë të kuptuarit tim për kodimin e bazës64 dhe mënyrën se si kompjuteri interpreton dhe formon karaktere.

Çfarë ndodhi kur shkruajmë tekst në kompjuterin tonë?

Si një zhvillues softuerësh, të gjithë kemi dëgjuar për kodin ASCII, UTF-8, kodimin Base64...etj, unë i shoh ato si mënyra të interpretimit të karaktereve.

Për shembull, kur kompjuteri merr një varg si ky:

APPLE

do të konvertohet në një gjuhë të lexueshme nga kompjuteri si kjo:

01000001 01010000 01010000 01001100 01000101

Çdo alfabet anglez merr saktësisht 8 bit në kodin ASCII dhe UTF-8.

Enkodimi i Base64

Kur flasim për konvertimin e diçkaje në vargun base64, ne në fakt po i riorganizojmë bitet themelore në shumë grupe me 6 bit dhe e kthejmë atë përsëri në varg.

Pse 6 bit? Sepse 2 në fuqinë e 6 është 64, do të thotë se kemi 64 hapësira për të formuar karaktere të ndryshme.

Pra, sipas biteve të mësipërme, ne mund t'i riorganizojmë bitet si kjo:

010000 010101 000001 010000 010011 000100 0101[00]
// two 0 in [] means padding
// remember to pad if bits can't be divided by 6

Sipas tabelës më poshtë, ne jemi në gjendje të formojmë vargun bazë64 si kjo:

Q V B Q T E U =

Por prisni, pse ka një "=" në fund të vargut?

Unë mendoj se ky është një hak për kthimin e vargut në binar, "=" përdoret për të përfaqësuar sa 0 janë shtuar, kur janë shtuar dy 0, një "=" do të shtyhet në pjesën e pasme të vargut bazë64. Kur kompjuteri kthen përsëri vargun në binar, 0 dhe "=" e shtuar do të shkurtohen.

const buf1 = Buffer.from('APPLE')
const base64Str = buf1.toString('base64')
const buf2 = Buffer.from(base64Str, 'base64')
console.log(Buffer.compare(buf1, buf2)) // 0

Shembull i jetës reale

Unë kam dëgjuar gjithmonë për ruajtjen e imazhit si një varg bazë64 në bazën e të dhënave. Megjithëse nuk e kam provuar kurrë më parë, intuita ime më tha se ka shumë të meta në përdorimin e kësaj qasjeje.

Shumë njerëz besojnë se base64 është një mekanizëm dekompresimi, por madhësia e vargut base64 është në të vërtetë afërsisht 4/3 herë më e madhe se fotografia origjinale. Kjo do të supozojmë se ruajmë një foto origjinale mesatare 1MB të madhe në DB, duhet të tërheqim të paktën 1.333 GB për vetëm 1000 rreshta të dhënash, për të mos përmendur kufirin e madhësisë së vargut të kolonës.

Për të vërtetuar dhe sqaruar supozimin tim, unë kam bërë një projekt demo. Në këtë projekt, unë bëj 3 detyra paralele, secila konverton një imazh në vargun base64, hap një lidhje mongoDB dhe ngarkoj imazhin.

Pas disa mostrave, zbulova se imazhi5 (më i madhi) do të marrë gjithmonë 0,5 ~ 1 herë më shumë kohë se i dyti kur ngarkohet dhe 1 ~ 2 herë më shumë kohë kur kërkohet.

Pra, madhësia e të dhënave ka rëndësi. Sipas mendimit tim, ruajtja e imazhit të madh në S3 do të ishte më mirë.

konkluzioni

Megjithëse të kuptuarit e mekanizmit themelor të base64 nuk do të ndihmojë shumë në zhvillimin e softuerit dhe dizajnimin e arkitekturës, unë jam ende i lumtur të gërmoj dhe kuptoj pjesën më themelore të shkencës kompjuterike. Kontrolloni depon time më poshtë nëse jeni kurioz për zbatimin tim dhe faleminderit për leximin.