关于这个主题有一些线索,但我认为我的用例有些不同。
我想做的事:
- 我的 GAE/J 应用程序的全文搜索组件
- 索引大小较小:25-50MB左右
- 我不需要实时更新索引,定期重新索引就可以了
- 这是为了自动完成等,所以它需要非常快(我的印象是在数据存储中实现倒排索引会引入相当大的延迟)
到目前为止我的策略(只是计划,还没有尝试实施任何事情):
- 将 Lucene 与 RAMDirectory 结合使用
- 定期 cron 作业创建索引,将其序列化到数据存储,存储更新 ID(或时间戳)
- 搜索 servlet 在启动时加载索引并创建 RAMDirectory
- 对于每个请求,Servlet 都会检查当前更新 ID 并根据需要重新加载索引
我模糊的主要问题是如何在实例之间同步内存中的数据 - 这会起作用,还是我遗漏了一些东西?
另外,在开始出现内存使用问题之前我可以将其推到什么程度?我找不到任何有关 GAE 的 RAM 配额的信息。 (这个索引很小,但我可以想到更多我想添加的东西)
当然,对于更好的方法有什么想法吗?
如果您可以定期重建,并且您的索引很小,那么您当前的方法听起来基本上没问题。不过,为什么不离线构建索引并使用应用程序上传,而不是在线构建索引并将其序列化到数据存储区呢?然后,您可以直接从磁盘存储实例化它,并推送更新,您可以部署应用程序的新版本。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)