Puncte:2

Cum se exclude *de fapt* un director în sincronizarea AWS S3?

drapel in
DMJ

The aws s3 sincronizare comanda are o --exclude flag care vă permite să excludeți un folder din sincronizare. Cu toate acestea, chiar dacă fișierele nu sunt încărcate din acel director, comanda încă privește și procesează toate fișierele din acel folder. Motivul pentru care am vrut să exclud acel folder în primul rând a fost pentru că este un folder foarte mare care conține o mulțime de date, datele pe care vreau să le sincronizez fiind doar câțiva MB în folderul părinte și alte câteva subdosare. Cu toate acestea, este nevoie de câteva minute pentru a sincroniza acești câțiva MB, din cauza câțiva GB de date din acel subdosar de date. Există vreo modalitate prin care pot de fapt excludeți (de exemplu, chiar de a fi privit sau procesat) acel subdosar, astfel încât comanda de sincronizare să se finalizeze într-un interval de timp rezonabil?

Puncte:3
drapel cn

Cred că acesta poate fi un caz de așteptări nepotrivite cu privire la funcționalitatea oferită de S3.

S3 nu are de fapt nicio structură, găleata are doar un set plat de obiecte cu șirul complet care ar putea fi văzut ca „calea” fiind cheia fiecărui obiect.
The Acțiune API ListObjectsV2 oferă totuși caracteristici precum specificarea unui prefix (returnează doar obiectele care au o cheie care începe cu un anumit șir de caractere) și opțiunea de a specifica un delimitator (împarte cheile după delimitatorul furnizat și grupează segmente cheie repetate) care vă permit să prezentați conținutul o găleată ca și cum ar avea structură (cum ar fi ceea ce face Consola AWS, de exemplu).

The aws s3 sincronizare utilitatea probabil începe să funcționeze de la normal Acțiune API ListObjectsV2, dar acest API nu are nicio funcționalitate echivalentă cu --exclude (sau --include) din utilitarul de sincronizare, doar opțiunea de a obține lista filtrată după prefixul cheii.
Prin urmare, se pare că utilitarul de sincronizare trebuie să proceseze acele opțiuni de filtrare mai flexibile din partea clientului, deoarece procesează lista completă de obiecte pentru prefixul specificat, care nu va fi niciodată eficient dacă există un număr mare de obiecte. sub prefixul specificat care ar trebui să fie omis.

Ceea ce doriți să faceți în scenariul dvs. este probabil să specificați prefixul sau prefixele pe care le doriți, în loc să specificați un prefix mai generic și să filtrați ceea ce nu doriți. Dacă ceea ce doriți nu este identificabil prin prefix, vă recomandăm să vă schimbați denumirea, astfel încât să existe un prefix cunoscut pe care să îl puteți specifica. (Sau, eventual, chiar folosind compartimente separate pentru diferite tipuri de date, dacă asta face mai multe sens pentru situația ta.)

drapel in
DMJ
Văd, asta are ceva sens în contextul unei descărcări de pe S3. Totuși, are mai puțin sens în contextul unei încărcări: sistemul de fișiere de pe care îl încarc are o structură definită reală, chiar dacă S3 este doar perechi cheie-valoare. Presupun că poate în această situație este doar o lipsă de optimizare pentru acest caz de utilizare?
drapel cn
@DMJ Corect, dacă te uiți în mod special la cazul „încărcare din sistemul de fișiere local în s3”, presupun că nu contează atât de mult că cazul opus este și mai problematic de optimizat. O preocupare suplimentară care se aplică și cazului local este modul în care `--exclude` poate fi un model scris pentru a se potrivi cu orice parte a căii, astfel încât, în timp ce folosirea unui model care se potrivește în esență cu un director principal, pare că ar putea fi optimizat pentru localul sistem de fișiere, cazul general necesită încă să se uite recursiv la toate fișierele la nivel local. Îmi pot imagina că nu s-au optimizat pentru acel caz special.
Puncte:0
drapel in
DMJ

În timp ce răspunsul lui HÃ¥kan Lindqvist pare a fi răspunsul corect din punct de vedere tehnic, din păcate nu a rezolvat problema. Sincronizarea (încărcarea) a câțiva MB a durat până la 30 de minute din cauza unui subfolder mare care oricum era exclus. Deoarece AWS CLI nu pare să accepte în mod nativ funcționalitatea de care aveam nevoie, am apelat la un alt instrument: un script shell.

#!/bin/sh

pentru localfile în /home/path/to/source/files/*.*
do 
aws s3 cp „$localfile” s3://path/to/bucket/
Terminat

aws s3 sync /home/path/to/source/files/subfolder1 s3://path/to/bucket/subfolder1
aws s3 sync /home/path/to/source/files/subfolder2 s3://path/to/bucket/subfolder2
aws s3 sync /home/path/to/source/files/subfolder3 s3://path/to/bucket/subfolder3
# Sari peste subfolderul 4
aws s3 sync /home/path/to/source/files/subfolder5 s3://path/to/bucket/subfolder5
aws s3 sync /home/path/to/source/files/subfolder6 s3://path/to/bucket/subfolder6
aws s3 sync /home/path/to/source/files/subfolder7 s3://path/to/bucket/subfolder7
aws s3 sync /home/path/to/source/files/subfolder8 s3://path/to/bucket/subfolder8
aws s3 sync /home/path/to/source/files/subfolder9 s3://path/to/bucket/subfolder9
aws s3 sync /home/path/to/source/files/subfolder10 s3://path/to/bucket/subfolder10

Deși această abordare a rezolvat problema pe care o aveam în circumstanța mea particulară, nu este lipsită de dezavantaje:

  • The aws s3 cp comanda încarcă întotdeauna fișierul, chiar dacă nu s-a schimbat de data trecută
  • Rularea aws s3 cp comanda într-o buclă for mi se pare vizibil mai lentă decât aws s3 sincronizare comanda este în general în circumstanțe normale.
  • Pe baza răspunsului lui HÃ¥kan Lindqvist, nu sunt sigur că această abordare ar face ceva pentru a ajuta pe cineva care a descărcat mai degrabă decât a încărcat
  • Nu este multiplatformă (Acest lucru nu ar funcționa pe Windows. Din fericire pentru mine, sunt pe Linux.)

În ciuda dezavantajelor, în circumstanțele mele, aceasta este mai mult decât un ordin de mărime mai rapid decât utilizarea aws s3 sincronizare cu --exclude steag, așa că sunt mulțumit. Sper totuși că Amazon oferă o opțiune mai bună în viitor.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.