2014-04-05 28 views
1

我有一个1兆字节大小的Json文件。每个Json Object是一个500-600字的文本。有五千万个Json对象。在循环内执行文本数据

现在这是我必须做的这个Json文件。我需要在网页中插入200-300个字和一个百分比值。一旦完成,Web应用程序将读取整个Json文件,检查插入的单词是否在任何Json对象中可用,以及可用性的百分比是多少。如果可用性百分比高于插入的百分比,那么此应用程序还会跟踪Json对象中可用的单词与输入列表以及Json对象与输入列表相比缺少的输入列表和单词。

我觉得阅读1TB太大了,所以我做了一个窍门。我将每个Json Object中的文本转换为散列(此散列表示任何带有3个字符的单词)并将其保存到文本文件中。现在这个文本文件的每一行都有散列表示该特定Json对象中的文本。这个文本文件是120GB大。 5000万线。

我的问题是阅读和执行上述工作仍然比较困难。需要数小时才能完成!为什么?由于该应用程序读取该散列中的“每一行”,因此搜索哪些单词可用,哪些单词不可用。所以这个“检查”算法运行5000万次!

有没有什么办法可以减少这个操作的时间,并在几秒钟内完成?我知道化学和遗传医学应用在几秒钟内完成同样的事情!无论是大数据解决方案,数据挖掘还是简单修复,我都乐于接受所有解决方案。

PS:我想到了一个基于Hadoop的解决方案,但购买了很多电脑。这是一个巨大的成本,即使在亚马逊运行是双重成本!

回答

0

当然,你必须朝着像lucene这样的逆向索引的方向前进。反向索引的大小受不同文档数量影响。在查找单词时,您直接获取包含该单词的文档的ID,从而获得该对象的编号以及百分比。迄今为止很简单。我想一个10-30机器左右的小群应该没问题。也许弹性搜索在这里是一个很好的喜悦。

+0

我没有钱有10台机器,目前的主要问题。 –

+0

我会说,一个颠倒的索引,你比现在好得多,不管有多少台机器。一般的台式机应该可以达到分钟。经过几个小时的建设索引当然。更多机器将改善索引建立以及访问时间。 –