18
2015-01-13 00:37:57 +08:00
不确定你这个千万级是日千万级,还是总量千万级。另外这千万数据是分散存储还是集中存储。
一千万数据不算多, 利用硬盘IO . 直接利用你程序的内存空间过滤就好。 当时我们做广告数据分析, 把一天几千万的日志压缩到文件里面, 直接用php脚本排重,效率很高。
搜索引擎笼统说几个功能:
1.爬虫。
2.分词相关操作
3.用户搜索任务触发
方向上的建议:
1.你的架构不能主要依赖数据库和什么nosql , 这个在千万级的数据处理中, 网络io消耗不起。太慢。所以本地硬盘的文件读取, 直接在内存中做数据处理。你可以把这个些数据分包处理,多用几个脚本来跑。 很快可以搞定。
2. 建立一个预处理任务链。 这个任务链的意思, 就是将数据有先有后的分开, 然后根据需要分成多步, 一步步向后传递, 来提高数据的处理速度。
比如说爬虫1, 爬虫2, 爬虫3 。 每个都爬数据, 爬到后粗略计算有效性然后向自己的后面仍。 在一个你认为合适的时机,将数据整合到一起。然后可以根据不同的分词再向后仍给多哥服务,比如这个脚本只处理A-C的数据, 另外一个脚本只处理1~9的数据。不过衡量你脚本的拆分细节标准,一个时时间消耗, 还有一个是CPU利用。 要把一个内核跑到100%情况下程序都能有效快速执行, 速度上不来不行,CPU不满不行。 这个你得自己衡量。
通过上面的步骤,你就会有一堆已经分门别类的基础数据。 这些数据你可以随便灌入到一个数据库中,根据新旧程度建立索引。
3. 用户的搜索操作是另外一个分词的时候。 这时候你需要一个快速响应的服务。利用MQ 建立一个任务的分发机制, 让一个点去做用户输入的内容分词操作, 将数分词向后发, 计算用户词组的分词系数, 就是 比如说:我饿了,是分成 “我、饿了” 还是“我饿、了”这样的系数, 然后根据系数向后分发,每个点开始读取你对应分词的内容。 然后整理,开始向用户反馈。当然反馈中还有一些机制。你需要去处理。
东西太多。。。 我就不废脑细胞了。 适不适用的,随便看看吧。欢迎指正。 如果错字, 算你倒霉。