具有数组字段和对象化的实体

Entity with an array field and objectify

我使用 Objectify 5.0 与 GAE 数据存储交互。我有一个这样的实体 class:

@Entity
public class A {
    @Id long id;
    int[][] data = new int[365][];
}

但是当我尝试保存实体时出现以下错误:java.util.ArrayList is not a supported property type

处理具有数组字段的实体的最佳方法是什么?是否有替代 @Mapify / @Stringify 的自定义序列化或存在更好的问题解决方案?

数据存储本身不存储二维数组。这里发生的事情是 Objectify 正在将 int[][] 变成 ArrayList<ArrayList<Long>> 而原生的 API 正在拒绝它。

如果要存储 int[][],则需要弄清楚如何将该结构转换为数据存储可以处理的内容。一种选择是具有一个字段的对象数组,它本身是一个整数数组。基本上 Foo[] 其中 Foo 有一个字段,一个 int[]。这不一定是 space 高效的,并且序列化可能很昂贵,尤其是对于大型矩阵。

另一种选择是使用 @Serialize。它应该相当有效spacewise。

如果您想要最佳存储空间,请自己弄清楚如何压缩它 - 可能压缩成 byte[]。您可以选择一种算法来优化预期的稀疏程度。非常稀疏的多维数组最好存储为一系列坐标。