Хотя языки и связанные с ними технологии / структуры важны для масштабирования, они, как правило, бледнеют по сравнению с важностью алгоритмов, структуры данных и архитектур. Забудьте о потоках: количество ядер, которые вы можете использовать таким образом, слишком ограничено - вы хотите, чтобы отдельные процессы обменивались сообщениями, чтобы вы могли масштабироваться как минимум до небольшого кластера серверов в быстрой локальной сети (и в идеале - большой). кластер тоже! -).
Реляционные базы данных могут быть исключением из «бледных технологий» - они действительно могут ограничить вас, когда вы пытаетесь увеличить масштаб на несколько порядков. Это ваша ситуация - вы беспокоитесь о десятках или сотнях серверов, или вы начинаете думать о тысячах или мириадах? В первом случае вы все еще можете растянуть реляционную технологию (например, с помощью горизонтального и вертикального шардинга), чтобы поддержать вас - во втором случае вы находитесь на точке разрыва или уже прошли ее, и должен начать мышление с точки зрения хранилищ ключей / ценностей.
Возвращаясь к алгоритмам - «анализ данных» охватывает широкий диапазон ... большая часть моей работы в Google за последние несколько лет попадает в этот диапазон, например. в программном обеспечении управления кластером, и в настоящее время в бизнес-аналитике. Вам нужен детерминистический анализ (например, для целей бухгалтерского учета, когда вы не можете пропустить ни одной копейки из 8-значных цифр), или вы можете выдержать некоторый не -детерминизм? Большинство приложений для «интеллектуального анализа данных» попадают во вторую категорию - вам не нужна полная точность и детерминизм, просто хорошая оценка диапазона, в котором могут оказаться ваши результаты, скажем, с вероятностью 95%.
Это особенно важно, если вам когда-либо понадобится выполнить анализ данных «в реальном времени» - ограничения почти в реальном времени и 100% точности для одного и того же вычисления делают не счастливым отдыхом , Но даже при массовом / пакетном извлечении данных в автономном режиме, если вы можете получить результаты, которые на 95% гарантированно на порядки быстрее, чем это потребовалось бы на 99,99% (я не знаю, может ли когда-либо извлечение данных быть 100,00%! -), это может быть замечательным компромиссом.
Работа, которую я выполнял в течение последних нескольких лет, предъявляла несколько требований к «почти в реальном времени» и намного больше требований для автономного, «пакетного» анализа - и только в очень немногих случаях, когда абсолютная точность является абсолютной необходимостью. Постепенно улучшенная выборка (когда полная гарантированная точность не требуется), особенно в сочетании с многослойной выборкой (разработанной в тесном сотрудничестве с экспертом в области !!!), снова и снова доказывает, что это отличный подход; если вы не понимаете эту терминологию и по-прежнему хотите увеличить объем, превышающий терабайты, до уровня обработки в экзабайтах и петабайтах, вам крайне необходим хороший курс повышения квалификации в Stats 201 или любой другой курс, охватывающий эти понятия в вашей части Вудс (или в Университете iTunes, или в предложениях YouTube на университетских каналах, или в blip.tv, или в любом другом месте).
Python, R, C ++, что угодно, только вступают в игру после того, как вы освоили эти алгоритмические проблемы, архитектурные проблемы, которые с ними связаны (можете ли вы разработать вычислительную архитектуру для «статистического выживания» смерть нескольких серверов из вашего множества, восстановление со статистически значимой точностью без большого количества переделок ...?), а также поддержка выбора дизайна и технологии хранения.