Jump to content
php.lv forumi

failu glabāšana


vitalja

Recommended Posts

Principā jau visi varianti ir vairāk vai mazāk pareizi un vieni pareizāki par otriem, atkarībā no konteksta un daudziem citiem parametriem, bet pēc tā, ko kurš iesaka, var spriest par to, pie kādām sistēmām katrs ikdienā strādā.

Jā, uzskatāmi parāda, kuram ir kaut kāda prakse ar attiecīgām sistēmām un izpratne par tēmu, lai neietektu šajā gadījumā šaut ar lielgabalu pa zvirbuļiem, vai kuram ir prasts fanbojisms "es dzirdēju, ka krutie džeki dala visu klasteros, CDN, yo".

 

Tas nav raķešu inženieris, kurš jautājumā, kā saķīlēt Deltu, atbild "kādu vēl mopēdu, tak raķetes jau sen izgudrotas, uz ciema diseni ir jālido caur Kosmosu; mopēds ir lohiem, ja".

 

 

Nevaru saprast! Šis forums ir domāts konstruktīvām diskusijām, vai aktivitātēm, kuras iekļauj mērlenti un peni.

Ja tev penis ir derīgs varbūt vienīgi, lai salīdzinātu subatomic līmenī, tad ne visiem tā ir, ja? :D

Edited by Kavacky
Link to comment
Share on other sites

  • Replies 84
  • Created
  • Last Reply

Top Posters In This Topic

Uzrkastīt failu glabāšanu CDN ir ātrāk kā taisīt daudzlīmeņu folderu lokālu glabāšanu.

Parasti katrai normālai cloud glabātuvei nāk līdzi savs libs un tev kodā ir jāieraksta 3 rindiņas, lai saglabātu failu CDN-ā.

Tātad, kāpēc netaisīt CDN variantu, ja:

- to ir ātrāk uzrakstīt

- tas nenoslogo lieki serveri un neapdraud to (gadījums, kad uploado palaižamus failus un palaiž)

- tas strādā ātrāk klientam, jo CDNiem parasti ir efektīvi geokeši.

- tas skeilojas labāk

- rīki, lai menidžētu pēc tam tos failus ir labāki

 

Kāpēc izvēlēties speciāli sliktāku variantu tikai tāpēc, ka tas ir pietiekams?

Link to comment
Share on other sites

// Insertojam faila ierakstu db, dabūjam unikālu id
$hash = md5($id);
$mape = "/storage/" . $hash[0] . "/". $hash[1] . "/" . $hash[2] . "/";

mkdir($mape, true); // Izveidojam visu koku

move_uploaded_file($_FILES['file'], $mape . $hash);

Zinot faila ID vienmēr varam dabūt ceļu uz failu.

 

Baigais čakars.........

Link to comment
Share on other sites

Kur tiks glabāti faili? Publiskā web mapē?

Ko darīt, ja dažiem failiem jābūt publiskiem, bet dažiem nē?

 

Ja lokālajā variantā publiskos un nepubliskos failus norealizēt ir vienkārši, tad kā to var izdarīt ar CDN? Visi faili, kas ir cdnā ir pieejami visiem! Vai arī es kaut ko nezinu??

Link to comment
Share on other sites

Kasspars, depends no CDN. Parasti ir gan access kontroles. Piemēram, S3 visi bucketi ir privāti pēc noklusējuma. Tad cloudfront var visādus brīnumus organizēt, parakstīti url utt. 

 

Bet codez atkal maļ.

  1. CDN nav ātrāk integrēt, ja vien Tu to nedari tā, pa roku galam. Acīmredzot tā tu dari, jā.
  2. Jā, un bucketos tu lādē failus čerez ko, nepalaižamu klientside? BS arguments, nevietā. Ja es varu randomā izpildīt kaut kādus failus uz tavas kastes caur HTTP, tev jau ir problēma.
  3. Geokeši? Kas tāds? Tu domāji edge dns? Nu jā, daudz tev to vajag, ja tavam bļogam ir 5 apmeklētaji no Liepājas.
  4. Tas nu gan ir arguments. Jebkas <10TB trafikā skeilojas labi arī virtuvē zem galda. Tur nevajag CDN. 
  5. ???!!! Kāda velna pēc tu "menedžē" failus CDN? 

Jebkuram nopietnam projektam CDN use vispār ir asinhrons process, kas sevī iesaista local upload, MQ un ielādi 1 vai vairākos CDN. Tas nav ne vienkārši, ne 3 rindas. Tas protams, ja tavs projekts nav ķep ļep sabakstīts un CDN ielāde ir prefetch. 

 

Un par tiem failiem, nekādi faili nekādās publiskajās direktorijās nedrīkst parādīties, nekādā formā. Proxy + ACL. 

Edited by F3llony
Link to comment
Share on other sites

CDN nav ātrāk integrēt, ja vien Tu to nedari tā, pa roku galam. Acīmredzot tā tu dari, jā.

Nē, CDN ir ātrāk integrēt, jo tas tam ir paredzēts un daudzas no standarta problēmām jau ir atrisinātas.

 

Jā, un bucketos tu lādē failus čerez ko, nepalaižamu klientside? BS arguments, nevietā. Ja es varu randomā izpildīt kaut kādus failus uz tavas kastes caur HTTP, tev jau ir problēma.

Ne viens vien redzēts ar līkām rokām. Tad jau labāk izvēlēties metodi, kur līkas rokas nevar nodarīt skādi.

 

Tas nu gan ir arguments. Jebkas <10TB trafikā skeilojas labi arī virtuvē zem galda. Tur nevajag CDN.

Teiksim tu esi uztaisījis savas sētas fullhd video uploada lapu, kurā katrs lietotājs uploado pāris GB un ir pāris simti lietotāji, kas tā dara un kopā tev jārēķinās ar 1-5 TB video.

Atrodi man tagad VPS vai hostingu, kur tu varēsi uploadot 5 TB ar failiem (Unlimited storage par 1,5$/mēnesī hostingi neskaitās :) )

 

Jebkuram nopietnam projektam CDN use vispār ir asinhrons process, kas sevī iesaista local upload, MQ un ielādi 1 vai vairākos CDN. Tas nav ne vienkārši, ne 3 rindas. Tas protams, ja tavs projekts nav ķep ļep sabakstīts un CDN ielāde ir prefetch.

Nu tas ir tavā PHP. Scala, Play un Akka, piemēram, pēc dabas jau ir asinhroni un visu šo asinhroni bez problēmām var darīt bez nekādiem papildus MQ, uztaisi darbībai Future vai Actor-u un aidā - papildus 1 - 5 rindiņas koda.

 

Un par tiem failiem, nekādi faili nekādās publiskajās direktorijās nedrīkst parādīties, nekādā formā. Proxy + ACL.

Opā, tu manam blogam ar 5 lietotājiem no Liepājas taisies piedāvāt vēl ieviest papildus softus stekā, konfigurēt tos, apgūt, ja nemāku, utt.?

Izrādās, ka vienkāršais variants, lai būtu pareizs, nav nemaz tik vienkāršs.

Link to comment
Share on other sites

Nu tas ir tavā PHP. Scala, Play un Akka, piemēram, pēc dabas jau ir asinhroni un visu šo asinhroni bez problēmām var darīt bez nekādiem papildus MQ, uztaisi darbībai Future vai Actor-u un aidā - papildus 1 - 5 rindiņas koda.

Kāds sakars ar to, kādā valodā vai platformā? Asinhrons ir un paliek asinhrons - nemaina tas neko, vai tev prefetch un statusu callback ir realizēts PHP, Javā, Skalā, Nodē vai vienalga kādā valodā un freimworkā - tas, ka Skala ir "asinhrona", problēmu neatrisina. Un MQ netiek lietots tikai tāpēc, ka PHP nebūtu thredu vai forku. Also, C# arī ir async modelis. OMG OMG taisam visu dotnetā. 

 

Opā, tu manam blogam ar 5 lietotājiem no Liepājas taisies piedāvāt vēl ieviest papildus softus stekā, konfigurēt tos, apgūt, ja nemāku, utt.?

Izrādās, ka vienkāršais variants, lai būtu pareizs, nav nemaz tik vienkāršs.

Codez random words. Korelācija starp tavu komentāru un manu komentāru ir nulle. Un es neesmu vainīgs, ka tavs freimworks šmeimworks neprot ar to tikt galā by default. Man tas viss izskatās šādi (cdn gadījumā, ar visu async virtuvi):

 

<?php
if ($file->uploaded())
{
  $file->set_destination('fs|cdn|whatever');
  $file->set_access_policy(FileStore::POLICY_PUBLIC);
  // vai
  $file->set_owner(FileStore::OWNER_CURRENT_USER);
  $file->set_access_policy(FileStore::POLICY_OWNER);
  // vai  
  $file->set_owner(FileStore::OWNER_CURRENT_USER);
  $file->set_access_policy(FileStore::POLICY_OWNER_GROUP);
  // vai
  $file->set_owner(FileStore::OWNER_USER_GROUP);
  $file->set_access_policy(FileStore::POLICY_OWNER);
  // vai
  $file->set_access_policy('custom');

  $file->store();
}

Viss. Fails tur, kur vajag, vienalga, CDN, failu sistēma, velns zina kas. Katram storage punktam ir jau gatavas procedūras, ACL implementēts kodolā, viss konfigurējams kā vien ienāk prātā, $file->getUrl() atdod publisku URL, kas ir proxy, kas pārbauda permisijas, liek headerus proxy cache, paraksta redirektus uz CDN ja vajag un dara visu pārējo. Policy var būt jebkas - privāts, PUBLIC, 'custom' profils definēts konfigā.

 

And again, vienalga, vai tā ir skala vai php, labs risinājums un slikts risinājums tipu nemaina atkarībā no platformas. 

 

Teiksim tu esi uztaisījis savas sētas fullhd video uploada lapu, kurā katrs lietotājs uploado pāris GB un ir pāris simti lietotāji, kas tā dara un kopā tev jārēķinās ar 1-5 TB video.

Atrodi man tagad VPS vai hostingu, kur tu varēsi uploadot 5 TB ar failiem (Unlimited storage par 1,5$/mēnesī hostingi neskaitās :) )

Tu jauc CDN un block/file/object storage. CDN, ja esi piemirsis, ir Content Delivery/Distribution Network, kur viena no primārajām iezīmēm ir nogādāt kontentu tuvāk lietotājam izdalot saturu edge nodēs. Šajā gadījumā diez vai tie pāris simti lietotāju ir pa 10 valstīm un dublēt saturu edgē's nav nepieciešams. 

 

P.S. transcode that shit. 4000k kaķiem nav vajadzīgs. It īpaši, ja visiem tiem taviem 100 lietotājiem ir noutbuki ar 720p ekrāniem mehehehe. 

Edited by F3llony
Link to comment
Share on other sites

Piemēram, Laravelam (jaunākai versijai, kas nāk tikai ārā) ir failsistēmas interfeiss, configā norādi draiveri - vai faili ir turpat uz hdd, vai kādā mākoņrisinājumā (atliek ievadīt paroles). Tā kā tehniski pilnībā atkrīt jautājums, kā apakšā tas ir realizēts...

Link to comment
Share on other sites

F3llony, kur tavā piemērā ir asinhronais MQ, kurš nogādā failu uz Cloud storage vai, piemēram, resizo bildes utml.?

 

briedi, F3llony, anyway, beidzot jūs sākat dot normālus padomus kā faili ir jāuploado, ka jāizmanto abstrakcijas, kur nav svarīgi, kāds ir store apakšā un, ka jāizmanto FW/bibliotēkas, kuras atbalsta uzreiz dažāda veida store-s.

Tagad tik pilnus piemērus 2-3 freimworkiem vai bibliotēkām un jautājums būs atbildēts.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...

×
×
  • Create New...