【问题标题】:What datatypes are supported by Google App Engine's datastore?Google App Engine 数据存储区支持哪些数据类型?
【发布时间】:2010-04-26 05:03:43
【问题描述】:

我知道如何在 google BigTable 中建表。对此我有一个疑问。google BigTable 支持的所有数据类型是什么。

【问题讨论】:

  • 如果您设置一个更具描述性的标题,将来可能会有所帮助,以更清晰的方式总结您的问题。

标签: java google-app-engine jpa google-cloud-datastore


【解决方案1】:

引用Using JPA with App Engine 中的Class and Field Annotations 部分:

数据类的字段 存储在数据存储中必须要么 是一种被持久化的类型 默认或显式声明为 执着的。你可以找到一张图表 详述 JPA 默认持久性 the DataNucleus website 上的行为。 将字段显式声明为 坚持,你给它一个@Basic 注释:

import java.util.Date;
import javax.persistence.Enumerated;

import com.google.appengine.api.datastore.ShortBlob;

// ...
    @Basic
    private ShortBlob data;

字段的类型可以是任何 以下:

  • 数据存储支持的core types 之一
  • a 值的集合(例如 java.util.List<...>) 核心数据存储类型
  • @Entity 类的一个实例或实例集合
  • 一个嵌入式类,存储为实体上的属性

要定义和使用EmailPhoneNumber 作为数据类型,为它们创建实体并将它们映射为@OneToOne 或将它们设为@Embeddable

【讨论】:

  • 如何在大表中定义和使用email和电话号码数据类型
  • 你知道Collection的size()是否有限制吗?
【解决方案2】:

上面大卫的回答给出了 Appengine 原生支持的数据类型列表。但是要使用 GAE 编写现实生活中的应用程序,您需要支持更多的数据类型和模式。除了 JPA,JDO 和 LowLevel api 及其局限性和相关问题并不实用。

在尝试了所有这些之后,我们选择了Objectify,并且再也没有回头。它是专为 GAE 设计的非常高效的数据访问抽象层。回到您的问题,使用 Objectify 为您自己的数据类型添加序列化程序非常容易。

更新: 在最初的答案 3 年后,我可以说 Objectify 是我做出的最好的软件库选择之一。

【讨论】:

    【解决方案3】:

    【讨论】:

      【解决方案4】:

      Here 是 App Engine for Java 原生支持的数据类型列表。

      【讨论】:

        【解决方案5】:

        Bigtable 可以存储所有的 Object 类型。它只是一个巨大的键值字典

        【讨论】:

        • 我尝试存储一个 GregorianCalendar 并得到一个不受支持的操作异常。
        • 问题很混乱。 AppEngine 可以使用 BigTable 作为实现层,但它不会将其暴露给用户。
        【解决方案6】:
        【解决方案7】:

        在 Java 中查找受支持的低级属性类型的最终方法是使用 DataTypeUtil

        例如

        if (!DataTypeUtil.isSupportedType(value.getClass())) {
          // Convert the value to a supported type.
        }
        

        【讨论】:

          猜你喜欢
          • 2012-02-27
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-10-30
          • 2011-02-16
          • 2013-12-03
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多