2011-01-11 76 views
2

我想检查博客文章中是否有特定外来词的出现,然后将这些词链接到声音文件以便播放。最有效的方式来存储和遍历这些数据?

我有一个带有2500个字的XML文件,我有声音文件,我想知道什么是存储和遍历此列表的最佳方式?该列表不太可能改变,并且该功能将在完整查看时在每个博客文章上运行(而不是在存档页面上显示摘录等)。

XML文件是350KB,我使用simplexml_load_file将其加载到PHP中。我认为这有点大,所以我将它转换成一个PHP文件,其中包含一个索引(按字符串)单词的数组,这将文件大小降低到大约60KB。

我是否应该担心如此多的文件大小,或者更多关于搜索数据需要多少时间?有没有更好的方法来做到这一点,或者它会是最好的数据库?任何帮助,将不胜感激!

+0

这是使用memcached缓存数据的最佳选择吗? – Sairam 2011-01-11 13:06:18

回答

3

如果您发现解析和匹配XML文件与博文发生在合理的时间内,那么就没有必要进行优化。在发现任何重大负面影响时进行优化。

最简单的方法可能是简单地缓存处理过的页面。每当博客帖子或单词列表发生更改时,都会使缓存无效,因此下次调用时会重新处理它。

0

将您的文件转换为一个PHP数组非常棒(除非您编写自己的扩展名,否则不可能比性能更好)。输入文件不仅更小,而且还处理了一个相当CPU(与您的其他操作相关)XML解析步骤。

由于数组将迫使您一次读取所有数据,但在60K时权重不成问题,因此可能会提出异议。

至于搜索数据,由于PHP数组是关联的,它们在这种情况下提供了相当不错的性能。

总的来说我说你的方法是正确的。

+1

“一个漂亮的CPU庞大的XML解析步骤”...并用一个漂亮的CPU大量PHP解析步骤代替它。或者你认为,PHP解释器知道该怎么做?实际上,除了将值存储在数据库中之外,像Expat这样的良好XML流解析器可能是下一个最佳解决方案。 – Boldewyn 2011-01-11 13:09:52

+0

@Boldewyn:确实会有PHP解析成本。我相信它会明显更快(如果没有别的,350KB和60KB解析),再加上它将适用于操作码缓存。根据经验,我仍然认为除了缓存最终结果之外,这是最好的方式。 – Jon 2011-01-11 13:17:02

+0

我很关心解析数组的时间,我基本上在做“if(!empty($ words [$ match]))”来检查数组中是否存在这个单词。 – iamdarrenhall 2011-01-11 14:30:01

0

基于存储在文件中的单词数组进行索引比在XML中进行搜索要耗时。

0

毫无疑问,最具扩展性的解决方案是使用数据库。这可以处理大量的数据而不会导致性能下降,所以如果将来有更多的数据,那么添加它会很简单。在这种情况下,您可以使用sqlite,这在安装和配置方面几乎没有什么要求,但相当快速且功能强大。

您使用PHP数组的解决方案(推测使用include/require)是一个很好的解决方案,我不会过多担心更改它。但是,您绝对正确地丢失了XML文件。这将会是劳动力密集型和缓慢的。

相关问题