Вы не можете изменять строки; они неизменны. Вы можете сделать это вместо этого:
txtBox.Text = txtBox.Text.Substring(0, i) + "TEXT" + txtBox.Text.Substring(i);
Можно ли применить концепцию MapReduce к анализу веб-журналов?
Да.
Вы можете разделить свой файл журнала hudge на части, скажем, по 10 000 или 1 000 000 строк (что бы ни было подходящим фрагментом для вашего типа файла журнала - для файлов журнала apache я бы выбрал большее число), скормить их некоторым картографам, которые извлекут что-то конкретное (например, браузер, IP-адрес, ..., имя пользователя, ...) из каждой строки журнала, затем уменьшите, подсчитав количество появлений каждой из них (упрощенно):
192.168.1.1,FireFox x.x,username1
192.168.1.1,FireFox x.x,username1
192.168.1.2,FireFox y.y,username1
192.168.1.7,IE 7.0,username1
Вы можете извлекать браузеры, игнорируя версию, используя операцию map, чтобы получить этот список:
FireFox
FireFox
FireFox
IE
Затем уменьшите, чтобы получить это: FireFox, 3 IE, 1
Является ли MapReduce самым умным способом сделать это?
Это умно, но вам нужно быть очень большим, чтобы получить какую-либо выгоду ... Разделение ПЕТАБАЙТОВ журналов.
Для этого я бы предпочел использовать очереди сообщений и согласованный механизм хранения (например, базу данных) с клиентами обработки, которые извлекают работу из очередей, выполняют задание и отправляют результаты в другую очередь, с заданиями, которые не выполняются в какой-то период времени, и доступными для обработки другими. Эти клиенты будут небольшими программами, которые делают что-то особенное.
Вы можете начать с 1 клиента и расширить до 1000 ... У вас даже может быть клиент, который запускается в качестве заставки на всех ПК в локальной сети и запускает 8 клиентов на ваших 8-ядерных серверах, 2 на ваших двухъядерных ПК ...
С Pull: у вас может быть 100 или 10 работающих клиентов, На многоядерных машинах может работать несколько клиентов, и все, что клиент завершит, будет доступно для следующего шага. И вам не нужно выполнять какое-либо хеширование или назначение, чтобы работа была выполнена. Он на 100% динамический.
http://img355.imageshack.us/img355/7355/mqlogs.png
Как бы вы разделили файлы веб-журнала между различными вычислительными экземплярами?
По количеству элементов или строк, если это текстовый файл журнала.
Чтобы протестировать MapReduce, я хотел бы предложить вам поиграть с Hadoop.
Конечно. Какие данные вы храните?
Он позволил бы вам выполнять запросы одновременно на многих обычных машинах, так что да, это может быть полезно. В качестве альтернативы вы можете попробовать Sharding .
Обычно вы распределяете свои данные, используя согласованный алгоритм хеширования , так что вы можете легко добавить больше экземпляров позже. Вы должны хешировать любым первичным ключом в обычной базе данных. Это может быть идентификатор пользователя, IP-адрес, референт, страница, реклама; независимо от темы вашего журнала.