29 Stimmen

Ist BigTable langsam oder bin ich dumm?

Ich habe im Grunde das klassische Modell von vielen zu vielen. Ein Benutzer, eine Auszeichnung und eine "Many-to-many"-Tabelle, die Benutzer und Auszeichnungen einander zuordnet.

Jeder Nutzer hat etwa 400 Auszeichnungen und jede Auszeichnung wird an etwa die Hälfte der Nutzer vergeben.

Ich möchte alle Auszeichnungen des Benutzers durchgehen und ihre Punkte zusammenzählen. In SQL wäre es eine Tabellenverknüpfung zwischen den Many-to-Many und dann durch jede der Zeilen gehen. Auf einem anständigen Rechner mit einer MySQL-Instanz sollten 400 Zeilen keine große Sache sein.

In der App-Engine brauche ich etwa 10 Sekunden für die Summe. Die meiste Zeit wird im Datenspeicher von Google verbracht. Hier sind die ersten paar Zeilen von 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}

Ist mein Datenmodell falsch? Mache ich die Lookups falsch? Ist dies ein Manko, das ich mit Caching und Bulkupdating beheben muss (was sehr mühsam wäre).

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X