反面试:分布式搜索算法 - 推酷



反面试:分布式搜索算法 - 推酷

对于搜索引擎来说,索引存放在成千上万台机器上,如何进行分布式搜索呢?

假设搜索结果是以分页的方式显示,以 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 反面试:分布式搜索算法 - 推酷


No comments:

Post a Comment

Labels

Algorithm (219) Lucene (130) LeetCode (97) Database (36) Data Structure (33) text mining (28) Solr (27) java (27) Mathematical Algorithm (26) Difficult Algorithm (25) Logic Thinking (23) Puzzles (23) Bit Algorithms (22) Math (21) List (20) Dynamic Programming (19) Linux (19) Tree (18) Machine Learning (15) EPI (11) Queue (11) Smart Algorithm (11) Operating System (9) Java Basic (8) Recursive Algorithm (8) Stack (8) Eclipse (7) Scala (7) Tika (7) J2EE (6) Monitoring (6) Trie (6) Concurrency (5) Geometry Algorithm (5) Greedy Algorithm (5) Mahout (5) MySQL (5) xpost (5) C (4) Interview (4) Vi (4) regular expression (4) to-do (4) C++ (3) Chrome (3) Divide and Conquer (3) Graph Algorithm (3) Permutation (3) Powershell (3) Random (3) Segment Tree (3) UIMA (3) Union-Find (3) Video (3) Virtualization (3) Windows (3) XML (3) Advanced Data Structure (2) Android (2) Bash (2) Classic Algorithm (2) Debugging (2) Design Pattern (2) Google (2) Hadoop (2) Java Collections (2) Markov Chains (2) Probabilities (2) Shell (2) Site (2) Web Development (2) Workplace (2) angularjs (2) .Net (1) Amazon Interview (1) Android Studio (1) Array (1) Boilerpipe (1) Book Notes (1) ChromeOS (1) Chromebook (1) Codility (1) Desgin (1) Design (1) Divide and Conqure (1) GAE (1) Google Interview (1) Great Stuff (1) Hash (1) High Tech Companies (1) Improving (1) LifeTips (1) Maven (1) Network (1) Performance (1) Programming (1) Resources (1) Sampling (1) Sed (1) Smart Thinking (1) Sort (1) Spark (1) Stanford NLP (1) System Design (1) Trove (1) VIP (1) tools (1)

Popular Posts