我正在尝试实现 facebook ads api 的一部分,即自动完成功能 ads.getAutoCompleteData
基本上,Facebook 提供了这个每周更新的 39MB 文件,其中包含定向广告数据,包括大学、大学专业、工作场所、地点、国家、地区和城市。
我们的应用程序需要访问所有这些对象并使用此文件的数据提供自动完成功能。
我正在考虑解决这个问题的首选方法。我正在考虑以下选项之一:
- 使用 Trie ( Patricia-trie ) 将其加载到内存中,当然缺点是会占用服务器太多内存。
- 使用专用搜索平台,例如Solr在不同的机器上,缺点可能是过度设计(尽管文件大小将来可能会大幅增加)。
- (在这里填写酷、简单和光速选项)?
那么,你觉得怎么样?
最佳答案
我会坚持使用面向服务的架构(特别是如果产品应该处理大量数据)并使用 Solr。话虽这么说,如果要成为单例,39 MB 的内存占用并不算多。有了索引,这一切将会得到什么? 400MB?这当然取决于您的产品的用途以及您希望在哪种硬件上运行它。
我会使用 Solr 或编写自己的服务,将文件读入快速数据库,如 MySQL 的 MyISAM 表(甚至内存表),并使用 mysql's text search feature提供结果。除非我尝试使用 Solr 作为服务。
编写自己的服务的好处是我知道发生了什么,缺点是它不会像 Solr 那样强大。不过,我怀疑编写自己的服务将花费更少的时间来实现。
考虑编写您自己的服务,以异步方式提供请求(如果您的产品是网站,则使用 ajax)。 Solr 或 Lucene 的问题在于,如果您遇到困难,则没有太多帮助。
只是我的 2 美分。
关于java - 将 facebook 的大文本文件加载到内存 (39MB) 以进行自动补全,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7330882/