Fondamentalmente ho il classico modello da molti a molti. Un utente, un premio e una mappatura tabella "molti a molti" tra utenti e premi.BigTable è lento o sono stupido?
Ogni utente ha un ordine di 400 premi e ogni premio viene assegnato a circa 1/2 degli utenti.
Voglio ripetere tutti i premi dell'utente e riassumere i loro punti. In SQL sarebbe un join di tabella tra i molti-a-molti e quindi camminare attraverso ciascuna delle righe. Su una macchina decente con un'istanza MySQL, 400 righe non dovrebbero essere un grosso problema.
Sul motore dell'app vedo circa 10 secondi per fare la somma. La maggior parte del tempo viene speso nel datastore di Google. Ecco le prime righe di cProfile
ncalls tottime percall cumtime percall filename:lineno(function) 462 6.291 0.014 6.868 0.015 {google3.apphosting.runtime._apphosting_runtime___python__apiproxy.Wait} 913 0.148 0.000 1.437 0.002 datastore.py:524(_FromPb) 8212 0.130 0.000 0.502 0.000 datastore_types.py:1345(FromPropertyPb) 462 0.120 0.000 0.458 0.001 {google3.net.proto._net_proto___parse__python.MergeFromString}
Il mio modello di dati è errato? Sto facendo le occhiate sbagliate? È una lacuna che devo affrontare con il caching e il bulkupdating (che sarebbe un vero rompicoglioni).
+1 LOL. Adoro il titolo di questa domanda! – Elijah
Il BigTable di Google non è praticamente una tabella hash? – balpha
Quella superiore funziona come attesa ... perché stai trascorrendo 6 secondi in un'attesa? – workmad3