如题,怎样设计订阅系统,是那种靠关键词区分,比如订阅"小三"新闻标题包含"小三"都给弄出来,再订阅"苹果"然后也把标题包含苹果的给弄出来...如此可能还要设计排除某些字,
如果用数据库LIKE的话资源肯定耗很大,想问成熟额做法是怎么弄的?又是如何将不同结果,发布给不同订阅者的?
如题,怎样设计订阅系统,是那种靠关键词区分,比如订阅"小三"新闻标题包含"小三"都给弄出来,再订阅"苹果"然后也把标题包含苹果的给弄出来...如此可能还要设计排除某些字,
如果用数据库LIKE的话资源肯定耗很大,想问成熟额做法是怎么弄的?又是如何将不同结果,发布给不同订阅者的?
请题主先详细描述一下问题
这些新闻的来源是什么?UGC?抓取?
这些新闻有多大量?百万?千万?
以抓取信息、新闻、千万量级为例,大概分为一下几部分:
1.抓取到的新闻会有分类模块给每个条目打上标签后入库
2.为了存取速度,在内存中维护一个标签-新闻唯一ID数组的数据结构,可以使用redis也可以单独写一个服务
3.会有一张表维护用户和订阅话题
4.当用户发送了获取消息请求时,去内存中根据请求的话题词去内存取得最新的几条新闻ID,根据ID去数据库取新闻返回,抗并发在数据库上加一层缓存
如果是搜索引擎的话就是内存中维护着一张倒排索引表,每个新闻在入库之前都会清洗数据、切词存入该表中,之后用户查询关键词就会根据该表中的索引找到具体的若干条目返回
以上
Kafka 系统啊, 发布&订阅的消息系统
可以考虑用 ElasticSearch