什么是App Engine数据存储区中使用的命名空间?

时间:2010-09-11 17:32:10

标签: google-app-engine namespaces

在开发管理控制台中,当我查看我的数据时,它会显示“Select different namespace”。

什么是命名空间?我应该如何使用它们?

3 个答案:

答案 0 :(得分:13)

命名空间允许您实现多租户应用程序的数据隔离。 official documentation链接到一些示例项目,以便您了解如何使用它。

答案 1 :(得分:1)

在Google应用引擎中使用命名空间来创建多租户应用。在Multitenent应用程序中,应用程序的单个实例在服务器上运行,为多个客户端组织(租户)提供服务。通过这种方式,可以将应用程序设计为对其数据和配置(业务逻辑)进行虚拟分区,并且每个客户端组织都可以使用自定义的虚拟应用程序实例。只需为每个租户指定唯一的命名空间字符串,即可轻松地在租户之间对数据进行分区。

命名空间的其他用途:

  1. 划分用户信息
  2. 将管理数据与应用程序数据分开
  3. 为测试和生产创建单独的数据存储区实例
  4. 在单个应用引擎实例上运行多个应用
  5. 如需了解更多信息,请访问以下链接:

    http://www.javacodegeeks.com/2011/12/multitenancy-in-google-appengine-gae.html
    https://developers.google.com/appengine/docs/java/multitenancy/
    http://java.dzone.com/articles/multitenancy-google-appengine
    
    http://www.sitepoint.com/multitenancy-and-google-app-engine-gae-java/
    

答案 2 :(得分:0)

看,对于这个问题并没有那么好的评论和回答,所以试图给这个。

使用命名空间时,我们可以在给定的命名空间上实现键和值分离的最佳实践。以下是彻底提供命名空间信息的最佳示例。

from google.appengine.api import namespace_manager
from google.appengine.ext import db
from google.appengine.ext import webapp

class Counter(db.Model):
   """Model for containing a count."""
   count = db.IntegerProperty()


def update_counter(name):
   """Increment the named counter by 1."""
def _update_counter(name):
   counter = Counter.get_by_key_name(name)
   if counter is None:
       counter = Counter(key_name=name);
       counter.count = 1
   else:
       counter.count = counter.count + 1
   counter.put()
# Update counter in a transaction.
db.run_in_transaction(_update_counter, name)

class SomeRequest(webapp.RequestHandler):
 """Perform synchronous requests to update counter."""
 def get(self):
    update_counter('SomeRequest')
    # try/finally pattern to temporarily set the namespace.
    # Save the current namespace.
    namespace = namespace_manager.get_namespace()
    try:
        namespace_manager.set_namespace('-global-')
        update_counter('SomeRequest')
    finally:
        # Restore the saved namespace.
        namespace_manager.set_namespace(namespace)
    self.response.out.write('<html><body><p>Updated counters')
    self.response.out.write('</p></body></html>')