Мне отправили тз сроки поджимают, экспериментировать нету времени.
Помогите пожалуйста подсказками , какую коллекцию использовать? Надо сделать кеш используя Phantom reference?
Задание:
Представим на время, что вы black hat, и у вас в распоряжении оказались данные ~30 млн. заказов некоторого сервиса
доставки еды за некоторый период 2021 и 2022 года.
Поверхностный анализ показал, что данные содержат 18 758 328 уникальных телефонов с полным именем клиента, а
средняя длина полного имени - 20 символов (латинских или кириллических).
Допустим, вы хотите развернуть веб-сервис, который позволит по номеру телефона найти полное имя клиента. Но вы не
хотите оставлять следы на диске или в базе данных - придется все держать в памяти. Но еще вы не хотите зря тратить
крипту на слишком большой сервер.
Поэтому давайте оценим, сколько памяти займут эти данные:
* если мы хотим реализовать поиск за постоянное время, т.е. O(1)?
* если мы хотим занять как можно меньше памяти?
Самое главное - объяснить, как вы пришли к той или иной числовой оценке.
Adm
49 уровень
Помогите пожалуйста подсказками
Обсуждается
Комментарии (1)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Денис Enterprise Java Developer
23 мая 2024, 08:36
Тебя попросили померять память на 19кк объектов примерно намекнув сколько может весить каждый из них.
В первом случае тебе нужна коллекция с константным временем доступа, скорее всего какая-то из Map раз искать нужно по ключу. Вот и посчитай сколько памяти уйдёт в таком случае на все накладные расходы.
Пункт про "как можно меньше места в памяти" не совсем понял что именно имеется в виду. Возможно речь идёт о каком ни будь сжатии данных в памяти или специфической структуре данных, типа отбросить лишние поля, но из задачи мне это не очевидно. Если речь идёт о каком ни будь сжатии то очевидно время доступа просядет, будут затраты на раззиповку данных. В данном случае тебе нужно будет прикинуть сколько выгадаешь на архивации, текстовые данные сжимаются обычно хорошо.
+1