一个资讯网站,PHP+MYSQL。一直来都是把文章内容存储在mysql数据库里,需检索时直接检索数据库即可。但最近发现数据库越来越庞大了,一百多万条记录,ibdata1文件都已是3G多了。在检索和备份时都觉得很艰难。起来一个想法,想把文章内容改为.txt文件存在本地,数据库里仅记录标题、作者及这个文件的路径。因为大数据基本上都是文章内容所占,这样的话估计能释放最少60%以上的存储空间。但想来想去又面临着一个问题,如何检索呢?因网站上的检索区分有按标题/作者/内容检索的选项。内容检索是不可避免的,但总不能每次检索都去读取那一百多万个文件吧?不知还有没有别的方法来解决这问题?请高人指点,谢谢!

解决方案 »

  1.   

    一个txt文件 单独一个文件夹  /txt/1/1.txt   /txt/2/2.txt           
      

  2.   

    先把所有文章跑一遍,提取出文章中的关键词,将关键词与文章的对应关系存到数据库中以供检索,可以考虑使用sphinx
      

  3.   

    你的描述有点问题
    1、如果将内容用文件保存,那也是保存在服务器上,而不是本地
    2、数据库中的 text 类型字段以链表方式组织数据,远比文件系统节省空间建议你还是维持原有的数据库方案
    为提高检索效率,可考虑使用关键字表或全文检索
      

  4.   


    表达有误,是该称之为保存在服务器上。
    另我所谓的节省空间是指ibdata1文件的大小空间,硬盘上就无所谓了。“关键字表或全文检索” 关键字表是指提取文章的关键词吗,此方式唠叨大哥能指点个思路吗?
      

  5.   

    其实这两种方案都涉及到“分词”。目前简单且有效的分词程序可参考http://www.ftphp.com/scws/
    当然若要求作者在发帖时,自行提供关键词也不失一种好方法
      

  6.   


    谢谢,其实我之前也打算让后台人员在发布文章时提供关键词的,实际又高效,可是他们都说这样太麻烦。无奈之下才去检索内容的,另一个原因就是公司这个行业的关键词比较冷门用SCWS可能分析不出来。
      

  7.   

    想了个不咋滴的方法。在后台提交发布时把文章用SCWS简单的分十来个词来,再显示出来让工作人员对这些词进行补充。这样子或许能激起人员的主动性。
    缺点就是如果SCWS分得不大好,工作人员也懒惰的话就没招了……
      

  8.   

    看描述,不像是检索数据库,而是文件夹。NIU人~