Java 加载facebook';s大文本文件到内存(39MB)用于自动完成

Java 加载facebook';s大文本文件到内存(39MB)用于自动完成,java,facebook,autocomplete,full-text-search,Java,Facebook,Autocomplete,Full Text Search,我正在尝试实现facebook广告api的一部分,即自动完成功能 基本上,Facebook提供了这个39MB的文件,每周更新一次,其中包含目标广告数据,包括大学、大学专业、工作场所、地区、国家、地区和城市 我们的应用程序需要访问所有这些对象,并使用此文件的数据提供自动完成 我正在考虑解决这个问题的首选方法。我在考虑以下选项之一: 使用Trie()将其加载到内存中,缺点当然是会占用服务器上太多的内存 使用专用搜索平台(例如在不同的机器上)的缺点可能是过于工程化(尽管将来文件大小可能会大幅增加) (

我正在尝试实现facebook广告api的一部分,即自动完成功能

基本上,Facebook提供了这个39MB的文件,每周更新一次,其中包含目标广告数据,包括大学、大学专业、工作场所、地区、国家、地区和城市

我们的应用程序需要访问所有这些对象,并使用此文件的数据提供自动完成

我正在考虑解决这个问题的首选方法。我在考虑以下选项之一:

  • 使用Trie()将其加载到内存中,缺点当然是会占用服务器上太多的内存
  • 使用专用搜索平台(例如在不同的机器上)的缺点可能是过于工程化(尽管将来文件大小可能会大幅增加)
  • (此处填充凉爽、简单和光速选项)

  • 那么,您认为呢?

    我会坚持使用面向服务的体系结构(特别是如果产品应该处理大量的数据),并使用Solr。也就是说,如果39MB是单例的话,它在内存中并不是很多。有了索引,所有这些都会变成什么?400MB?当然,这取决于您的产品的功能以及您希望在哪种硬件上运行它

    我会使用Solr或编写您自己的服务,将文件读入一个类似MySQL的MyISAM表(甚至是内存表)的快速数据库,并使用它提供结果。除非我尝试使用Solr作为服务

    编写我自己的服务的好处是我知道正在发生什么,缺点是它不会像Solr那样强大。然而,我怀疑编写自己的服务将花费更少的时间来实现

    考虑编写自己的服务,以异步方式提供请求(如果您的产品是一个网站,则使用ajax)。Solr或Lucene的问题是,如果你陷入困境,没有多少帮助


    只要我的2美分。

    Api文档声明将于2011年7月6日从ads Api中删除ads.getAutoCompletedData调用。。它已经被删除了,为什么要使用这个方法呢?进一步说,它声明
    ,但是,正如前面宣布的,这个数据现在在gzip自动完成文件中。自动完成文件应作为数据文件合并到应用程序中,并每周从下面的位置刷新。
    是的,但方法调用已从API中删除。正确,这正是我需要将此功能作为数据文件合并到应用程序中而不是此API调用的原因。我需要这些数据来与其他API调用交互。@GalBracha您知道这个zip文件是否仍然在任何地方正式提供吗?或者我需要执行大量查询来构建我关心的代表性数据集吗?