[Python] Concatenazione lato DB => Rebus

Daniele Varrazzo piro a develer.com
Mer 21 Mar 2012 15:39:13 CET


> 2012/3/21 Daniele Varrazzo <piro a develer.com>

>> Una relazione generica io non nego sia utile:

On Wed, 21 Mar 2012 15:15:33 +0100, Simone Federici wrote:

> Per le relazioni generiche invece dissento.

Stiamo dicendo la stessa cosa: anche io penso siano utili. Però...

> E dai l'hai detto pure tu che il mono tabella fa cagare quindi perche
> sputare su una soluzione ibrida?

...sto solo dicendo che se vuoi relazioni generiche devi accettare 
*altri* limiti, sia nel design che nelle performance, perché il design 
dei db relazionali è tipicamente pensato per sfruttare la specificità. È 
come il C: è veloce perché la struttura degli oggetti si conosce prima 
di eseguire il programma, e il compilatore, furbacchione, ne approfitta. 
Questo è troppo limitante? Allora c'è il Python, dove le strutture sono 
generiche, la cosa ci piace tanto, ma devi fare lookup anche quando 
respiri, e il linguaggio è 100 volte più lento.

Un db con relazioni generiche è come Python implementato in C: non è 
una cattiva idea di per sé, ma non puoi aspettarti che un "for" in 
Python sia veloce quanto un "for" in C.

E, al di là delle prestazioni, il tuo problema è che vuoi offrire tutte 
le feature del db (più qualcuna che non esiste e ti sei inventato sul 
momento... ;) *e* relazioni generiche. Qui hai un problema diverso: con 
il db ci puoi fare tanto, i db relazionali consentono di creare 
strutture troppo generiche... per offrire relazioni generiche. Strano ma 
vero. E buona fortuna a combatterci contro questa natura.


> comunque il mio proposito è quello di dare una features in più a 
> Django che
> adesso non ha, quindi non la posso dare dicendo:
> "non usate le generic relation cretini :-)"

Una affermazione più ragionevole sarebbe: se usate relazioni generiche 
e sperate che un join con quelle sia efficiente quanto una nativa, 
ALLORA sì che siete cretini. :)

Tra l'altro aggiungere una feature utile (pkey composte: hai tutto il 
mio appoggio) ma che finisce col non essere usabile con un'altra feature 
(generic relations: buone ma devi sapere quello che stai facendo) non 
sarebbe male comunque. Aggiungere una overgeneralizzazione che faccia 
andare django ancora più lento di quanto non sia... questo a me farebbe 
girare le scatole di più.


-- 
Daniele Varrazzo - Develer S.r.l.
http://www.develer.com


Maggiori informazioni sulla lista Python