2009-04-08 8 views
4

Lassen Sie uns sagen, dass ich eine Buchung Datenbank, bestehend aus Benutzer:Welche Änderungen brauche ich, damit meine Tabellen in BigTable von AppEngine funktionieren?

user_id 
fname 
lname 

und ihre Tickets

ticket_id 
user_id 
flight_no 

und die damit verbundenen Flüge

flight_no 
airline 
departure_time 
arrival_time 

Was müsste ich ändern, um diese Google AppEngine zu verschieben?

Ich verstehe AppEngine erlaubt keine Joins.

Bedeutet das, dass mein Tisch zu einem großen Haufen von Feldern werden sollte, die alle zusammengelegt sind?

Buchungen:

user_id 
fname 
lname 
ticket_id 
flight_no 
airline 
departure_time 
arrival_time 

Mit anderen Worten, alle meine Fragen jetzt gegen den gleichen Tisch laufen?

Antwort

7

Welche Änderungen Sie benötigen, hängt hauptsächlich davon ab, welche Abfragen Sie ausführen müssen und nicht, welche Daten Sie haben. Höchstwahrscheinlich müssen Sie nur ein paar Dinge hinzufügen.

Erstellen Sie eine Liste von Abfragen, und sehen Sie sich dann Restrictions on Queries an. Nachdem Sie die problematischen gefunden haben, versuchen Sie, sie unter Berücksichtigung der Einschränkungen von BigTable neu zu schreiben.

Zum Beispiel, wenn Sie häufig die Anzahl der Tickets für eine Liste der Flüge finden müssen, werden Sie nicht nur in der Lage sein zu tun:

 
SELECT 
    flight_no, COUNT(*) 
FROM 
    flights 
JOIN 
    tickets ON tickets.flight_no = flights.flight_no 
GROUP BY 
    flight_no 

So benötigen Sie einen Zähler von hinzufügen Tickets zu flights und erhöhen/verringern das beim Erstellen/Löschen von Tickets.

Die gute Seite ist, dass BigTable Sie zu einem sehr skalierbaren Datenbankentwurf zwingt. Schlechte Seite ist, dass es viel Zeit verschwendet, wenn Sie nicht wirklich ein skalierbares Design benötigen.

1

Sie können echte SQL relationale Datenbanken von Google appengine Apps über einen Webservice verwenden.

Ein solcher Webservice ist Rdbhost, unter http://www.rdbhost.com.

Es beinhaltet seine Kompromisse, insbesondere Geschwindigkeit, in dem jeder Seitenaufruf eine andere HTTP-Seitenanforderung an den Datenbankserver erfordert, aber es ermöglicht Ihnen, die SQL-Design-Kenntnisse zu verwenden, die Sie bereits haben.

Verwandte Themen