Java 谷歌应用引擎多租户API

Java 谷歌应用引擎多租户API,java,api,google-app-engine,multi-tenant,Java,Api,Google App Engine,Multi Tenant,根据报告: 多租户是一种软件体系结构的名称,在该体系结构中,运行在远程服务器上的应用程序的一个实例服务于许多客户机组织(也称为租户) 但这不是每个web应用程序都是的吗?数十个、数百个、甚至数千个用户都登录到系统,访问相同的软件,但都是从他们自己的“用户帐户”上下文中访问的?或者谷歌的多租户API是一种开发通用数据抽象层的API,可以用作多个应用程序的后端 我想我不理解“谷歌多租户”应用程序的含义,因此,我不理解多租户API的用途。在此提前感谢您的澄清 区别在于你说的是谁的房客。GAE从第一天起

根据报告:

多租户是一种软件体系结构的名称,在该体系结构中,运行在远程服务器上的应用程序的一个实例服务于许多客户机组织(也称为租户)

但这不是每个web应用程序都是的吗?数十个、数百个、甚至数千个用户都登录到系统,访问相同的软件,但都是从他们自己的“用户帐户”上下文中访问的?或者谷歌的多租户API是一种开发通用数据抽象层的API,可以用作多个应用程序的后端


我想我不理解“谷歌多租户”应用程序的含义,因此,我不理解多租户API的用途。在此提前感谢您的澄清

区别在于你说的是谁的房客。GAE从第一天起就是多租户的,因为每个程序(租户)都在一个通用的GAE基础设施中运行。然而,最初,您的程序本身只管理一个数据体(当GAE首次发布时)。GAE“多租户API”使您的单个程序能够管理其(您的)租户(因此您的租户而不是GAE的租户)

为了简洁和混乱地说明它:“多租户API”允许您在单个GAE程序中管理自己的租户(用户),而GAE程序反过来作为租户(程序)托管在GAE基础架构中


当然,从理论上讲,从GAE的第一天起,您就可以一直这样做,但是管理租户之间数据的所有工作都将在您的代码中处理。“多租户API”试图消除程序员的痛苦,并使程序中的数据分段更加简单。

考虑实现多租户的标准方式:向一个或多个表中添加“租户ID”字段,然后将该ID包含在WHERE子句中。然后索引该字段

您可以在AppEngine中采用相同的方法,将索引属性添加到一些实体中以保存租户ID,小心地将该ID包含在GQL WHERE子句(或过滤器)中。这将使您在写操作上花费更多(对于该属性上的两个索引),如果该ID参与包含其他筛选器的查询,则会花费更多,因为这些查询将需要包含该ID的其他复合索引


或者您可以使用我们的多租户API,它可以在不增加索引写入成本的情况下为您提供相同的效果。您可以获得稍微简单的代码和更少的费用。

这里的多租户不是指应用程序的用户,而是指具有“独立”数据存储的应用程序的“实例”

它们不是真正独立的实例或独立的数据存储,因为这些请求可能由共享实例提供服务,并且它们肯定是在与同一数据存储进行通信。但是,通过使用API,您可以设置应用程序,以便将数据划分为不同的名称空间,而不会相互污染

如果你的应用程序上只有一个用户,那么多用户和多租户几乎是一样的。如果您有多个用户,那么通常您将在用户之间共享数据。如果是这样,您可以使用multitenancy仅在某个用户组内共享数据,并在其自己的租约中分割其余的数据

正如jtahlborn正确指出的那样,我们的每个GAE应用程序都已经是GAE基础设施上的租户。我们无法在不同的应用程序之间共享数据,因为它们彼此完全隔离


正如Dave所说,我们可以通过向所有数据中添加某种域名或分区id来实现多租户。API只是提供了一种更简单的方法。

此外,所有(几乎)其他服务都支持名称空间API。因此,通过在开始处理时设置名称空间,您进行的所有GAE服务调用都将限制在指定的名称空间/租户中。依赖此全局API比自己尝试实现更好地实施隔离。我们如何为不同租户单独计费?有没有办法做到这一点?@xtrahelp.com您是在谈论GAE账单还是您自己为租户单独账单?这可能是一个更好的单独的问题,所以-如果你创造一个,我会尝试回答这个问题。