以下是该方案。用户(Web环境)可以使用外语导入文档。当显示文档时,应用程序突出显示用户还不知道的单词。然后,用户可以将这些单词中的一些标记为已知,将其添加到他的字典中。
所以基本上我们有一个表示文档中单词的字符串列表,以及一组表示用户已知单词(他的字典)的字符串。现在,对于List(文档)中的每个String,我们需要找出Set中是否存在该单词。听起来很简单,但是应该如何在数据库中建模呢?
已知单词集必须是持久的,允许用户在每个会话中添加单词。这组已知单词可能会增长到数千个字符串。导入的文档可以有数百个单词。
我看到两种解决方案,它们都不能很好地扩展。我创建了一个Dictionary类,其中包含每个用户的一组已知单词。
@PersistenceCapable(identityType=IdentityType.APPLICATION)
public class UserDictionary {
@PrimaryKey
@Persistent(valueStrategy=IdGeneratorStrategy.IDENTITY)
Long id;
@Persistent String userId;
@Persistent Set<String> knownWords;
}
我可以在数据库中查询导入文档中的每个单词,以检查它是否存在于knownWords Set中。由于文档可能包含数百个单词,因此该解决方案将迫使我数百次查询数据库。
检索整个UserDictionary类,可能包含数千个单词,并快速检查文档中的每个单词(如果它存在于knownWords Set中)。检查会很快,但是我必须将整个Dictionary保留在用户会话中吃掉服务器内存,并且由于app引擎需要反序列化整个内容,因此检索成本会很高 组。
我不喜欢以上任何一种......其他任何想法?
答案 0 :(得分:1)
为什么要在数据库中对此进行建模?相反,将整个文档和整个字典加载到内存中,并在那里执行。