Django e il nuovo campo Postgresql Array

1

Recentemente ho avuto la possibilità di creare una nuova app Django con la versione stabile corrente che espone alcuni tipi di dati specifici Postgresql per i modelli ( docs ) e si sono entusiasti di avere una matrice. Secondo la gente di Real Python, questo potrebbe essere un modo per introdurre un sistema di tagging (puoi leggere il post qui ).

Questa implementazione mancherebbe dell'integrità referenziale tra le righe (qualcosa che probabilmente un sistema di tagging dovrebbe imporre a livello di database perché è quello che fanno gli RDMS) ma penso che un'applicazione più intrigante sarebbe il caching di riferimenti a righe che si estendono su un paio di tabelle.

L'idea qui sarebbe qualcosa di simile (in pseudo-django):

class Customer(models.Model):
    # additional stuff
    returned_products = ArrayField(type=integer)

Dove la matrice returned_products è un modo per memorizzare riferimenti a prodotti a cui normalmente accedo con qualcosa di simile:

(Customer.objects.get(pk=123)
         .order_set
         .filter(status='closed')
         .products
         .filter(status='returned'))

Non esattamente pulito ma dal momento che è un queryset potrebbe essere memorizzato nella cache in qualche modo, ma i ritorni sono qualcosa che non si restringono realmente, crescono solo nel tempo (in linea di principio a lunghezza arbitraria, yikes!). Immagina di memorizzare i valori di quel queryset nell'array returned_products in modo che quando, ad esempio, l'utente visita la loro cronologia, essi possano vedere i loro ritorni su tutti gli ordini con un sovraccarico di qualcosa del tipo:

(Product.objects
        .filter(id__in=request.user.customer.returned_products))

... invece di dover attraversare un gruppo di tavoli.

Questa è un'applicazione sensata di questa forma di archiviazione o è più sensato sfruttare un ulteriore livello di memorizzazione nella cache?

    
posta theWanderer4865 24.09.2015 - 17:45
fonte

0 risposte

Leggi altre domande sui tag