我有一个类,它可以包含列表中的许多小元素。看起来像:
public class Farm {
private ArrayList<Horse> mHorses;
}
只是想知道如果mHorses阵列变得疯狂像15,000个元素会发生什么。我假设尝试从数据存储区写入和读取此内容会很疯狂,因为我会在序列化过程中被杀死。
重要的是我可以在没有分页的情况下一次性获取整个数组,并且每个Horse元素可能只有两个字符串属性,所以它们非常轻量级:
public class Horse {
private String mId;
private String mName;
}
我根本不需要这些马索引。将mHorse数组存储为原始文本字段并迫使我的客户端进行反序列化是否合理?类似的东西:
public class Farm {
private Text mHorsesSerialized;
}
然后,只要客户端收到Farm实例,它就必须获取原始的马匹字符串,并将其拆分以重新实例化列表,如:
// GWT client perhaps
Farm farm = rpcCall.getMyFarm();
String horsesSerialized = farm.getHorses();
String[] horseBlocks = horsesSerialized.split(",");
for (int i = 0; i < horseBlocks.length; i++) {
// .. continue deserializing the individual objects ...
}
...耶
所以希望从数据存储中快速读取Farm实例,并且客户端支付序列化惩罚,
由于
答案 0 :(得分:0)
一般来说,使用列表不是一个好主意,除非你的列表很短(这里不是这种情况!)或者需要编入索引(这里也不是这种情况)。您还需要记住,序列化实体的最大大小为1MB - 因此,您使用的任何序列化机制都需要将15,000个列表条目放入1MB。
如果它们合适,那么是的,使用您自己的序列化到Blob字段(不是文本字段,除非您使用像JSON这样的文本格式)是您的最佳选择。
答案 1 :(得分:0)
您可能需要考虑的另一个考虑因素是您将从GWT提出一个大请求,并且可能使用该请求的响应来构建某种15,000匹马的UI。
这不会很快,虽然它正在建立你的马匹列表,但其余的UI将几乎无法使用。
而且,UI一旦显示就几乎不可能导航。这个用户界面是什么?列出马,以便可以选择一个?您是否希望筛选15,000个条目以找到他们喜欢的条目?
分页不仅是缓解服务器压力的一种方式,还可以缓解浏览器和用户的压力。
您可能希望以某种方式允许用户搜索或过滤您的列表,否则他们几乎不可能使用。为此,您可能希望重新构建数据模型。