你好,我是四火。
本章我们已经学习了不少持久化,特别是有关存储的技术。那在实际业务中,复杂的问题是一个接着一个的,面对这些琳琅满目的具体技术,我们该怎样运用自己所掌握的知识,做出合理的选择呢?今天我们就来接触一些典型的系统,看看对于它们来说,该做出怎样的持久化设计和技术选型。我相信我们实际接触的系统也有相当程度的类比性,可以带来应用的参考意义。
搜索引擎
小到 BBS 网站的帖子搜索,大到互联网数据搜索引擎,搜索引擎可以说是我们日常接触的几大系统之一。可是,搜索数据的存储该怎么设计呢?
有一些反应迅速的程序员朋友,也许会设想这样的存储结构,利用关系数据库,创建这样一个存储文本(文章)的关系数据库表 ARTICLES:
那么,假如现在的搜索关键字是“存储”,我们就可以利用字符串匹配的方式来对 CONTENT 列进行匹配查询:
select * from ARTICLES where CONTENT like '%存储%';
这很容易就实现了搜索功能。但是,这样的方式有着明显的问题,即使用 % 来进行字符串匹配是非常低效的,因此这样的查询需要遍历整个表(全表扫描)。几篇、几十篇文章的时候,还不是什么问题,但是如果有几十万、几百万的文章,这种方式是完全不可行的。且不说单独的关系数据库表就不能容纳那么大的数据了,就是能够容纳,要扫描一遍,这里的时间代价是难以想象的,就算我们的系统愿意做,用户可都不愿意等啊。