DOMANDA Metodo Più Efficiente Per Legare Tra Loro Migliaia Di Oggetti

fabio_1

Utente Attivo
231
8
CPU
i5-6500
Scheda Madre
ASRock H170 Pro4S
HDD
Samsung 870QVO 1TB, Samsung 850EVO 250GB, HD Toshiba 2TB
RAM
Corsair DD4 2133 C13 2x4GB
GPU
Sapphire R9 380 4GB NITRO
Audio
Integrata + DAC Audioengine D1
Monitor
LG 24MB56HQ-B IPS
PSU
XFX 550 Black
Case
Corsair Spec-03
Periferiche
Casse Edifier R1800TIII
OS
Windows 10
Linguaggio python/django ma la domanda é più generica e riguarda anche altri linguaggi simili.

Ho alcune classi di oggetti da mettere in relazione tra loro e vorrei sapere quale sia il sistema più efficiente per farlo.

Per spiegarmi meglio mettiamo che la prima classe rappresenti le marche delle automobili. La seconda invece i concessionari. La terza gli antifurti e mi fermo qui ma in realtà sono molte classi. Ognuna di esse ha molti valori (centinaia, migliaia) e il legame può essere di vario tipo (per esempio il concessionario può essere rivenditore aturizzato o no, averle solo nuove o anche usate, etc).

Quello che vorrei è per ogni oggetto (quindi per ogni marca di auto, ad esempio) definire in che concessionari è venduta (autorizzato o no, nuove o usate, etc), che tipo di antifurto ha, etc etc.

Il metodo più diretto sarebbe usare un ManyToManyField con campo through per i dati aggiuntivi, (ovvero creare un'altra tabella marca-concessionario e un'altra marca-antifurto etc) e questo è quanto fatto finora. Essendo però centinaia di oggetti a classe verrebbero fuori 100x100=10000 combinazioni a tabella (e anche molti più) cosa che mi pone due problemi:
1) pur usando (ovviamente) valori di default i dati da inserire sono notevoli (migliaia, decine di migliaia, spero non di più)
2) tutti questi dati possono dare problemi di hardware/rete o simili? cioé causa la mia inesperienza non mi rendo conto a livello di HD o di tempo per processare una query o di larghezza di banda per trasmetterli se possono dare noie. Penso di no perché magari ciò che occupa 'posto' sono altre cose (grafica) però poi vedo che ad esempio dwarf fortress lagga, quindi il dubbio mi viene...

Quindi é questa l'impostazione giusta o magari ce ne sono altre più efficienti?
 

TechArch

Utente Attivo
592
121
Ma a te interessano le relazioni tra gli oggetti o un diagramma di un database? Come un database come quello che descrivi non è niente di particolarmente esoso a livello di capacità, fossero anche 100 tabelle con qualche migliaio di righe ognuna è facilmente gestibile da server anche "basilari".
 

fabio_1

Utente Attivo
231
8
CPU
i5-6500
Scheda Madre
ASRock H170 Pro4S
HDD
Samsung 870QVO 1TB, Samsung 850EVO 250GB, HD Toshiba 2TB
RAM
Corsair DD4 2133 C13 2x4GB
GPU
Sapphire R9 380 4GB NITRO
Audio
Integrata + DAC Audioengine D1
Monitor
LG 24MB56HQ-B IPS
PSU
XFX 550 Black
Case
Corsair Spec-03
Periferiche
Casse Edifier R1800TIII
OS
Windows 10
Ma a te interessano le relazioni tra gli oggetti o un diagramma di un database? Come un database come quello che descrivi non è niente di particolarmente esoso a livello di capacità, fossero anche 100 tabelle con qualche migliaio di righe ognuna è facilmente gestibile da server anche "basilari".
Sinceramente non ho capito la domanda.
Le relazioni tra oggetti mi interessano di sicuro, é ciò che voglio creare, sto chiedendo come mi merita farlo a livello di modelli (django Models). Se poi esistono altri 'trucchetti' che esulano dai modelli sono tutto orecchi. Il database è conseguente a tali modelli e il diagramma del database può aiutarmi a trovare il modo migliore per strutturarli (cioé che field usare e dove) quindi alla fine mi sembra la stessa cosa ma certo NON mi interessa una sua rappresentazione grafica perché mi sembra non necessaria, infatti non penso il problema sia nella complessità e nel numero di tabelle ma nella dimensioni delle stesse (nell'esempio sopra sono 4 tabelle più altre 3 di relazioni mutue). Ammesso che per diagramma del database intendiamo la stessa cosa :D
Alla fine immagino non ci siano troppe alternative perché se voglio che ci siano in qualche modo devo dargliele però non si sa mai, prima di mettermi a scrivere 100000 righe di dati per il database (a 3 secondi a riga sono più di ottanta ore di lavoro) soltanto per questo singolo aspetto chiedo pareri :)
Spero il problema ora sia più chiaro
 

TechArch

Utente Attivo
592
121
Non conosco i django models, posso fare gli oggetti in java, ma alla domanda specifica per django non posso aiutarti.
 

Nico911

Utente Attivo
192
13
Anche io di django model non so di cosa si parla.
Però in generale se ho ben capito il tuo problema è che ti devi scrivere una grande quantità di dati eterogenei e mantenerli.
Io, se pensi possano essere ottimizzati gli oggetti che conterranno i valori(e se ce n'è davvero bisogno) procederei come ha detto Techarch, farei un analisi di progetto di un database, quindi ti metti in tabella tutte le 'tag' che avrai, le raggruppi in tabelle, fai un analisi delle ridondanze, un controllo degli accessi per ottimizzare le singole tabelle a quel punto le implementi negli oggetti del programma(ogni tabella diventerà un oggetto le cui variabili saranno i campi della tabella). Con questo metodo sei sicuro che i dati non possano essere mantenuti meglio di così e gli accessi hanno massima efficienza.

Per il caricamento dei valori, in un modo o nell'altro te li dovrai scrivere in un file xP non so però questi valori dove li prendi, io farei in tre modi,o mi scrivo tutti i valori su un file vuoto, me li organizzo e poi scrivo del codice per prelevarli dal file e caricarli in maniera automatica negli oggetti, o mi scrivo un file apparte con una funzione dove carico tutti i valori cablati a codice(in pratica come prima ma stavolta i valori li assegno direttamente, il file separato è per evitare troppa roba inutile nei file principali su cui lavoro poi il file lo includo nel programma)
Oppure come ultima opzione mi creo una piccola funzione per l'inserimento manuale, mi richiede il tipo di oggetto e mi fa inserire i vari campi, poi li organizza e me li salva in un file esterno(al posto di scrivermi il file con tutti i dati me lo faccio creare dal programma, più che altro perché quando ci sono molti dati tendo a fare confusione e a fare qualche errore nello scriverli in sequenza dovendo preoccuparmi di mantenere una certa formattazione, dopo un paio d'ore comincio a vedere le parole che si muovono xD in questo modo mi faccio assistere, è più lento ma meno faticoso) da cui poi successivamente se li preleverà in automatico.
 
  • Mi piace
Reazioni: fabio_1

fabio_1

Utente Attivo
231
8
CPU
i5-6500
Scheda Madre
ASRock H170 Pro4S
HDD
Samsung 870QVO 1TB, Samsung 850EVO 250GB, HD Toshiba 2TB
RAM
Corsair DD4 2133 C13 2x4GB
GPU
Sapphire R9 380 4GB NITRO
Audio
Integrata + DAC Audioengine D1
Monitor
LG 24MB56HQ-B IPS
PSU
XFX 550 Black
Case
Corsair Spec-03
Periferiche
Casse Edifier R1800TIII
OS
Windows 10
Io, se pensi possano essere ottimizzati gli oggetti che conterranno i valori(e se ce n'è davvero bisogno) procederei come ha detto Techarch, farei un analisi di progetto di un database, quindi ti metti in tabella tutte le 'tag' che avrai, le raggruppi in tabelle, fai un analisi delle ridondanze, un controllo degli accessi per ottimizzare le singole tabelle a quel punto le implementi negli oggetti del programma(ogni tabella diventerà un oggetto le cui variabili saranno i campi della tabella). Con questo metodo sei sicuro che i dati non possano essere mantenuti meglio di così e gli accessi hanno massima efficienza.
sinceramente non saprei come fare. Non sono un programmatore, mi diletto solamente. Pazienza :D
Quanto all'inserimento dati ho un file con uno script che mi crea il database, così posso cancellarlo e ricrearlo da zero ogni qual volta ne ho bisogno (cioé spesso in progettazione). In questo file i dati sono forniti con la loro formattazione e delle funzioni me le copiano nel db. I dati non me li da nessuno, li invento io secondo i miei scopi.

Come un database come quello che descrivi non è niente di particolarmente esoso a livello di capacità, fossero anche 100 tabelle con qualche migliaio di righe ognuna è facilmente gestibile da server anche "basilari".
riguardo ciò ci deve essere qualcosa che non funziona perché una tabella 40x40 ci mette circa 20 secondi a crearla. Per ogni cella deve prendere diversi valori ma insomma la query principale è da 1600 elementi. Forse è il server virtuale di django ad essere lento.
 

Entra

oppure Accedi utilizzando
Discord Ufficiale Entra ora!