Saturday, August 22, 2015

分布式搜索算法 - 杨尚川的博客 - ITeye技术网站



分布式搜索算法 - 杨尚川的博客 - ITeye技术网站
对于搜索引擎来说,索引存放在成千上万台机器上,如何进行分布式搜索呢?

假设搜索结果是以分页的方式显示,以PageNumber代表当前页,从1开始,以PageSize代表页面大小,默认为10,以N代表搜索服务器数量。最简单的分布式搜索算法为:有一台合并服务器负责接受用户的搜索请求,然后分别向N台机器获取前PageNumber*PageSize条结果,得到的结果数为N*PageNumber*PageSize,然后把这些数据重新进行排序,根据所要显示的页面PageNumber,获取从(PageNumber - 1) * PageSize + 1开始的PageSize条结果返回给用户。

这个算法很简单,但有一些问题:

问题一:每次翻页都要向每台搜索服务器搜索一遍

        通常情况下,用户在搜索内容时都是顺序翻页的,即从第一页往下顺序翻,这个算法没有设计缓存来减轻搜索服务器的压力。

问题二:越往后翻页,搜索服务器的搜索压力越大

        如果我们是查第100页,即第991-1000 条记录,那么这个算法需要从N台搜索服务器分别获取1000条记录才能完成,对于每台搜索服务器的搜索压力很大。

问题三:越往后翻页,合并服务器的排序压力越大

        大型搜索引擎往往是由成千上万台机器组成的分布式搜索集群,如果按这个算法来进行翻页,假设N为1000,查询第100页时,合并服务器得到的结果数为N*PageNumber*PageSize = 1000 * 100 * 10 = 1000000,要对这100万条结果进行排序,对合并服务器来说压力很大。对系统的可伸缩性是一种极大的破坏。

Read full article from 分布式搜索算法 - 杨尚川的博客 - ITeye技术网站

Labels

Review (572) System Design (334) System Design - Review (198) Java (189) Coding (75) Interview-System Design (65) Interview (63) Book Notes (59) Coding - Review (59) to-do (45) Linux (43) Knowledge (39) Interview-Java (35) Knowledge - Review (32) Database (31) Design Patterns (31) Big Data (29) Product Architecture (28) MultiThread (27) Soft Skills (27) Concurrency (26) Cracking Code Interview (26) Miscs (25) Distributed (24) OOD Design (24) Google (23) Career (22) Interview - Review (21) Java - Code (21) Operating System (21) Interview Q&A (20) System Design - Practice (20) Tips (19) Algorithm (17) Company - Facebook (17) Security (17) How to Ace Interview (16) Brain Teaser (14) Linux - Shell (14) Redis (14) Testing (14) Tools (14) Code Quality (13) Search (13) Spark (13) Spring (13) Company - LinkedIn (12) How to (12) Interview-Database (12) Interview-Operating System (12) Solr (12) Architecture Principles (11) Resource (10) Amazon (9) Cache (9) Git (9) Interview - MultiThread (9) Scalability (9) Trouble Shooting (9) Web Dev (9) Architecture Model (8) Better Programmer (8) Cassandra (8) Company - Uber (8) Java67 (8) Math (8) OO Design principles (8) SOLID (8) Design (7) Interview Corner (7) JVM (7) Java Basics (7) Kafka (7) Mac (7) Machine Learning (7) NoSQL (7) C++ (6) Chrome (6) File System (6) Highscalability (6) How to Better (6) Network (6) Restful (6) CareerCup (5) Code Review (5) Hash (5) How to Interview (5) JDK Source Code (5) JavaScript (5) Leetcode (5) Must Known (5) Python (5)

Popular Posts