【发布时间】:2011-05-23 19:46:15
【问题描述】:
关于这个主题有几个话题,但我认为我的用例有些不同。
我想做什么:
- 我的 GAE/J 应用程序的全文搜索组件
- 索引大小小:25-50MB左右
- 我不需要实时更新索引,定期重新索引就可以了
- 这用于自动完成等,因此需要非常快(我的印象是在 Datastore 中实现倒排索引会带来相当大的延迟)
到目前为止我的策略(只是计划,还没有尝试实施任何东西):
- 将 Lucene 与 RAMDirectory 结合使用
- 定期 cron 作业创建索引,将其序列化到数据存储区,存储更新 ID(或时间戳)
- 搜索 servlet 在启动时加载索引并创建 RAMDirectory
- 对于每个请求,servlet 都会检查当前的更新 id 并根据需要重新加载索引
我主要不清楚的是如何在实例之间同步内存中的数据——这会起作用吗,还是我遗漏了什么?
另外,在我开始出现内存使用问题之前,我可以将它推多远?我在 GAE 的 RAM 配额上找不到任何内容。 (这个索引很小,但我能想到更多我想补充的东西)
当然,还有关于更好方法的想法吗?
【问题讨论】:
-
GAE 实例之间的内存是分开的,因此它们之间不会共享直接的 RAM 目录。您必须在启动时为每个实例初始化它。考虑到新的备用服务器和预热请求,这可能还不错。
-
嗯,是的,这就是我上面概述的一部分......
标签: java google-app-engine lucene full-text-search