Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 谷歌应用引擎是否可以为每个子域使用不同的数据存储?_Java_Google App Engine - Fatal编程技术网

Java 谷歌应用引擎是否可以为每个子域使用不同的数据存储?

Java 谷歌应用引擎是否可以为每个子域使用不同的数据存储?,java,google-app-engine,Java,Google App Engine,假设我拥有这个域名: mywonderfulapp.com 我想每个客户端有一个子域。例如: clientA.mywonderfulapp.com 我希望客户端A转到URLclientA.mywonderfulapp.com并私下检索其数据,客户端B可以转到clientB.mywonderfulapp.com检索其自己的数据 应用程序代码应相同,但应使用不同的数据存储 谷歌应用程序引擎Java有可能做到这一点吗 提前谢谢 感谢收到的反馈。谷歌应用程序引擎应用程序似乎不能在每个子域中使用多个数

假设我拥有这个域名:

mywonderfulapp.com
我想每个客户端有一个子域。例如:

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

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

谷歌应用程序引擎Java有可能做到这一点吗

提前谢谢

感谢收到的反馈。谷歌应用程序引擎应用程序似乎不能在每个子域中使用多个数据存储

解决 @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>
问题

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

    • 据我所知,这是不可能的

      为什么基于子域的
      前缀不足够?

      这通常被称为。幸运的是,由于最初提出了这个问题,appengine团队添加了一个名为的功能,该功能支持多租户,并允许您按照自己想要的方式对数据存储进行分区

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


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

      我不确定您对“不同数据存储”的定义是否存在。据我所知,只有一个数据存储:Google数据存储中的每个实体(任何类型,属于任何用户)都位于一个BigTable中。您可以在所有类型中添加一个字段,说明它们属于哪个子域,并在查询中包含一个相等性检查。从请求头中获取子域(并针对当前用户验证它)。“在如此庞大的“数据库”中执行查询不会太慢。”。不。这正是BigTable的设计初衷。当您指定子域时,它将直接跳转到(部分)索引,其中包含该子域的实体存储在一起,并开始读取。“它没有安全隐患吗”-也许,如果您在查询中指定了错误的子域,那么您将泄漏数据。但这并不比使用谷歌账户和通过用户ID查找数据更糟糕,这是存在的所有其他应用程序引擎应用程序所做的。哦,如果我不清楚的话,当我说每个实体都属于任何用户时,我指的是谷歌应用程序引擎的任何用户。也就是说,你的应用程序的实体和我的应用程序的实体位于同一个大表中,可能有一些“隐藏字段”,数据存储使用这些字段来确保只有我的应用程序可以看到我的实体,只有你的应用程序可以看到你的实体。如果谷歌对它的表现感到满意,那么我也一样:-)非常感谢你的评论。请帮助我,基于子域的lota前缀肯定会起作用。但是,现在名称空间已经可用(见下文),您将希望使用它们。它们更简单、更健壮,对于某些查询不需要额外的自定义索引,并且在不同的API之间受支持。但我不确定如何创建子域,以便ClientA的用户可以通过“ClientA.mywonderfulapp.com”访问应用程序。提前谢谢。。
      select from guestbook.Greeting where subdomain == 'clientA'