全文检索、数据挖掘、推荐引擎系列1---技术架构思考

我的小说《最老程序员创业札记-全文检索、数据挖掘、推荐引擎应用》的技术系列文章的第一篇,由于本人也是在一个LBS问答项目中使用,各方面考虑得不完善,希望能够得到大家的帮助,谢谢大家的支持。

在后web2.0时代,简单的允许用户产生内容,连接用户组成社交网络,满足用户个性化需求,已经变成各个网站的标配,不可能成为网站的特色和竞争优势了。然而,随着用户产生内容的增多,用户与系统交互手段的丰富,用户可供选择的选项的增多,用户迫切需要一种可以处理当前信息爆炸时代的工具,可以迅速找到自己想要的内容,更加容易的做出正确的决策,因此在后web2.0时代,全文检索、数据挖掘、推荐引擎的应用,将是各大网站下一轮竞争的焦点。

但是应用这三种技术需要一个统一的技术架构,在这个统一的架构下,才能将全文检索、数据挖掘、推荐引擎的功能发挥出来。我们将全文检索、数据挖掘、推荐引擎统成为商业智能系统,而与用户交互的部分称为前端系统。根据后台商业智能系统的功能不同,可以将后台商业智能系统分为三大类服务:同步服务、异步服务、后台线程。

  1. 同步服务:主要处理用户即时全文检索查询请求,给出推荐条目,通常同步服务使用异步服务或后台进程产生的商业智能数据,这些数据存在缓存中如memcached或数据库mysql中,通过Web Service或Restful方式提供
  2. 异步服务:为了完成实时搜索、实时推荐等实时性需求,用户的每个交互,在保存到数据库中的同时,系统会将该事件写入消息服务器中,异步服务组件通过监听消息服务器上的topic来启动业务处理逻辑,从而实现近实时需求。例如,用户为某个产品写下评论或博客后,立即就可以通过全文检索中查询中该内容,用户对内容的打分或投票也可以立即反映到给用户的推荐列表中
  3. 后台服务:主要指需要长时间在后台运行的服务,例如聚合网站中对信息源的抓取,内容批量导入的处理等等。这里有两种情况,一种是定时任务,需要在特定的时间或是时间间隔来完成,另一种是条件触发的后台任务,例如在CPU利用率或并发数降低到一定程度后,后台自动运行的任务

为了满足上述需求,自然对所选用的技术和产品有一定的要求。在这里我想阐述一下我选择产品的原则,首先选择开源软件,其次是如果可以用一种产品实现的功能,不建议采用两种或多种产品组合来使用,虽然多种产品组合可能功能更为强大,但是配置的复杂性方面将成倍的提高,结果往往是得不偿失的。

  • 编程语言选择:对于后台的商业智能系统而言,数据处理需要强大的处理能力,显然PHP、Python等不是最佳选择,选择Java可能更能满足要求,因为基于Java的全文检索、数据挖掘、推荐引擎均有成熟的开源软件可供选择,如Lucene、WEKA、Mahout等。另外,在性能扩展方面,Hadoop是当前的最通用的Map/Reduce选项,其本身就是Java实现的
  • 应用服务器:考虑到需要同时满足同步服务、异步服务及后台进程的需求,要求应用服务器(Web服务器)具有消息中间件的功能,而单从这点来看,选择Glassfish似乎是更好的选择,因为Tomcat再加上Httpd、ActiveMQ/OpenJMS配置相对要复杂一些
  • 数据库系统:当前对大型系统而言,常常纠结于选择SQL还是NoSQL,NoSQL的性能好,但是不能处理复杂的查询,而SQL可以处理复杂查询,但是性能上又会差很多,通常的折衷解决方案是数据库加缓存系统,但是当MySQL 5.6.2将InnoDB引擎与Memcached相结合之后,似乎选择MySQL这种集成解决方案更具有优势,这让我们看到了SQL与NoSQL的融合趋势,这种方案的唯一缺陷是目前MySQL 5.6.2还没有GA,这种方案还有成功案例可供借签

综上所述,个人认为采用Java+Lucene+WEKA/Mahout+Glassfish+MySQL(>5.6.2)是实现后台商业智能的合理架构。

posted on   最老程序员闫涛  阅读(2048)  评论(3编辑  收藏  举报

编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· [AI/GPT/综述] AI Agent的设计模式综述

导航

< 2011年8月 >
31 1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31 1 2 3
4 5 6 7 8 9 10
点击右上角即可分享
微信分享提示