Мне был задан следующий вопрос на собеседовании, который я не смог решить, указав на это, было бы очень полезно.дизайн структуры данных для хранения большого количества данных
У меня есть 100 файлов размером 10 МБ, содержимое каждого из них представляет собой некоторое преобразование строк в целочисленное значение.
string_key = целое значение
a=5
ba=7
cab=10 etc..
физическое пространство ОЗУ доступно 25 Мб. Как структура данных будет разработана таким образом, что:
For any duplicate string_key, the integer values can be added
Display the string_key=integer value sorted in a alphabetical format
Constraint:
All the entries of a file could be unique. All of the 10*1000MB of data could be unique string_key mapping to an integer value.
Решение 1:
Я думал о загрузке каждого из файлов один за другим и хранение информация в хэшмапе, но этот хэш-файл будет чрезвычайно огромным, и в ОЗУ не будет достаточной памяти, если все файлы содержат уникальные данные.
Любые другие идеи?
Использование noSqldb не является вариантом.
Я не знаю, был ли это ответ, который они искали, но 1) Сортируйте каждый из 100 файлов по одному за раз. Запишите отсортированный вывод в другие 100 файлов. 2) Сопоставьте 100 файлов/слияние, добавьте повторяющиеся значения целочисленных ключей и покажите строковый ключ и целочисленное значение. –
@gilbert le blanc Согласен с шагом 1, как бы вы достигли шага 2, когда вам разрешено загружать только 2,5 файла на первой итерации? и намного меньшее количество файлов на последующих шагах. Также, что в худшем случае, когда все файлы имеют уникальные пары значений строкового ключа – bhavs
@bhava: вы сохраняете только две строки из каждого из 100 отсортированных файлов в памяти за раз. Вы печатаете при чтении файлов. Это называется диском match/merge. Это такая обработка, которую мы должны были сделать 40 лет назад. –