#оффтоп 1 billion row challengeНедавно зіткнувся на просторах інтернету
на челендж по програмуванню. Ідея дуже проста. Прочитати файл на 1 млрд рядків якнайшвидше, але при тому не втрачати цілісність даних. Спочатку цей челендж був створений для Java, але з часом почали з'являтися write-up-и й від людей на інших мовах програмування.
Файл складається з рядків у форматі ;. Так як це 1 млрд рядків, то кінцевий обсяг файлу становить біля 12 ГБ. Виглядає воно десь так:
Hamburg;12.0
Bulawayo;8.9
Palembang;38.8
St. John's;15.2
Cracow;12.6
Є додаткові нюанси, які потрібно враховувати, а саме:
- значення температури може бути в діапазоні [-99.9, 99.9].
- значення температури може мати лише одну дробову цифру.
- байтова довжина назви станції в діапазоні [1,100].
- максимум 10к унікальних назв станцій
- заокруглення повинно відбуватися відносно стандарту ІЕЕЕ 754, де воно відбувається в плюс
Вот це прям ідеальне академічне завдання, бо воно заставляє розширити мислення. Банальне рішення тут дуже просте, а вот коли вже пробуєш ввести оптимізацію, то починаєш розбиратися і в паралельному програмуванні і переходити на якісь low-level API, щоб максимально швидко все зчитати. Серйозно, це прикольне завдання. І да, звичайно, що малоймовірно, що хтось з вас зіткнеться з такою самою проблемою, але тут справа не в кінцевому результаті, а в тому, як ти думаєш про проблему і потенційні підходи до вирішення.
На Java прямолінійний підхід, де читається кожна строка без ніяких додаткових фіч становить ~6 хв, а найкращий результат, де все максимально оптимізовано - 1.5 сек. Якщо ти студент і вчиш програмування, то справді рекомендую попробувати цей челендж.
Вот один гарний write-up на цю тему.