大型Wiki设置 - 需要建议,服务器缓存/索引随着时间的推移而减慢

时间:2015-02-02 09:13:39

标签: php dokuwiki

首先,我想为长篇文章道歉,但请耐心等待,我相信所有这些都是必要的......

我在我的网站上使用DokuWiki(V:2014-09-29) - http://nofusscomputing.com/wiki/,主要用于记录我自己的网络(已关闭),或者协助人们提供我提供的任何服务或功能(只读) )。所有wiki都生成自己的站点地图,该站点地图由我的站点站点地图索引引用。现在这些wiki中的一些将超过50,000页,据我所知,DokuWiki不符合这些大型wiki的站点地图协议,在这种情况下,我将在稍后跨越该桥。我使用搜索索引管理器扩展来对此站点进行索引和缓存,以加快加载时间。

我的设置包括主wiki a Farm和子wiki作为动物的信息数据库,即http://nofusscomputing.com/database/application/home。此设置使我能够在需要时打开/关闭并释放我的信息数据库的每个组件。当前大小约为40页主维基和上面的动物65.使用维基而不是创建我自己的网站页面的主要原因很简单....降低成本和DokuWiki简单,发达,基本上非常适合我的需求,我希望避免一个锤击MySQL服务器的网站,除非我真的需要。

背景 在业余时间,我编写的Windows软件最终将对任何PC用户有所帮助。该软件的一部分收集其安装的机器的系统库存;这些数据反过来存储在MySQL数据库中,然后由我自己的软件解析,以动态创建维基页面。目前,我从数据库获取数据并以编程方式创建维基页面时没有任何问题,因此可以创建可呈现且有希望的有用信息。

问题 这个新的wiki动物将提供文件信息。初始起始大小约为200,000页,我预计它会增长到数百万页。

周末我开始将数据迁移到新的信息数据库,我编写了从MySQL中提取数据以创建页面所需的脚本(初始页面创建只有5000页)这是一个足够简单的任务...但是......索引/缓存有点慢。

好吧......很快就把它缩小到具有非常小的硬件规格的网络服务器(QNAP TS-110 ......不要笑得太大声它对我有好处)所以我拿出了HP DC7900 SFF( Intel core2 Duo E8400 3.00Ghz,4GB RAM,1TB HDD(NON-Raid)和WIN7 w / WAMP2)和我的Intel裸机服务器(Intel XEON旧版可能2.8Ghz(四核),8GB RAM,RAID 1 WIN SVR 2003+ WAMP2)经过数小时的测试后,英特尔服务器赢了,但我仍然对HP DC7900的性能感到满意。随着时间的推移,所有机器共享相同的索引/缓存共同降级,缓存/索引时间减少到一定程度,如果我要索引超过5000页,我的wiki将处于索引/缓存新wiki页面的持续状态,我当然错过了一些东西.......

初始命名空间设置基于文件名,该文件名是有问题文件的SHA256哈希值,哈希被分解为每个子文件夹2个字符,结尾约19-20个文件夹深,这是不可能的顺便说一下.. ...扫描索引的文件夹太多而且速度很慢,但是肯定不是每个文件夹不会超过256个对象。最后,只是为了测试我决定将散列的前两个十六进制数字作为子文件夹,然后将文件放在里面。仍然不知道我将如何设置文件夹结构除了试图找到一种方法来保持它不高于每个文件夹大约16,000-17,000个对象,因为这是我开始注意到机器开始减速堆。

结果 通过计算Web服务器日志条目来索引/缓存5000页的时间 Qnap TS110 8小时后我停止索引,开始每隔2-3秒索引1页左右。 HP DC7900前10分钟约为1.381Pages /秒。 5000页需要4630秒或1.0799页/秒,页面加载时间几乎是即时的。 英特尔服务器只是稍微快一点,大约在同一时间完成。前10分钟约为3.121页/秒。 5000Pages需要2015Secs或2.4813Pages /秒,页面加载时间几乎是即时。

问题 两种服务器随着时间的推移而降级有没有办法解决这个问题?或者有没有人知道如何改善我想要实现的目标?

1 个答案:

答案 0 :(得分:1)

我不确定这个问题是否适合StackOverflow。我想在DokuWiki论坛或邮件列表中可能会更好。

对此有一些想法:

  • 200k页很多
  • DokuWiki的索引使用单个文件存储所有页面的列表(data / index / page.idx)
  • 每个索引访问都会将该页索引读入一个数组,这很可能是此处的瓶颈之一
  • 你没有对你网页的内容说什么,但我认为它们可能都非常相似,这会使单个索引文件膨胀,而不是传播关于不同文件的索引(就像自然语言页面一样)
  • 你不应该使用基于web的searchindex插件进行索引,而是使用命令行工具bin / indexer.php来避免许多AJAX请求的开销
  • 最后切换到使用SOLR或Sphinx等专用搜索引擎后端的可用搜索插件之一可能会更好
  • 一般来说,使用快速存储(SSD)可以提高性能并且有足够的RAM(用于文件系统缓存)