我知道如何在谷歌BigTable中表。我对此有一个疑问。谷歌BigTable支持的所有数据类型是什么。
引用Class and Field Annotations的Using JPA with App Engine部分:
要存储在数据存储区中的数据类的字段必须是默认持久的类型或声明为持久的显式类型。您可以在the DataNucleus website上找到详细说明JPA默认持久性行为的图表。要将字段显式声明为持久字段,请为其指定
@Basic
注释:import java.util.Date; import javax.persistence.Enumerated; import com.google.appengine.api.datastore.ShortBlob; // ... @Basic private ShortBlob data;
字段的类型可以是以下任何一种:
- 数据存储区支持的core types之一
- 核心数据存储类型的值的集合(例如
java.util.List<...>
)@Entity
类的实例或实例集合- 嵌入式类,存储为实体上的属性
要定义和使用Email
和PhoneNumber
作为数据类型,为它们创建实体并将它们映射为@OneToOne
或使它们成为@Embeddable
。
David的上述答案给出了Appengine原生支持的数据类型列表。但要使用GAE编写实际应用程序,您需要支持更多数据类型和模式。除了JPA,JDO和LowLevel api及其局限性和相关问题并不实用。
在尝试了所有这些之后我们选择了Objectify并且从未回头。它是专为GAE设计的非常有效的数据访问抽象层。回到您的问题,使用Objectify为您自己的数据类型添加序列化器非常容易。
更新:原始答案3年后,我可以说Objectify是我做出的最好的软件库选择之一。
Here是App Engine for Java中原生支持的数据类型列表。
Bigtable可以存储所有Object类型。它只是一个巨大的键值字典
在此处查看使用JDO在GAE中支持的数据类型列表:
http://code.google.com/appengine/docs/java/datastore/dataclasses.html
并使用Python:
http://code.google.com/appengine/docs/python/datastore/typesandpropertyclasses.html
在Java中查找受支持的低级属性类型的最终方法是使用DataTypeUtil
EG
if (!DataTypeUtil.isSupportedType(value.getClass())) {
// Convert the value to a supported type.
}