Всегда неудобно иметь дело с терабайтами данных, потому что вы не можете одновременно хранить все это в памяти. (Ну, не без абсолютно нелепой машины.) Поэтому вместо этого вы должны спросить, нужно ли сразу хранить все эти данные - или даже просто большую их часть - в памяти. Это может быть обработано немного за один раз? (Несколько МБ считаются «маленькими» в наши дни; не беспокойтесь о сворачивании всего до степени n th .) Если это возможно, перепроектируйте приложение и его развертывание (с этим данных, вы не можете их разделить), чтобы данные были в проводном или дисковом формате.
Вы, вероятно, хотите думать с точки зрения потоковых фильтров и преобразований; Алгоритмы на основе MapReduce - хороший план. Вы уже смотрели на Hadoop? Да, я знаю, что вы не заинтересованы в создании чего-то подобного, но у вас действительно есть большой объем данных, и вы должны думать с точки зрения правильной работы. Тем не менее, MapReduce - это только один способ настройки шаблона фильтров и преобразований; Есть и другие тоже. Например, вы можете рассматривать последующие запросы на обслуживание как тип преобразования, хотя при наличии такого большого количества данных вам нужно быть осторожным, чтобы владелец службы не относился к вам как к атаке типа «отказ в обслуживании»! Возможно, вы захотите использовать научную систему документооборота ( Kepler , Taverna ), так как они предназначены для выполнения одного и того же набора задач в длинном списке вещей.
Вы также должны быть осторожны с передачей данных; с таким большим количеством данных стандартные алгоритмы контрольной суммы, встроенные в TCP / IP, имеют удивительно высокую вероятность чего-то упустить. (К счастью, фактическое количество ошибок на современном оборудовании в основном на самом деле низкое…) Кроме того, при обработке такого большого количества данных вы должны быть очень осторожны, чтобы избежать утечек памяти. Даже утечка в 1% из 1%, вероятно, будет означать общую утечку размером в ГБ, что может быть очень заметно.