我的表需要对AppEngine的BigTable进行哪些更改?

时间:2009-04-08 18:08:44

标签: sql database google-app-engine bigtable table-structure

假设我有一个由用户组成的预订数据库:

user_id
fname
lname

及其门票

ticket_id
user_id
flight_no

以及相关的航班

flight_no
airline
departure_time
arrival_time

移动此Google AppEngine需要更改哪些内容?

我理解AppEngine 不允许加入

这是否意味着我的桌子应该成为一块混乱的田地?

预订

user_id
fname
lname
ticket_id
flight_no
airline
departure_time
arrival_time

换句话说,我的所有查询现在针对同一个表运行?

2 个答案:

答案 0 :(得分:7)

您需要进行哪些更改主要取决于您需要运行的查询,而不是您拥有的数据。很可能你只需添加几件东西。

制作一个查询列表,然后查看Restrictions on Queries。找到问题后,尝试用BigTable的约束重写它们。

例如,如果您经常需要查找航班列表的门票数量,您将无法做到:

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

因此,您需要在flights添加票证计数器,并在创建/删除票证时递增/递减。

这方面的好处是BigTable迫使您拥有一个可扩展的数据库设计。不好的一面是,当你真的不需要可扩展设计时,它浪费了你很多时间。

答案 1 :(得分:1)

您可以通过网络服务使用Google appengine应用中的正版SQL关系数据库。

一个这样的网络服务是位于http://www.rdbhost.com的Rdbhost。

它涉及到它的妥协,特别是速度,因为每个页面视图都需要向数据库服务器发送另一个后端http页面请求,但它允许您使用已有的SQL设计知识。