假设我有域名:
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'
问题
答案 0 :(得分:4)
这通常称为multitenancy。幸运的是,由于最初询问此问题,应用引擎团队添加了一项名为namespaces的功能,该功能支持多租户,并允许您按照自己的方式对数据存储区进行分区。
您将为每个客户端创建一个命名空间,根据代码中的子域设置命名空间,然后所有数据存储,内存缓存,任务队列和其他API操作都将限制在该命名空间中。
回答您的后续问题,使用命名空间不会影响性能,并假设您始终设置正确的命名空间,它们与使用完全独立的应用程序ID一样安全。
答案 1 :(得分:3)
据我所知,没有这是不可能的。
为什么基于子域的prefix
不够用?