В настоящее время я разрабатываю приложение, в котором есть один модуль, который будет загружать большие объемы данных из базы данных и уменьшать его до гораздо меньшего набора с помощью различных вычислений в зависимости от обстоятельств.
Многие из более интенсивных операций ведут себя детерминистически и поддаются параллельной обработке.
При условии, что у меня есть цикл, который перебирает большое количество порций данных, поступающих из БД, и для каждого из них вызывает детерминированную функцию без побочных эффектов, как бы я сделал так, чтобы программа не ожидала возврата функции а скорее устанавливает следующие вызовы, чтобы они могли обрабатываться параллельно? Наивный подход к демонстрации принципа подействовал бы сейчас.
Я прочитал статью Google MapReduce, и хотя я мог бы использовать общий принцип в ряде мест, на данный момент я не буду ориентироваться на большие кластеры, скорее это будет одноядерный или многопроцессорный компьютер для версии 1.0. Так что в настоящее время я не уверен, смогу ли я на самом деле использовать библиотеку, или мне пришлось бы самому бросить простую базовую версию.
Я нахожусь на ранней стадии процесса проектирования и до сих пор нацеливаю C-что-то (для критических битов скорости) и Python (для критических битов производительности) в качестве моих языков. Если есть веские причины, я мог бы перейти, но пока я доволен своим выбором.
Обратите внимание, что мне известно о том, что для получения следующего фрагмента из базы данных может потребоваться больше времени, чем для обработки текущего, и весь процесс будет связан с вводом / выводом. Однако на данный момент я бы предположил, что на данном этапе он не используется и на практике не использует кластер БД, кеширование памяти или что-то еще, чтобы не быть связанным с вводом-выводом.