是否可以为Google App Engine的每个子域使用不同的数据存储区?

时间:2010-03-01 13:39:32

标签: java google-app-engine

假设我有域名:

mywonderfulapp.com

我希望每个客户端都有一个子域名。例如:

clientA.mywonderfulapp.com

我希望客户端A转到网址clientA.mywonderfulapp.com并私下检索其数据,客户端B可以转到clientB.mywonderfulapp.com检索自己的数据。

应用程序代码应该相同,但应使用不同的数据存储区。

Google App Engine Java可以实现这一目标吗?

提前致谢!

感谢您收到的反馈意见。似乎Google App Engine Aplication无法为每个子域使用多个数据存储区。

解决方案

@jldupont和@Steve Jessop: 让我试着捕捉你的意思。如果我不理解你,请纠正我。

每个实体都有一个名为prefix的字段,用于存储它所属的子域字符串。例如,可以使用在web.xml中配置的过滤器来捕获此字符串:

<filter>
    <filter-name>SubdomainFilter</filter-name>
        <filter-class>filters.SubdomainFilter</filter-class>        
</filter>
<filter-mapping>
    <filter-name>SubdomainFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

然后使用如下的查询:

select from guestbook.Greeting where subdomain == 'clientA'

问题

  • 在如此庞大的“数据库”中执行查询会不会很慢?
  • 将每个用户和帐户数据混合在同一个数据存储中是否没有安全隐患?

2 个答案:

答案 0 :(得分:4)

这通常称为multitenancy。幸运的是,由于最初询问此问题,应用引擎团队添加了一项名为namespaces的功能,该功能支持多租户,并允许您按照自己的方式对数据存储区进行分区。

您将为每个客户端创建一个命名空间,根据代码中的子域设置命名空间,然后所有数据存储,内存缓存,任务队列和其他API操作都将限制在该命名空间中。

回答您的后续问题,使用命名空间不会影响性能,并假设您始终设置正确的命名空间,它们与使用完全独立的应用程序ID一样安全。

答案 1 :(得分:3)

据我所知,没有这是不可能的。

为什么基于子域的prefix不够用?