Ну, я не уверен , если это MapReduce , что решает проблему, но это , конечно , не был бы MapReduce в одиночку решить все эти вопросы вы подняли. Но вот важные вещи , которые следует принимать во внимание, и что делает его возможным , чтобы иметь такую низкую задержку на запросы всех этих терабайт данных в разных машинах:
- распределенный вычислительное: будучи распределено не означает, что индексы просто распределяется в разных машинах, они на самом деле реплицируются по различным группам, что позволяет для многих пользователей, выполняющих различные запросы с низкой поискового времени (да, крупные компании могут позволить себе, что многому машин);
- Кэширование: кэши чрезвычайно сократить время выполнения, будь то на стадии ползания, для поиска страниц, или для ранжирования и exihibition результатов;
- много настроек: все вышеперечисленные и очень эффективные алгоритмы / решения могут быть эффективными только в том случае, если реализация также эффективна. Существует множество (жестко закодированных) оптимизаций, таких как локальность ссылок, сжатие, кэширование; все они обычно применимы к различным частям обработки.
Учитывая это, давайте попробуем ответить на ваши вопросы:
но я считаю невозможным индексировать результаты каждого возможного запроса
Да, это было бы, и фактически невозможно получить результаты для каждого возможного запроса . В мире существует бесконечное количество терминов (даже если вы предполагаете, что будут введены только правильно написанные термины), и существует экспоненциальное количество запросов от этих n -> inf
терминов ( 2^n
). Так что сделано? Кэширование. Но если есть так много запросов / результатов, какие из них кэшировать? Политика кеширования. Наиболее частые / популярные / релевантные для пользователя запросы - это те, которые кэшируются.
не будет ли аппаратная задержка в оборудовании Google огромной? Даже если все данные в Google были сохранены в твердотельных накопителях TB / s
В наши дни, с такими высокоразвитыми процессорами, люди склонны думать, что каждая возможная задача, которая должна завершиться в течение секунды (или меньше) и которая имеет дело с таким большим количеством данных, должна обрабатываться чрезвычайно мощными процессорами с несколькими ядрами и большим объемом памяти. Однако правящий рынок - это деньги, и инвесторы не заинтересованы их тратить. Так что сделано?
На самом деле предпочтение отдается большому количеству машин, каждый из которых использует простые / доступные (с точки зрения стоимости) процессоры, что снижает стоимость создания множества кластеров. И да, это работает. Основное узкое место всегда сводится к диску, если вы рассматриваете простые измерения производительности . Но когда машин так много, можно загружать их в основную память, а не работать на жестких дисках.
Карты памяти для нас дороги , простые люди, но они очень дешевы для предприятий, которые покупают много таких карт одновременно. Поскольку это не дорого, наличие большого объема памяти, необходимого для загрузки индексов и хранения кешей, не является проблемой. А поскольку машин очень много, суперскоростные процессоры не нужны, поскольку вы можете направлять запросы в разные места и иметь кластеры машин, отвечающие за посещение определенных географических регионов , что обеспечивает более специализированное кэширование данных и даже лучший отклик раз.
Есть ли решить эту проблему MapReduce помощь?
Хотя я не думаю, что использование или нет MapReduce - ограниченная информация внутри Google, я не осведомлен об этом. Однако реализация Google MapReduce (которая, безусловно, не является Hadoop) должна иметь много оптимизаций, многие из которых включают аспекты, обсужденные выше. Таким образом, архитектура MapReduce, вероятно, помогает определять физическое распределение вычислений, но есть много других моментов, которые следует учитывать, чтобы оправдать такую скорость при запросе времени.
Итак, я понимаю, что популярные запросы могут быть кэшированы в памяти. Но как насчет непопулярных поисков?
Ниже график представляет собой кривую , как виды происходят запросов. Вы можете видеть, что существует три основных вида поиска, каждый из которых содержит примерно 1/3 объема запросов (область под кривой). Сюжет показывает степенной закон и подтверждает тот факт, что меньшие запросы являются наиболее популярными. Вторая треть запросов все еще выполнима для обработки, так как они содержат мало слов. Но набор так называемых неясных запросов , которые обычно состоят из запросов неопытных пользователей, не являются ничтожной частью запросов.
И здесь есть место для новых решений. Поскольку это не просто один или два запроса (а одна треть из них), они должны иметь соответствующие результаты. Если вы введете что-то слишком неясное в поиске Google, вам не понадобится больше времени, чтобы вернуть список результатов, но, скорее всего, он покажет вам то, что он предположил, что вы хотели бы сказать. Или он может просто заявить, что не было документа с такими терминами - или даже сократить ваш поиск до 32 слов (что только что произошло со мной в случайном тесте здесь).
Существуют десятки применимых эвристик, которые могут либо игнорировать некоторые слова, либо пытаться разбить запрос на более мелкие и собрать наиболее популярные результаты. И все эти решения могут быть адаптированы и адаптированы для обеспечения допустимого времени ожидания , скажем, менее секунды? : D