Hadoop Map / Reduce - простой пример использования для выполнения следующих действий - PullRequest
2 голосов
/ 22 апреля 2010

У меня есть база данных MySQL, где я храню следующий BLOB (который содержит объект JSON) и ID (для этого объекта JSON). JSON-объект содержит много различной информации. Скажем, «город: Лос-Анджелес» и «штат: Калифорния».

На данный момент существует около 500 тыс. Таких записей, но они растут. И каждый объект JSON довольно большой.

Моя цель - выполнять поиск (в реальном времени) в базе данных MySQL. Скажем, я хочу найти все объекты JSON, которые имеют "штат" в "Калифорния" и "город" в "Сан-Франциско".

Я хочу использовать Hadoop для этой задачи. Моя идея состоит в том, что будет «задание», которое будет принимать, скажем, 100 записей (строк) из MySQL, проверять их в соответствии с заданными критериями поиска, возвращать те (идентификаторы), которые соответствуют требованиям.

Плюсы / минусы? Я понимаю, что можно подумать, что я должен использовать для этого простую мощь SQL, но дело в том, что структура объектов JSON довольно «тяжелая», и если я скажу ее как схемы SQL, будет как минимум 3-5 объединений таблиц, что (Я действительно пытался) создает головную боль, и создание всех правильных индексов съедает оперативную память быстрее, чем я могу себе представить. ;-) И даже в этом случае каждый SQL-запрос должен быть проанализирован на предмет использования индексов, иначе при полном сканировании это буквально боль. И с такой структурой у нас единственный путь «вверх» - это просто вертикальное масштабирование. Но я не уверен, что это лучший вариант для меня, так как я вижу, как будут расти объекты JSON (структура данных), и я вижу, что их число также будет расти. : -)

1010 * * Помощь? Может ли кто-нибудь указать мне простые примеры того, как это можно сделать? Имеет ли это смысл вообще? Я что-то упустил?

Спасибо.

Ответы [ 3 ]

2 голосов
/ 23 апреля 2010

Несколько указателей для рассмотрения:

  • Hadoop (в частности, HDFS) распределяет данные по кластеру машин. Использование MapReduce для анализа / обработки этих данных требует хранения данных в HDFS, чтобы использовать возможности параллельной обработки, предлагаемые Hadoop.

  • Hadoop / MapReduce практически отсутствует в режиме реального времени. Даже при работе с небольшими объемами данных время, необходимое Hadoop для настройки задания, может составлять более 30 секунд. Это то, что нельзя остановить.

Может быть, стоит использовать Lucene для индексирования объектов JSON в качестве документов. Вы можете хранить индекс в solr и легко запрашивать что угодно.

0 голосов
/ 28 апреля 2010

Похоже, вы пытаетесь воссоздать CouchDB. CouchDB построен на основе структуры сокращения карт и специально предназначен для работы с объектами JSON.

0 голосов
/ 22 апреля 2010

на самом деле вы есть .. потому что поиск в одном огромном поле для текста займет гораздо больше времени, чем индексация базы данных и поиск правильного пути SQL. База данных была создана для использования с sql и индексами, у нее нет возможности разбирать и индексировать json, поэтому любой способ поиска в json (вероятно, просто совпадение по хакерской строке) будет намного медленнее. 500k строк - это не так много для обработки mysql, вам не нужен hadoop, просто хорошая нормализованная схема, правильные индексы и оптимизированные запросы

...