База данных переписи США включала много разных наборов данных различных размеров, но если немного упростить, оказывается, что 100 гигабайт достаточно для сохранения, по крайней мере, базовой демографической информации (данных о возрасте, поле, заработке, этнической принадлежности, языке, религии, жилищных условиях и месте проживания, упакованных в 128-битную запись) обо всех здравствующих жителях Земли. Для этого понадобилось бы создать таблицу с 6,75 миллиардами строк и, вероятно, с 10 столбцами. Следует ли по-прежнему считать это «большими данными»? Конечно, это зависит от того, что вы пытаетесь делать с этими данными. Несомненно, их можно сохранить в дисковой памяти стоимостью в 10 долларов. Но более важно то, что любой грамотный программист за несколько часов может написать простое, неоптимизированное приложение для персонального компьютера стоимостью в 500 долларов с минимальными ресурсами процессора и основной памяти, которое перерабатывает эти данные и с достаточно разумной производительностью возвращает ответы на простые агрегатные запросы типа «для каждой страны найти возрастную медиану1 ее жителей мужского и женского пола».
Чтобы это продемонстрировать, я попытался создать такое приложение, используя, конечно, фиктивные данные – файл из 6,75 миллиардов 16-байтовых записей, содержащий равномерно распределенные случайные данные (рис. 1). Поскольку в семибитном поле возраста может содержаться 128 разных значений, в однобитном поле пола – два значения (предполагается, что неопределенные значения отсутствуют), а в восьмибитном поле кода страны – 256 значений (в ООН состоит 192 государства), средний возраст можно вычислить с использованием стратегии пересчета: просто создать 65536 бакетов (по одному для каждой возможной комбинации возраста, пола и кода страны) и подсчитать, сколько записей попадает в каждый бакет. Для нахождения возрастной медианы для заданной комбинации пола и кода страны сначала подсчитывается общее число записей tot в соответствующих 128 бакетах, относящимся к возможным значениям возраста.