#оффтоп 1 billion row challenge Недавно зіткнувся на просторах інтернету на челендж по програмуванню

Нотатки Деапула

Нотатки Деапула

@diary_of_deapul

Глянь на світ з нового ракурсу. Автор - @deapul Всі думки мої і не відображають погляди Google.

752 subscribers
Open in Telegram
#оффтоп 1 billion row challenge

Недавно зіткнувся на просторах інтернету на челендж по програмуванню. Ідея дуже проста. Прочитати файл на 1 млрд рядків якнайшвидше, але при тому не втрачати цілісність даних. Спочатку цей челендж був створений для Java, але з часом почали з'являтися write-up-и й від людей на інших мовах програмування.

Файл складається з рядків у форматі <string: назва станції>;<double: температура>. Так як це 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 на цю тему.
Open post in Telegram