Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

Mappen structuur wijzigen via database

Pagina: 1
Acties:

  • Vinze
  • Registratie: Augustus 2006
  • Laatst online: 20-11 10:29
Ik ben inmiddels al een aantal jaar bezig met de ontwikkeling en uitbreiding van een CRM systeem. Echter loop ik nu tegen een aantal punten aan die ik vroeger niet zo uitbreidbaar heb opgezet.

Ik heb een map 'uploads' op de server staan waarheen bestanden geüpload worden. Deze heeft de volgende structuur: /uploads/item/id.

Een aantal voorbeelden:
/uploads/werkstations/647
/uploads/servers/324
/uploads/klanten/96
/uploads/licenties/2745

Echter loop ik nu tegen het volgende aan; wanneer een klant uit het systeem (MySQL database) verwijderd wordt, wordt ook alles wat gekoppeld is uit de database verwijderd. Helaas gaat dit voor de bestanden niet zo makkelijk. Ik wil de mappen structuur dus herschikken aan de hand van de database. Bijvoorbeeld:
/uploads/klanten/96/werkstations/647
/uploads/klanten/96/servers/324
/uploads/klanten/96/licenties/2745

Nu hebben alle items in de database een veld 'klant_id', die informatie is dus beschikbaar. Maar hoe kan ik snel en efficiënt die mappen structuur opnieuw opbouwen aan de hand van info uit de database?

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Vinze schreef op donderdag 13 juni 2013 @ 18:48:
Maar hoe kan ik snel en efficiënt die mappen structuur opnieuw opbouwen aan de hand van info uit de database?
Waarom moet een dergelijke eenmalige actie altijd "snel en efficient"? Boeit 't als er eens een keer een scriptje een uurtje staat te pruttelen midden in de nacht ofzo? "Snel en efficient" maakt 't ook allemaal overbodig complex. Gewoon rechttoe-rechtaan door je directories/records heen fietsen en de nodige moves/correcties uitvoeren. Voila.

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • C0rnelis
  • Registratie: Juni 2010
  • Laatst online: 01-11 21:54
RobIII schreef op donderdag 13 juni 2013 @ 18:52:
[...]

Waarom moet een dergelijke eenmalige actie altijd "snel en efficient"? Boeit 't als er eens een keer een scriptje een uurtje staat te pruttelen midden in de nacht ofzo? "Snel en efficient" maakt 't ook allemaal overbodig complex. Gewoon rechttoe-rechtaan door je directories/records heen fietsen en de nodige moves/correcties uitvoeren. Voila.
^ Met hem. Als je specifiek vraagt naar iets "snel en efficient" wat had je dan zelf in gedachten wat "langzaam en niet efficient" is?

  • Vinze
  • Registratie: Augustus 2006
  • Laatst online: 20-11 10:29
Met efficiënt bedoel ik: dat ik niet nog handmatig honderden mappen hoef langs te lopen. En met snel bedoel ik dat ik geen dagen bezig ben met het schrijven van een stuk code dat mij helpt :)

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Vinze schreef op donderdag 13 juni 2013 @ 19:01:
En met snel bedoel ik dat ik geen dagen bezig ben met het schrijven van een stuk code dat mij helpt :)
Oh, dus je komt je script hier even afhalen? ;) (Zie scriptrequests/Kan iemand even...?). M.a.w: wat heb je zelf al verzonnen/geprobeerd/gezocht/gevonden? Dat staat toch allemaal in onze Quickstart vermeld? Waarom zie ik dat dan niet terug in je topic? ;)

[ Voor 7% gewijzigd door RobIII op 13-06-2013 19:11 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • ValHallASW
  • Registratie: Februari 2003
  • Niet online
Nou, met zo-iets:

code:
1
2
3
4
5
6
7
8
9
function get_new_name(old_name):
    pathparts = old_name.split("/")
    id = pathparts[-1]
    klant_id = get_klant_id_from_upload_id(id)
    pathparts = pathparts[:-2] + ["klanten", klant_id] + pathparts[-2:]
    return pathparts.join("/")

for old_name in glob(directory):
    move(old_name, get_new_name(old_name))


Eventueel kan je het ook omdraaien: old_name en new_name vanuit de database genereren, en die lijst dan door je filesystem af laten handelen:

  • Vinze
  • Registratie: Augustus 2006
  • Laatst online: 20-11 10:29
RobIII schreef op donderdag 13 juni 2013 @ 19:11:
[...]

Oh, dus je komt je script hier even afhalen? ;) (Zie scriptrequests/Kan iemand even...?). M.a.w: wat heb je zelf al verzonnen/geprobeerd/gezocht/gevonden? Dat staat toch allemaal in onze Quickstart vermeld? Waarom zie ik dat dan niet terug in je topic? ;)
Nee ik hoef geen kant en klaar script, maar had gehoopt hier iemand te vinden die wellicht tegen hetzelfde aanliep en me kon vertellen hoe diegene dat opgelost had.

Ik kan zelf PHP en Node.js, waarvan ik denk dat Node.js het meest geschikt is. Ik weet alleen niet precies waar ik moet beginnen, vanuit de database of de mappen structuur. Bovenstaand voorbeeld is al een mooi opzetje, waarvoor mijn dank :)

  • Gomez12
  • Registratie: Maart 2001
  • Laatst online: 17-10-2023
tja, simpel toch
SQL:
1
select * from table

gevolgd door :
PHP:
1
2
3
for (result in results) {
 movefile(result[file]);
}


Oftewel gewoon door je dbase heenfietsen en per record iets doen.

Alhoewel ik wel moet zeggen dat ik dit altijd rampzalige opslagmethodes vind, ik beschouw het altijd als een file en in de dbase houd ik bij bij welke klant / nieuwsitem deze hoort.

Wil klant95 een file van klant96 hebben dan verander ik niets aan de file, er komt enkel een regel in de db bij naar dezelfde file.

Een file kan nog net wel een type hebben (voor de verdere afhandeling, voor bijv images wil ik thumbnails aanmaken, terwijl ik met bijv word-bestanden iets anders wil doen)

  • Hydra
  • Registratie: September 2000
  • Laatst online: 06-10 13:59
Als je nu gewoon bijhoudt was de geuploade files zijn in je database met een "deleted" vlag, en een PHP script maakt dat gewoon elke avond die tabel leest en alle files met de "deleted" vlag ook daadwerkelijk van schijf verwijderd? Retesimpel scriptje dat je gewoon met een cronjob kan starten.

Daarnaast vind ik de opmerking dat "Node.js het meest geschikt is" ronduit bizar. Een simpel script dat aan de hand van een databasetabel bestanden verwijderd is in elke scripttaal in ongeveer 5 minuten te maken.

https://niels.nu

Pagina: 1