MapReduce с использованием SQL Server в качестве источника данных - PullRequest
6 голосов
/ 26 октября 2011

В настоящее время я изучаю возможность использования MapReduce для поддержки инкрементных сборок представлений в SQL Server.

По сути, используйте MapReduce для создания материализованных представлений.

Я немного застрял. думать о том, как разделить мои map выходы. Сейчас у меня нет ситуации с BigData, с максимальным объемом около 50 ГБ, но у меня много сложностей и проблем с производительностью. Я хочу посмотреть, удастся ли мне применить этот подход MapReduce / NoSQL.

В MapReduce у меня сейчас проблемы с разделением. Поскольку я использую SQL Server в качестве источника данных, локальность данных на самом деле не является моей проблемой, и поэтому мне не нужно отправлять данные повсеместно, скорее, каждый работник должен иметь возможность извлекать раздел данных основываться на определении map.

Я намерен полностью отобразить данные с помощью LINQ и, может быть, что-то вроде Entity Framework, просто чтобы предоставить знакомый интерфейс, это несколько не в этом дело, но я изучаю текущий маршрут.

Теперь, как мне разделить мои данные? У меня есть первичный ключ, у меня есть определения map и reduce в терминах деревьев выражений (AST, если вы не знакомы с LINQ).

  • Во-первых, как мне найти способ разделить весь ввод и разбить начальную проблему (я думаю, что я должен иметь возможность использовать агрегаты окон в SQL Server, такие как ROW_NUMBER и TILE).

  • Во-вторых, и что более важно, как я могу сделать это постепенно? То есть, если я добавлю или внесу изменение в исходную проблему, как эффективно обеспечить минимизацию количества повторных вычислений, которое необходимо выполнить?

Я искал вдохновение в CouchDB, и у них, похоже, есть способ сделать это, но как мне использовать некоторые из этих достоинств, используя SQL Server?

1 Ответ

1 голос
/ 13 февраля 2012

Я сталкиваюсь с чем-то похожим.Я думаю, что вы должны забыть оконные функции, так как это делает ваш процесс сериализованным.Другими словами, все работники будут ждать запроса.

То, что мы проверили, и это «работает», - это разделение данных на несколько таблиц (каждый месяц имеет свои таблицы x) и запуск отдельных аналитических потоков в таких разделах.,Пометка обработанных / необработанных / возможно плохих / и т. Д. Данных после уменьшения.

Тесты с одной многораздельной таблицей, приводящие к проблемам с эскалацией блокировки.

Вы определенно добавите немного больше сложности в свойтекущее решение.

...