Re[2]: Как бы вы делали эту задачу (переходим к конкретике).
От: Gt_  
Дата: 31.08.22 11:18
Оценка: 20 (2)
Здравствуйте, Gt_, Вы писали:

Gt_>Я бы для начала попробовал spark, он даже локально распараллелит чтение


протестил spark+java на 12700k и стареньком sata ssd, 10G файлик.
@SpringBootTest
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
class BigFile {

    @Test
    void bigfile0() throws IOException {
        SparkSession spark = SparkSession
                .builder()
                .appName("delta")
                .master("local[*]")
                .getOrCreate();

        spark.read()
                .option("delimiter", ".")
                .csv("D:/TEST")
                .sort("_c1", "_c0")
                .repartition(1)
                .write()
                .option("delimiter", ".")
                .csv("D:/TEST_COMBINED");


    }


тест прошел 2m14s, убрал repartition(1), попробовал руками конкатинировать 200 файлов что спарк по дефолту выплевывает — вышло дольше 2m31s

на HDD с repartition(1) 9 минут писал.
Отредактировано 31.08.2022 14:06 Gt_ . Предыдущая версия .
Re: Как бы вы делали эту задачу (переходим к конкретике)...
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 02.09.22 10:00
Оценка: 11 (2)
Здравствуйте, Shmj, Вы писали:

S>Многие думают, что главное собрать требования а остальное легко — что требования собрать — это большая часть времени а разработка типа 15%.

Это запомним

S>Требования собраны, всем все понятно. Только абсурдировать не нужно, понятно что демагогическими приемами все можно свести к абсурду, любая фраза не формальна и не полна. По сути всем все понятно.

S>Вот мое видение на скорую руку: https://rsdn.org/forum/dotnet/8338266.1
Автор: Shmj
Дата: 18.08.22

S>Идея такая, что для такой задачи не оптимально писать все с нуля а правильнее найти готовое решение.
S>Но! Прав ли я? Во-первых, мое решение не доделано — там сортируется сначала по цифре, потом по строке (но это ладно, можно поменять местами). Второе — не учитываются дубликаты (можно прибавить к каждой записи счетчик или задействовать Berkeley DB, вроде там дубликаты разрешены, но это не точно).
Конечно ты не прав.
Во-первых твое решение, как ты сам заметил, не доделано. Доделка не представляется тривиальной.
Во-вторых требование сортировать сначала по строке, а потом по числу — ключевое. Если немного проанализировать это требование, то становится понятно, что мы никаким образом не сможем построить эффективный индекс.
Так как ключом является строка, то её надо хранить в индексе полностью, это означает что индекс точно не влезет в память. Внешний индекс потребует O(N * log N) операций записи на диск, тогда как разбиение файла на куски, сортировка кусков в памяти и слияние кусков потребует ровно 2*N записей на диск.
В-третьих ты не думая применил async, хотя для такой задачи он не помогает. Я думаю большинство C# программистов сделает также, я тоже так сделал. Но оказалось что async в такой задаче не помогает. Это тоже могло быть уточнено при анализе, но мы же программисты, нам "написать быстрее, чем описать".
В-четвертых, то что пропустили почти все, в условиях мало что известно о природе строк. Многие посчитали их ASCII-строками (массивами байт-символов), тогда как может быть UTF-8 с правилами сортировки для Норвежского языка.


S>Как бы вы это решали? Искали бы сначала готовую библиотеку или же писали бы с нуля?

Я немного проанализировал и понял что можно почти все написать с помощью стандартных пакетов.
Вот решение https://github.com/gandjustas/HugeFileSort
Я примерно полчаса поискал библиотеки для megre двух IEnumerable и для min heap и не нащел ничго внятного. Merge написал сам, а вместо min heap использовал стандартный PriorityQueue

S>Ну и как думаете — если мое решение с LevelDB довести до ума — будет ли быстрее чем предложенные самописные решения на сотнях гигабайт данных?

Не будет

S>Ведь больше 2-3 Гб. никто проверять не хочет, а это размер, который полностью вмещается в ОЗУ. Когда в ОЗУ перестанет влазить — цифры могут быть другими.

14 ГБ файл (100 000 000 строк), генерация заняла 160 сек
Сортировка — 360 сек
На HDD все проверялось.

К сожалению все еще влезает а ОП на моей машине, но во время работы больше 3гб не съел.

S>Вот я реально не знаю. Нужно только проверять. А проверить с 50 Гб. данных — уже час времени.

LevelDB в час не уложится, только если SSD очень быстрый.
Re: Как бы вы делали эту задачу (переходим к конкретике)...
От: DiPaolo Россия  
Дата: 28.08.22 07:51
Оценка: 2 (1) +1
Чтобы предметнее говорить, и так как вы не можете или не хотите разглашать конкретные примеры продуктов/проектов, вот вам пример ТЗ на рефакторинг готовой системы, рассчитанный на год, находящийся в публичном доступе.

https://dashif.org/docs/Joint-Conformance-Software-InvitationtoBid-V1.01.pdf

Код проекта находится тут https://github.com/Dash-Industry-Forum/DASH-IF-Conformance.

Цели:

3.1 Refactoring
This section describes the refactoring goals at a high level.


3.2.1 Develop the test environment


3.2.2 Code quality metrics


3.2.3 Management structure


3.2.4 Release management


3.2.5 Support documentation


3.2.6 Management reporting


Заметьте: там нет ничего про новый функционал. По сути, это про наведение порядка и подготовку площадки под дальнейшее активное использование.

Срок исполнения: 1 год.

Заказчик весьма крупный: DVB — комитет, занимающийся вопросами разработки, внедрения и регулирования цифрового телевещания по всей Европе.

Это пример реального ТЗ от реального заказчика. Причем это — не разработка нового, то есть это не продукт. Это — проект в рамках продукта.
Патриот здравого смысла
Отредактировано 28.08.2022 9:49 DiPaolo . Предыдущая версия .
Re[3]: Как бы вы делали эту задачу (переходим к конкретике)...
От: Pzz Россия https://github.com/alexpevzner
Дата: 29.08.22 10:12
Оценка: 1 (1) +1
Здравствуйте, Shmj, Вы писали:

Pzz>>С того, что достал бы с полки книжку Кнута, и почитал бы, чего наука говорит про внешнюю сортировку (это именно таким словом называется).

Pzz>>Наука — великая вещь.

S>Т.е. вариант — делать с нуля? И как ты оценишь сколько времени займет?


Вариант — сначала разобраться, что ты делаешь, а потом уже думать, как.
Re[2]: Как бы вы делали эту задачу (переходим к конкретике)...
От: Shmj Ниоткуда  
Дата: 29.08.22 11:36
Оценка: :))
Здравствуйте, no_ise, Вы писали:

_>Если рассматривать задачи как реальные, а не тестовые, то как здесь уже отмечали, вопрос что? обычно предшествует вопросу как?. Продолжая эту линию, уместен вопрос зачем?



Это не ваша работа задавать подобные вопросы. Вам сказали вполне конкретно — отсортировать 100 Гб. на обычном компьютере, примерно 2-2.5 Гб. памяти можно потратить. Критична скорость. Все!

То что вы пытаетесь размазать и переложить ответственность — говорит лишь о некомпетентности.
Re: Как бы вы делали эту задачу (переходим к конкретике)...
От: Gt_  
Дата: 28.08.22 14:46
Оценка: 15 (1)
Я бы для начала попробовал spark, он даже локально распараллелит чтение
Re[3]: Как бы вы делали эту задачу (переходим к конкретике).
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 04.09.22 22:28
Оценка: 4 (1)
Здравствуйте, Shmj, Вы писали:

S>Здравствуйте, gandjustas, Вы писали:


G>>Я немного проанализировал и понял что можно почти все написать с помощью стандартных пакетов.

G>>Вот решение https://github.com/gandjustas/HugeFileSort
G>>Я примерно полчаса поискал библиотеки для megre двух IEnumerable и для min heap и не нащел ничго внятного. Merge написал сам, а вместо min heap использовал стандартный PriorityQueue

S>И сможешь ли сказать честно — сколько времени ушло на все, включая анализ и пр.?

Часа два смотрел видос и читал что люди написали.
Полчаса первый прототип — похоже на итоговое решение
Потом часа три пытался "оптимизировать" не шибко удачно
Потом еще час доводил прототип до текущего состояния
Как бы вы делали эту задачу (переходим к конкретике)...
От: Shmj Ниоткуда  
Дата: 28.08.22 07:29
Оценка: :)
В продолжение темы: https://rsdn.org/forum/job/8342543.flat
Автор: Shmj
Дата: 24.08.22

Многие думают, что главное собрать требования а остальное легко — что требования собрать — это большая часть времени а разработка типа 15%.

Ну ок, чтобы далеко не ходить, давайте популярную задачу, которую уже дважды на днях поднимали:

1. https://rsdn.org/forum/dotnet/8335182.flat
Автор: Shmj
Дата: 14.08.22

2. https://rsdn.org/forum/alg/8340088.flat
Автор: _FRED_
Дата: 21.08.22


Требования собраны, всем все понятно. Только абсурдировать не нужно, понятно что демагогическими приемами все можно свести к абсурду, любая фраза не формальна и не полна. По сути всем все понятно.

Вот мое видение на скорую руку: https://rsdn.org/forum/dotnet/8338266.1
Автор: Shmj
Дата: 18.08.22


Идея такая, что для такой задачи не оптимально писать все с нуля а правильнее найти готовое решение.

Но! Прав ли я? Во-первых, мое решение не доделано — там сортируется сначала по цифре, потом по строке (но это ладно, можно поменять местами). Второе — не учитываются дубликаты (можно прибавить к каждой записи счетчик или задействовать Berkeley DB, вроде там дубликаты разрешены, но это не точно).

Как бы вы это решали? Искали бы сначала готовую библиотеку или же писали бы с нуля?

Ну и как думаете — если мое решение с LevelDB довести до ума — будет ли быстрее чем предложенные самописные решения на сотнях гигабайт данных? Ведь больше 2-3 Гб. никто проверять не хочет, а это размер, который полностью вмещается в ОЗУ. Когда в ОЗУ перестанет влазить — цифры могут быть другими.

Вот я реально не знаю. Нужно только проверять. А проверить с 50 Гб. данных — уже час времени.
Отредактировано 28.08.2022 7:37 Shmj . Предыдущая версия . Еще …
Отредактировано 28.08.2022 7:31 Shmj . Предыдущая версия .
Отредактировано 28.08.2022 7:30 Shmj . Предыдущая версия .
Re: Как бы вы делали эту задачу (переходим к конкретике)...
От: DiPaolo Россия  
Дата: 28.08.22 07:40
Оценка: +1
S>В продолжение темы: https://rsdn.org/forum/job/8342543.flat
Автор: Shmj
Дата: 24.08.22

S>Многие думают, что главное собрать требования а остальное легко — что требования собрать — это большая часть времени а разработка типа 15%.

Ну и смотрите сами:

S>Ну и как думаете — если мое решение с LevelDB довести до ума — будет ли быстрее чем предложенные самописные решения на сотнях гигабайт данных? Ведь больше 2-3 Гб. никто проверять не хочет, а это размер, который полностью вмещается в ОЗУ. Когда в ОЗУ перестанет влазить — цифры могут быть другими.


И потом вы сами пишете:
S>Вот я реально не знаю. Нужно только проверять. А проверить с 50 Гб. данных — уже час времени.

Даже на простом примере вы, кажется, сами показали, что сколько отнимает времени на конкретно этом примере.

И еще раз, в пятый уже, кажется: вы говорите про задачу, одну фичу в рамках продукта. Этих фич в продукте — десятки и сотни. И помимо разработки этих фич нужно эти фичи придумать, продать, обернуть в красивую оболочку, поддерживать, писать документацию...
Патриот здравого смысла
Re[2]: Как бы вы делали эту задачу (переходим к конкретике)...
От: Shmj Ниоткуда  
Дата: 28.08.22 07:46
Оценка: :)
Здравствуйте, DiPaolo, Вы писали:

S>>Вот я реально не знаю. Нужно только проверять. А проверить с 50 Гб. данных — уже час времени.

DP>Даже на простом примере вы, кажется, сами показали, что сколько отнимает времени на конкретно этом примере.

Это время относится к исследованиям.

DP>И еще раз, в пятый уже, кажется: вы говорите про задачу, одну фичу в рамках продукта. Этих фич в продукте — десятки и сотни. И помимо разработки этих фич нужно эти фичи придумать, продать, обернуть в красивую оболочку, поддерживать, писать документацию...


Продать и пр. — я не считаю, это мне не интересно.
Re[3]: Как бы вы делали эту задачу (переходим к конкретике)...
От: DiPaolo Россия  
Дата: 28.08.22 07:53
Оценка: -1
DP>>И еще раз, в пятый уже, кажется: вы говорите про задачу, одну фичу в рамках продукта. Этих фич в продукте — десятки и сотни. И помимо разработки этих фич нужно эти фичи придумать, продать, обернуть в красивую оболочку, поддерживать, писать документацию...

S>Продать и пр. — я не считаю, это мне не интересно.


Я поражаюсь вашей неспособностью или упорному нежеланию слушать собеседников.
Патриот здравого смысла
Re[3]: Как бы вы делали эту задачу (переходим к конкретике)...
От: Dym On Россия  
Дата: 28.08.22 20:09
Оценка: +1
Здравствуйте, Shmj, Вы писали:

DO>>Вообще не важно. Важно чтобы удовлетворяло требованиям.

S>Запустят на среднестатистическом компе с 8 Гб. памяти, половина из которых занято, и выберут самое быстрое решение, которое отработало 100 Гб. данных.
Вот, отсутствуют требования к аппаратному обеспечению, на котором будут проводиться приемо-сдаточные испытания, нет требований по времени, не прописан регламент испытаний. А это все приведет к тому, что заказчики будут мотать вам нервы и шантажировать мотивированными отказами в приемке работ.
Счастье — это Glück!
Re[6]: Как бы вы делали эту задачу (переходим к конкретике)...
От: Shmj Ниоткуда  
Дата: 29.08.22 08:22
Оценка: :)
Здравствуйте, Dym On, Вы писали:

DO>ОК, уже лучше, т.е. ты уже сам понимаешь, насколько важен сбор требований, и что это процесс итерационный.


По-моему вы просто находите отмазки, чтобы не делать работу. И так ясно что спец. железо для этой задачи никто выделять не будет. Среднестатистическое железо и так известно и девиации сильно на алгоритм не повлияют. Загружать сотни гигабайт данных на спец. железо тоже никто не будет — даже на гигабитном канале загрузить/выгрузить 1 Гб. данных — это 16 секунд.

S>>Включаем логику и думаем — никто не будет запускать ваш код на спец. железе.

DO>Не надо ничего включать. Надо просто прописать требования к железу, хотя бы проц/хард/память с указанием частот. Т.е. это тоже входит в процедуру сбора требований, их еще надо согласовать и утвердить.

Есть такая фишка — значение по умолчанию. Благодаря этому не нужно уточнять миллионы нюансов.

S>>Дальше вы можете сколько угодно отлынивать от реальной работы, скрывать свою некомпетентность за умными словами — но выберут того, кто сможет сделать максимально быстрое решение.

DO>Куда выберут? Мы уже работаем по договору. И наша задача уложиться в указанные требования. Всё! Как мы будем в эти требования укладываться — дело техники. Естественно, первый вариант — поиск готового решения.

Похоже что такие как вы — просто будут тратить время на демагогию на совещаниях и планерках, чтобы не делать реальную работу.
Re[7]: Как бы вы делали эту задачу (переходим к конкретике)...
От: fmiracle  
Дата: 29.08.22 10:17
Оценка: +1
Здравствуйте, Shmj, Вы писали:

S>Похоже что такие как вы — просто будут тратить время на демагогию на совещаниях и планерках, чтобы не делать реальную работу.


И это говорит человек, который открыл флуд-тему на форуме на "обсудить", потому что проверка локально будет аж целый час!
Re[8]: Как бы вы делали эту задачу (переходим к конкретике)...
От: Shmj Ниоткуда  
Дата: 29.08.22 15:38
Оценка: :)
Здравствуйте, Dym On, Вы писали:

DO>Здравствуйте, Shmj, Вы писали:


S>>По-моему вы просто находите отмазки, чтобы не делать работу. И так ясно что спец. железо для этой задачи никто выделять не будет. Среднестатистическое железо и так известно и девиации сильно на алгоритм не повлияют. Загружать сотни гигабайт данных на спец. железо тоже никто не будет — даже на гигабитном канале загрузить/выгрузить 1 Гб. данных — это 16 секунд.

DO>Какое спец железо? Причем тут спец железо? Нужно просто зафиксировать требования к железу.

Не нужно. Просто среднестатистическое железо. Откройте поисковик и узнайте средние параметры рабочей станции. От этого алгоритм и решение НИКАК не зависит.
Re[9]: Как бы вы делали эту задачу (переходим к конкретике)...
От: DiPaolo Россия  
Дата: 29.08.22 15:49
Оценка: -1
S>Не нужно. Просто среднестатистическое железо. Откройте поисковик и узнайте средние параметры рабочей станции. От этого алгоритм и решение НИКАК не зависит.

Да не работает это так в реальном мире!

Ну вот вы и получите средне-работающий продукт. Для меня одно средне, для вас — другое. Вы приводили пример с ремонтом. Вот покрасят, например, стены в тошнотворно-зеленый, вы скажете, мол, как так. А вам ответят "я вбил в гугле ремонт цвет стен", там первым такое вылезло. Вы ж сказали "обычным" покрасить.
Патриот здравого смысла
Re[10]: Как бы вы делали эту задачу (переходим к конкретике).
От: Shmj Ниоткуда  
Дата: 05.09.22 08:10
Оценка: :)
Здравствуйте, DiPaolo, Вы писали:

S>>Понял вас.


DP>Нет, не поняли.


Это психологическая защита. Конечно вы не хотите признавать этот механизм, дабы не лишать себя механизма защиты.

Требования изначально были понятны всем. Придраться то можно, но по сути все ясно и многие предоставили готовые решения, которые выполняют данную задачу.
Re[2]: Как бы вы делали эту задачу (переходим к конкретике)...
От: Shmj Ниоткуда  
Дата: 28.08.22 08:01
Оценка:
Здравствуйте, DiPaolo, Вы писали:

DP>Заметьте: там нет ничего про новый функционал. По сути, это про наведение порядка и подготовка площадки под дальнейшее активное использование.


А причем тут сбор требований? Наведение порядка — это как раз и есть имплементация. И это реально сложно и долго.
Re[4]: Как бы вы делали эту задачу (переходим к конкретике)...
От: Shmj Ниоткуда  
Дата: 28.08.22 08:02
Оценка:
Здравствуйте, DiPaolo, Вы писали:

DP>>>И еще раз, в пятый уже, кажется: вы говорите про задачу, одну фичу в рамках продукта. Этих фич в продукте — десятки и сотни. И помимо разработки этих фич нужно эти фичи придумать, продать, обернуть в красивую оболочку, поддерживать, писать документацию...

S>>Продать и пр. — я не считаю, это мне не интересно.
DP>Я поражаюсь вашей неспособностью или упорному нежеланию слушать собеседников.

Речь была о том, что сбор и анализ требований — это основная часть работы. Причем тут продажи и документация?
Re[5]: Как бы вы делали эту задачу (переходим к конкретике)...
От: DiPaolo Россия  
Дата: 28.08.22 08:23
Оценка:
S>Речь была о том, что сбор и анализ требований — это основная часть работы. Причем тут продажи и документация?

Пишу вам в 5й, и уже последний раз. Дальше мне неинтересно общаться с человеком, который не слышит собеседника.

Итак, изначально была тема (https://rsdn.org/forum/shareware/8324184
Автор: Vlad_SP
Дата: 30.07.22
) в разделе Shareware и бизнес. Это раздел, где обсуждают разработку продуктов и их бизнес-составляющие.

Изначальный вопрос ТСа:

Впервые планирую набирать разработчиков на удаленку. Когда человек ходит в офис тут более менее понятно. Как быть с удаленщиками? Может есть готовые схемы, софт и так далее? И в целом насколько по вашему опыту команда в несколько человек из разных городов будет хуже такой же но в офисе?


Ответ от меня:

Удаленка практически ничем в этом смысле не отличается от работы в офисе. При грамотном менеджменте (управлении) все будет тип-топ и вин-вин. Поясню.

[тут пункты]

Ну и еще раз вернусь к своему тезису в другом треде: стоит все же начать с хорошего руководителя/консультанта.


На что ТС просит совета:

Спасибо, интересно. Расскажи пож как ты видишь такого руководителя/консультанта? Какой опыт/стоимость? Фултайм или можно на несколько часов в неделю именно для выстраивания правильных процессов?

Разработчики как я понимаю предполагаются на полном доверии, интересно. Как быть с теми кто на частичной занятости? Изначально каждая задача переводится в часы на этапе планирования? Но тут тоже план от факта может сильно разойтись, в большую сторору разрабочик конечно докажет, в меньшую сомневаюсь. Да и в целом это будет тот еще гемор каждую задачу в часах заранее расписывать.


Тут вступаете вы:

D>Спасибо, интересно. Расскажи пож как ты видишь такого руководителя/консультанта? Какой опыт/стоимость? Фултайм или можно на несколько часов в неделю именно для выстраивания правильных процессов?

Вижу так — даешь конкретный проект с github, когда результат уже есть — и чел. должен сказать сколько времени разработчика определенного уровня заняло написание этого проекта — т.е., по сути, скажет сколько стоит разработка. Назовет сумму.

Если он этого не сможет — то как как сможет оценить то, чего еще нет?

D>Разработчики как я понимаю предполагаются на полном доверии, интересно.

Как разрешать конфликты внутри команды, когда один из разработчиков говорит что второй ничего не делает. Без умения оценить реальную работу — код — ничего не выйдет

D>Изначально каждая задача переводится в часы на этапе планирования?

Нифига не даст. По той причине, что не найдете специалиста, который заранее сможет предвидеть все задачи и как-то понести за это ответственность — как-то деньгами гарантировать, что задач не будет больше (что все учли) и что задачи верно оценены. Т.е. написать план — не проблема. Проблема потом гарантировать его исполнение деньгами, проблема что на этот план согласятся исполнители.

D>Да и в целом это будет тот еще гемор каждую задачу в часах заранее расписывать.

Не геммор а дурная работа.


Дальше вам говорят, что это не только про кодирование. Вы сказали, что ТС спрашивал про кодирование, на что обращают ваше внимание на раздел форума и то, о чем спрашивал ТС.
Патриот здравого смысла
Re[3]: Как бы вы делали эту задачу (переходим к конкретике)...
От: DiPaolo Россия  
Дата: 28.08.22 08:25
Оценка:
S>А причем тут сбор требований? Наведение порядка — это как раз и есть имплементация. И это реально сложно и долго.

http://rsdn.org/forum/job/8345884.1:
Автор: DiPaolo
Дата: 28.08.22

Пишу вам в 5й, и уже последний раз. Дальше мне неинтересно общаться с человеком, который не слышит собеседника.

Патриот здравого смысла
Re[4]: Как бы вы делали эту задачу (переходим к конкретике)...
От: Shmj Ниоткуда  
Дата: 28.08.22 15:03
Оценка:
Здравствуйте, DiPaolo, Вы писали:

DP>

DP>Пишу вам в 5й, и уже последний раз. Дальше мне неинтересно общаться с человеком, который не слышит собеседника.


В той теме вам ответил — здесь обсуждаем другой вопрос — как бы вы решили конкретную задачу. Что-то требования то собрали, а вот как решить — никто сказать не может. Уже 2 недели обсуждаем.
Re[5]: Как бы вы делали эту задачу (переходим к конкретике)...
От: DiPaolo Россия  
Дата: 28.08.22 15:19
Оценка:
S>В той теме вам ответил — здесь обсуждаем другой вопрос — как бы вы решили конкретную задачу. Что-то требования то собрали, а вот как решить — никто сказать не может. Уже 2 недели обсуждаем.

Если нет никаких других требований, то уже в той теме было как минимум 2 решения: от ТСа и от вас. Вот и берем любое. Юзаем. Потому, если вдруг надо будет — оптимизируем. Если изначально было требование по скорости: сразу прикидываем по скорости. Если ни у кого в команде не было очень близкого опыта, чтобы сразу сказать, какое стоит выбрать решение, то создаем специальную задачу на рисерч. Даем ей 3-5 дней на выполнение. На выходе будут несколько рассмотренных вариантов, репорт с цифрами, и уже наброски решения. Потом, исходя из полученных знаний, выбираем окончательное решение и расписываем дальнейшие задачи. После чего делаем финальное решение.

Тут все очень зависит от контекста команды и проекта: какой стек знаний, какой стек CI/CD и прочие подобные вопросы. Одно дело — решить задачу с собеседования, другое — реальная задача в реальном окружении. Это окружение уже задает некоторые рамки, которые также влияют на скорость реализации и принятие решения.
Патриот здравого смысла
Re[6]: Как бы вы делали эту задачу (переходим к конкретике)...
От: DiPaolo Россия  
Дата: 28.08.22 15:28
Оценка:
DP>Если нет никаких других требований, то уже в той теме было как минимум 2 решения: от ТСа и от вас. Вот и берем любое. Юзаем. Потому, если вдруг надо будет — оптимизируем. Если изначально было требование по скорости: сразу прикидываем по скорости. Если ни у кого в команде не было очень близкого опыта, чтобы сразу сказать, какое стоит выбрать решение, то создаем специальную задачу на рисерч. Даем ей 3-5 дней на выполнение. На выходе будут несколько рассмотренных вариантов, репорт с цифрами, и уже наброски решения. Потом, исходя из полученных знаний, выбираем окончательное решение и расписываем дальнейшие задачи. После чего делаем финальное решение.

DP>Тут все очень зависит от контекста команды и проекта: какой стек знаний, какой стек CI/CD и прочие подобные вопросы. Одно дело — решить задачу с собеседования, другое — реальная задача в реальном окружении. Это окружение уже задает некоторые рамки, которые также влияют на скорость реализации и принятие решения.


Дополню: в качестве решения можно элементарно выделить тачку с 128 Гигами РАМа (она может быть в компании) и считать все в памяти. Что еще раз говорит о том, что нужно смотреть на контекст в реальности. А он может быть очень разным. А в другой компании это будет выгоднее считать где-то в кластере облаке.

Еще вопросы, которые я бы задал: насколько часто это нужно делать? На каком железе? Может это надо раз в месяц — можно мощный сервер на это время арендовать (да, тут будет вопрос, как туда сотню гигов закинуть). Может — это надо АРМовом мобильном проце делать на слабой железке, используемой для сетевого сниффера или для НАСа.
Патриот здравого смысла
Re: Как бы вы делали эту задачу (переходим к конкретике)...
От: vsb Казахстан  
Дата: 28.08.22 15:49
Оценка:
Почитал бы про алгоритмы внешней сортировке, выбрал бы оптимальный по скорости работы и реализации, реализовал бы на жава.
Re[2]: Как бы вы делали эту задачу (переходим к конкретике)...
От: Shmj Ниоткуда  
Дата: 28.08.22 19:11
Оценка:
Здравствуйте, vsb, Вы писали:

vsb>Почитал бы про алгоритмы внешней сортировке, выбрал бы оптимальный по скорости работы и реализации, реализовал бы на жава.


Почему не применить уже готовое решение, на которое у другого разработчика с зарплатой 200 тыс. долларов в год ушло много месяцев работы? Считаешь что ты умнее?
Re[3]: Как бы вы делали эту задачу (переходим к конкретике).
От: vsb Казахстан  
Дата: 28.08.22 19:17
Оценка:
Здравствуйте, Shmj, Вы писали:

vsb>>Почитал бы про алгоритмы внешней сортировке, выбрал бы оптимальный по скорости работы и реализации, реализовал бы на жава.


S>Почему не применить уже готовое решение, на которое у другого разработчика с зарплатой 200 тыс. долларов в год ушло много месяцев работы? Считаешь что ты умнее?


В целом да, я очень редко встречаю код, которым бы я восхищался. Не знаю, умней ли я, или просто у того разработчика были задачи/требования, отличающиеся от моих (более вероятно). Но в целом я редко надеюсь найти подходящий для меня код. Вот недавно искал bloom filter для JS. Посмотрел несколько реализаций — все отстойные. Написал свою, мне она нравится, работает, ничего лишнего не делает, потратил пару часов, получил немножко фана, выучил 2 алгоритма, ну и нормально. Можешь поглумиться над велосипедистом: murmur332.js, BloomFilter.js
Отредактировано 28.08.2022 19:22 vsb . Предыдущая версия . Еще …
Отредактировано 28.08.2022 19:22 vsb . Предыдущая версия .
Re[7]: Как бы вы делали эту задачу (переходим к конкретике)...
От: Shmj Ниоткуда  
Дата: 28.08.22 19:18
Оценка:
Здравствуйте, DiPaolo, Вы писали:

DP>Еще вопросы, которые я бы задал: насколько часто это нужно делать? На каком железе? Может это надо раз в месяц — можно мощный сервер на это время арендовать (да, тут будет вопрос, как туда сотню гигов закинуть). Может — это надо АРМовом мобильном проце делать на слабой железке, используемой для сетевого сниффера или для НАСа.


Всем кроме вас задача ясна. Вы пытаетесь размазать истину и вместо предложения решения — занимаетесь демагогией.

Понятно что по умолчанию мы подразумеваем не очень мощный среднестатистический компьютер, а не спец. железо.

Вместо того, чтобы подобрать хорошее решение — никто не будет закачивать файл по 100 Гб, потом скачивать обратно.
Re: Как бы вы делали эту задачу (переходим к конкретике)...
От: Dym On Россия  
Дата: 28.08.22 19:50
Оценка:
Здравствуйте, Shmj, Вы писали:

S>Ну ок, чтобы далеко не ходить, давайте популярную задачу, которую уже дважды на днях поднимали:

Чего за задача-то? Видео не смотрел и не буду.

S>Требования собраны, всем все понятно.

Хотелось бы их увидеть (в текстовом варианте, Кирилл и Мефодий даровали нам письменность).

S>Идея такая, что для такой задачи не оптимально писать все с нуля а правильнее найти готовое решение.

Идея правильная.

S>Как бы вы это решали? Искали бы сначала готовую библиотеку или же писали бы с нуля?

Мммм, надо смотреть требования.

S>Ну и как думаете — если мое решение с LevelDB довести до ума — будет ли быстрее чем предложенные самописные решения на сотнях гигабайт данных? Ведь больше 2-3 Гб. никто проверять не хочет, а это размер, который полностью вмещается в ОЗУ. Когда в ОЗУ перестанет влазить — цифры могут быть другими.

Вообще не важно. Важно чтобы удовлетворяло требованиям.
Счастье — это Glück!
Re[2]: Как бы вы делали эту задачу (переходим к конкретике)...
От: Shmj Ниоткуда  
Дата: 28.08.22 19:57
Оценка:
Здравствуйте, Dym On, Вы писали:

S>>Ну ок, чтобы далеко не ходить, давайте популярную задачу, которую уже дважды на днях поднимали:

DO>Чего за задача-то? Видео не смотрел и не буду.

Вторая ссылка — там чел. привел под катом в текстовом виде.


S>>Ну и как думаете — если мое решение с LevelDB довести до ума — будет ли быстрее чем предложенные самописные решения на сотнях гигабайт данных? Ведь больше 2-3 Гб. никто проверять не хочет, а это размер, который полностью вмещается в ОЗУ. Когда в ОЗУ перестанет влазить — цифры могут быть другими.

DO>Вообще не важно. Важно чтобы удовлетворяло требованиям.

Запустят на среднестатистическом компе с 8 Гб. памяти, половина из которых занято, и выберут самое быстрое решение, которое отработало 100 Гб. данных.
Re[4]: Как бы вы делали эту задачу (переходим к конкретике)...
От: Shmj Ниоткуда  
Дата: 28.08.22 20:40
Оценка:
Здравствуйте, Dym On, Вы писали:

DO>>>Вообще не важно. Важно чтобы удовлетворяло требованиям.

S>>Запустят на среднестатистическом компе с 8 Гб. памяти, половина из которых занято, и выберут самое быстрое решение, которое отработало 100 Гб. данных.
DO>Вот, отсутствуют требования к аппаратному обеспечению, на котором будут проводиться приемо-сдаточные испытания, нет требований по времени, не прописан регламент испытаний. А это все приведет к тому, что заказчики будут мотать вам нервы и шантажировать мотивированными отказами в приемке работ.

Чел. переспросил — немного уточнили:

Как ориентир по времени — 10Гб файл генерируется около 2,5 минут, сортируется — 9 (кстати, это не самое быстрое решение).
Дополнительный ориентир — при сортировке 1Гб используется 2-2,5 Гб памяти.


Включаем логику и думаем — никто не будет запускать ваш код на спец. железе.

Дальше вы можете сколько угодно отлынивать от реальной работы, скрывать свою некомпетентность за умными словами — но выберут того, кто сможет сделать максимально быстрое решение.
Re[5]: Как бы вы делали эту задачу (переходим к конкретике)...
От: Dym On Россия  
Дата: 28.08.22 20:54
Оценка:
Здравствуйте, Shmj, Вы писали:

S>Чел. переспросил — немного уточнили:

S>

S> Как ориентир по времени — 10Гб файл генерируется около 2,5 минут, сортируется — 9 (кстати, это не самое быстрое решение).
S> Дополнительный ориентир — при сортировке 1Гб используется 2-2,5 Гб памяти.

ОК, уже лучше, т.е. ты уже сам понимаешь, насколько важен сбор требований, и что это процесс итерационный.

S>Включаем логику и думаем — никто не будет запускать ваш код на спец. железе.

Не надо ничего включать. Надо просто прописать требования к железу, хотя бы проц/хард/память с указанием частот. Т.е. это тоже входит в процедуру сбора требований, их еще надо согласовать и утвердить.

S>Дальше вы можете сколько угодно отлынивать от реальной работы, скрывать свою некомпетентность за умными словами — но выберут того, кто сможет сделать максимально быстрое решение.

Куда выберут? Мы уже работаем по договору. И наша задача уложиться в указанные требования. Всё! Как мы будем в эти требования укладываться — дело техники. Естественно, первый вариант — поиск готового решения.
Счастье — это Glück!
Re: Как бы вы делали эту задачу (переходим к конкретике)...
От: Pzz Россия https://github.com/alexpevzner
Дата: 29.08.22 01:02
Оценка:
Здравствуйте, Shmj, Вы писали:

S>Как бы вы это решали? Искали бы сначала готовую библиотеку или же писали бы с нуля?


С того, что достал бы с полки книжку Кнута, и почитал бы, чего наука говорит про внешнюю сортировку (это именно таким словом называется).

Наука — великая вещь.
Re[2]: Как бы вы делали эту задачу (переходим к конкретике)...
От: Shmj Ниоткуда  
Дата: 29.08.22 08:22
Оценка:
Здравствуйте, Pzz, Вы писали:

Pzz>С того, что достал бы с полки книжку Кнута, и почитал бы, чего наука говорит про внешнюю сортировку (это именно таким словом называется).

Pzz>Наука — великая вещь.

Т.е. вариант — делать с нуля? И как ты оценишь сколько времени займет?
Re[7]: Как бы вы делали эту задачу (переходим к конкретике)...
От: DiPaolo Россия  
Дата: 29.08.22 10:37
Оценка:
S>По-моему вы просто находите отмазки, чтобы не делать работу. И так ясно что спец. железо для этой задачи никто выделять не будет. Среднестатистическое железо и так известно и девиации сильно на алгоритм не повлияют. Загружать сотни гигабайт данных на спец. железо тоже никто не будет — даже на гигабитном канале загрузить/выгрузить 1 Гб. данных — это 16 секунд.

Гоняют еще как. Есть т.н. стандарт 24G-SDI (https://en.wikipedia.org/wiki/Serial_digital_interface) со скоростью 24 Гбит/с. Как раз чтобы гонять большие объемы данных.
Патриот здравого смысла
Re: Как бы вы делали эту задачу (переходим к конкретике)...
От: no_ise  
Дата: 29.08.22 10:56
Оценка:
Здравствуйте, Shmj, Вы писали:

S>В продолжение темы: https://rsdn.org/forum/job/8342543.flat
Автор: Shmj
Дата: 24.08.22

S>Многие думают, что главное собрать требования а остальное легко — что требования собрать — это большая часть времени а разработка типа 15%.

S>Ну ок, чтобы далеко не ходить, давайте популярную задачу, которую уже дважды на днях поднимали:


S>1. https://rsdn.org/forum/dotnet/8335182.flat
Автор: Shmj
Дата: 14.08.22

S>2. https://rsdn.org/forum/alg/8340088.flat
Автор: _FRED_
Дата: 21.08.22


S>Требования собраны, всем все понятно. Только абсурдировать не нужно, понятно что демагогическими приемами все можно свести к абсурду, любая фраза не формальна и не полна. По сути всем все понятно.


S>Вот мое видение на скорую руку: https://rsdn.org/forum/dotnet/8338266.1
Автор: Shmj
Дата: 18.08.22


S>Идея такая, что для такой задачи не оптимально писать все с нуля а правильнее найти готовое решение...


Наверно можно заметить, что линки это тестовые задачи, поэтому приведенное виденье на скорую руку может являться
окончательным правильным ответом. Кстати, говорят проводились какие-то исследования и написаны книжки типа крэкин кодин интервью (не читал).

Если рассматривать задачи как реальные, а не тестовые, то как здесь уже отмечали, вопрос что? обычно предшествует вопросу как?. Продолжая эту линию, уместен вопрос зачем?
Re[7]: Как бы вы делали эту задачу (переходим к конкретике)...
От: Dym On Россия  
Дата: 29.08.22 13:40
Оценка:
Здравствуйте, Shmj, Вы писали:

S>По-моему вы просто находите отмазки, чтобы не делать работу. И так ясно что спец. железо для этой задачи никто выделять не будет. Среднестатистическое железо и так известно и девиации сильно на алгоритм не повлияют. Загружать сотни гигабайт данных на спец. железо тоже никто не будет — даже на гигабитном канале загрузить/выгрузить 1 Гб. данных — это 16 секунд.

Какое спец железо? Причем тут спец железо? Нужно просто зафиксировать требования к железу.

S>Есть такая фишка — значение по умолчанию. Благодаря этому не нужно уточнять миллионы нюансов.

Нет таких фишек. В арбитражном суде ничего не знают про какие-то фишки.

S>Похоже что такие как вы — просто будут тратить время на демагогию на совещаниях и планерках, чтобы не делать реальную работу.

Коллега, ты когда-нибудь собирал требования к системе? Когда-нибудь писал ТЗ? Расширенное ТЗ? Сдавал систему в опытную, в промку? Пока складывается впечатление, что кроме кодинга микрозадач, которые кто-то услужливо и дотошно расписал в трекере, ты ничем не занимался.
Счастье — это Glück!
Re[3]: Как бы вы делали эту задачу (переходим к конкретике)...
От: no_ise  
Дата: 29.08.22 15:33
Оценка:
Здравствуйте, Shmj, Вы писали:

S>Здравствуйте, no_ise, Вы писали:


_>>Если рассматривать задачи как реальные, а не тестовые, то как здесь уже отмечали, вопрос что? обычно предшествует вопросу как?. Продолжая эту линию, уместен вопрос зачем?



S>Это не ваша работа задавать подобные вопросы. Вам сказали вполне конкретно — отсортировать 100 Гб. на обычном компьютере, примерно 2-2.5 Гб. памяти можно потратить. Критична скорость. Все!

Спасибо за ответ. Если мне будет нужно сортировать 100 Гб. на обычном компьютере, я наверно буду уже знать зачем мне это нужно.

S>То что вы пытаетесь размазать и переложить ответственность — говорит лишь о некомпетентности.

Во всем компетентен не будешь, но в целом разговор надеюсь идет на пользу.
Re: Как бы вы делали эту задачу (переходим к конкретике)...
От: AmSpb  
Дата: 29.08.22 15:44
Оценка:
Здравствуйте, Shmj, Вы писали:

Specification by example (SBE) is a collaborative approach to defining requirements and business-oriented functional tests for software products based on capturing and illustrating requirements using realistic examples instead of abstract statements. It is applied in the context of agile software development methods, in particular behavior-driven development. This approach is particularly successful for managing requirements and functional tests on large-scale projects of significant domain and organisational complexity.[1]

https://en.wikipedia.org/wiki/Specification_by_example
Re[4]: Как бы вы делали эту задачу (переходим к конкретике)...
От: AmSpb  
Дата: 29.08.22 15:47
Оценка:
Здравствуйте, Pzz, Вы писали:

S>>Т.е. вариант — делать с нуля? И как ты оценишь сколько времени займет?


Pzz>Вариант — сначала разобраться, что ты делаешь, а потом уже думать, как.


А самое первое, зачем ты это делаешь. Т.е. целесообразность, как по мне, должна быть на самом приоритетном месте.
Re[8]: Как бы вы делали эту задачу (переходим к конкретике)...
От: Shmj Ниоткуда  
Дата: 29.08.22 15:48
Оценка:
Здравствуйте, Dym On, Вы писали:

S>>Похоже что такие как вы — просто будут тратить время на демагогию на совещаниях и планерках, чтобы не делать реальную работу.

DO>Коллега, ты когда-нибудь собирал требования к системе? Когда-нибудь писал ТЗ? Расширенное ТЗ? Сдавал систему в опытную, в промку? Пока складывается впечатление, что кроме кодинга микрозадач, которые кто-то услужливо и дотошно расписал в трекере, ты ничем не занимался.

Не составлял. Но всегда, когда мне их давали — по итогу завершения проекта ничего не оставалось от оригинальных требований — все понимали, что это была дурная работа. Я всегда предлагаю как сделать лучше и в 90% случаев все согласны, что так действительно лучше — а на этапе составления требований и подумать об этом не могли, т.к. работали со сферическим конем в вакууме и не погружались настолько глубоко в предметную область, как это делает исполнитель.

И основное время уходит не на это — это я делаю за между прочим бесплатно. Основное время — на поиск решений.
Re[10]: Как бы вы делали эту задачу (переходим к конкретике)...
От: Shmj Ниоткуда  
Дата: 29.08.22 16:03
Оценка:
Здравствуйте, DiPaolo, Вы писали:

DP>Ну вот вы и получите средне-работающий продукт. Для меня одно средне, для вас — другое.


Тебе требования по памяти сказали — до 2-2.5 Гиг. Процессор считай что самый обычный десктопный.

Скажу что от процессора тут мало что зависит — основные тормоза — это диск. Сравнивать решения будут на одном и том же компе.

Если напишешь самое быстрое — тебе поднимут зарплату в 2 раза и назначат на крутой проект.
Re[5]: Как бы вы делали эту задачу (переходим к конкретике)...
От: Pzz Россия https://github.com/alexpevzner
Дата: 29.08.22 16:06
Оценка:
Здравствуйте, AmSpb, Вы писали:

S>>>Т.е. вариант — делать с нуля? И как ты оценишь сколько времени займет?


Pzz>>Вариант — сначала разобраться, что ты делаешь, а потом уже думать, как.


AS>А самое первое, зачем ты это делаешь. Т.е. целесообразность, как по мне, должна быть на самом приоритетном месте.


Зачем — понятно. Ему такое на собеседовании дали. Затем, чтобы понравиться собеседующим и получить работу мечты.
Re[6]: Как бы вы делали эту задачу (переходим к конкретике)...
От: Shmj Ниоткуда  
Дата: 29.08.22 16:09
Оценка:
Здравствуйте, Pzz, Вы писали:

AS>>А самое первое, зачем ты это делаешь. Т.е. целесообразность, как по мне, должна быть на самом приоритетном месте.

Pzz>Зачем — понятно. Ему такое на собеседовании дали. Затем, чтобы понравиться собеседующим и получить работу мечты.

Сценариев может быть масса. Задание самое обычное. От конкретного сценария решение не зависит.
Re[7]: Как бы вы делали эту задачу (переходим к конкретике)...
От: Pzz Россия https://github.com/alexpevzner
Дата: 29.08.22 16:12
Оценка:
Здравствуйте, Shmj, Вы писали:

AS>>>А самое первое, зачем ты это делаешь. Т.е. целесообразность, как по мне, должна быть на самом приоритетном месте.

Pzz>>Зачем — понятно. Ему такое на собеседовании дали. Затем, чтобы понравиться собеседующим и получить работу мечты.

S>Сценариев может быть масса. Задание самое обычное. От конкретного сценария решение не зависит.


У нас, в Касперском, никому никаких тестовых заданиев не дают. Уважают время кандидата и не считают себя вправе награждать незнакомого человека куском бесплатной и бесполезной работы.

Между прочим, отобранный коллектив очень хороший и сильный.
Re[11]: Как бы вы делали эту задачу (переходим к конкретике)...
От: DiPaolo Россия  
Дата: 29.08.22 16:36
Оценка:
S>Если напишешь самое быстрое — тебе поднимут зарплату в 2 раза и назначат на крутой проект.

... вы продолжаете все дальше натягивать сову на глобус. В реальном мире никто так не делает.

А уж про крутой проект ваще смешно. Вспоминается ваше (не дословно) "тут на форуме никому не светит делать крутые вещи. Мы тут все всякими простыми проектами занимаемся. А вот элита уже пишет что-то прорывное".

Скажу так: если человек решает задачи типа обсуждаемой здесь — он уже 99% на крутом проекте. А поднимать зп "самому быстрому" программисту в 2 раза — нонсенс. Мы ж не в первом классе, чтобы звездочку нарисовали тому, кто первый пример решит.
Патриот здравого смысла
Re[11]: Как бы вы делали эту задачу (переходим к конкретике)...
От: Dym On Россия  
Дата: 29.08.22 18:18
Оценка:
Здравствуйте, Shmj, Вы писали:

S>Тебе требования по памяти сказали — до 2-2.5 Гиг.

Отлично, фиксируем: ОЗУ не менее 2 ГБ. Хотя бы так, но я бы обязательно прописал частоту и тайминги.

S>Процессор считай что самый обычнынй десктопный.

Что такое "самый обычный процессор"?

S>Скажу что от процессора тут мало что зависит — основные тормоза — это диск. Сравнивать решения будут на одном и том же компе.

На каком компе? Диск какой? HDD 5400 или SSD? А SSD какой?

S>Если напишешь самое быстрое — тебе поднимут зарплату в 2 раза и назначат на крутой проект.

Какой крутой проект, какая зарплата? Ты рассуждаешь как рядовой кодер, первое звено в пищевой цепочке. Речь идет о том, заплатит ли заказчик вообще, и заплатит ли ту сумму которая оговорена в договоре. А заказчик платит только тогда, когда удовлетворены все требования ТЗ и это не возможно оспорить.
Счастье — это Glück!
Re[12]: Как бы вы делали эту задачу (переходим к конкретике)...
От: Shmj Ниоткуда  
Дата: 29.08.22 19:16
Оценка:
Здравствуйте, Dym On, Вы писали:

DO>Что такое "самый обычный процессор"?

DO>На каком компе? Диск какой? HDD 5400 или SSD? А SSD какой?

Перед московской олимпиадой продавцам запретили говорить "нет" покупателям.

В универмаге женщина просит перчатки.
— Вам какие? Кожаные? Шерстяные? Замшевые?
— Шерстяные, пожалуйста.
— Светлые? Темные?
— Темные.
— Длинные? Короткие?
— Короткие, если можно.
— Знаете что, принесите нам показать ваше пальто, и мы сами для вас подберем к нему перчатки.
— Не верьте им! — встревает другой покупатель.
— Я им свой унитаз приволок, зад показал, а туалетной бумаги все равно не получил!

Re[7]: Как бы вы делали эту задачу (переходим к конкретике)...
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 29.08.22 19:22
Оценка:
Здравствуйте, Shmj, Вы писали:

S>Есть такая фишка — значение по умолчанию. Благодаря этому не нужно уточнять миллионы нюансов.


Есть такая фишка, которая выясняется в процессе сдачи работы. Она заключается в том, что значения по умолчанию у сдающего и принимающего могут кардинально различаться


S>Похоже что такие как вы — просто будут тратить время на демагогию на совещаниях и планерках, чтобы не делать реальную работу.


Похоже, что вы не работали нормальную работу
Маньяк Робокряк колесит по городу
Re: Как бы вы делали эту задачу (переходим к конкретике)...
От: AleksandrN Россия  
Дата: 29.08.22 20:59
Оценка:
Здравствуйте, Shmj, Вы писали:

S>Ну ок, чтобы далеко не ходить, давайте популярную задачу, которую уже дважды на днях поднимали:


S>1. https://rsdn.org/forum/dotnet/8335182.flat
Автор: Shmj
Дата: 14.08.22

S>2. https://rsdn.org/forum/alg/8340088.flat
Автор: _FRED_
Дата: 21.08.22


S>Требования собраны, всем все понятно. Только абсурдировать не нужно, понятно что демагогическими приемами все можно свести к абсурду, любая фраза не формальна и не полна. По сути всем все понятно.


Если такое задание возникнет при разработке программного продукта, то хорошо бы понимать, что за данные в файле, откуда он взялся и что с ним дальше делать надо. Единственное, что приходит в голову — лог, в который пишется из нескольких потоков и потому, некоторые отметки времени могут быть перепутаны. Тогда нужно искать участки, с нарушением порядка и сортировать только их. И сравнивать не всю строку, а только время.

S>Идея такая, что для такой задачи не оптимально писать все с нуля а правильнее найти готовое решение.


И возникает вопрос, как часто нужно сортировать такие файлы и насколько критично время сортировки. Скорее всего окажется, что не нужно изобретать велосипед, а нужно взять готовое решение — утилиту sort (в windows тоже есть).
Re[9]: Как бы вы делали эту задачу (переходим к конкретике)...
От: AleksandrN Россия  
Дата: 29.08.22 21:39
Оценка:
Здравствуйте, Shmj, Вы писали:

S>Не составлял. Но всегда, когда мне их давали — по итогу завершения проекта ничего не оставалось от оригинальных требований — все понимали, что это была дурная работа. Я всегда предлагаю как сделать лучше и в 90% случаев все согласны, что так действительно лучше — а на этапе составления требований и подумать об этом не могли, т.к. работали со сферическим конем в вакууме и не погружались настолько глубоко в предметную область, как это делает исполнитель.


Значит сбором требований занимался плохой аналитик. А хороший аналитик — специалист редкий и дорогой.
Но если бы требований не было бы вообще, на основе чего ты бы предлагал, как сделать лучше?

S>И основное время уходит не на это — это я делаю за между прочим бесплатно.


На сколько человеко-часов проект, сколько разработчиков в нём участвовало и как потом сопровождалось ПО?
Re[8]: Как бы вы делали эту задачу (переходим к конкретике)...
От: Shmj Ниоткуда  
Дата: 30.08.22 10:15
Оценка:
Здравствуйте, Pzz, Вы писали:

Pzz>У нас, в Касперском, никому никаких тестовых заданиев не дают. Уважают время кандидата и не считают себя вправе награждать незнакомого человека куском бесплатной и бесполезной работы.

Pzz>Между прочим, отобранный коллектив очень хороший и сильный.

Тестовые задания бывают и оплачиваемы. За сколько денег бы вы взялись?
Re[12]: Как бы вы делали эту задачу (переходим к конкретике)...
От: Shmj Ниоткуда  
Дата: 30.08.22 10:24
Оценка:
Здравствуйте, Dym On, Вы писали:

S>>Тебе требования по памяти сказали — до 2-2.5 Гиг.

DO>Отлично, фиксируем: ОЗУ не менее 2 ГБ. Хотя бы так, но я бы обязательно прописал частоту и тайминги.

А как твой алгоритм будет от этого зависеть?

S>>Процессор считай что самый обычнынй десктопный.

DO>Что такое "самый обычный процессор"?

Примерно 4 ядра. Как это повлияет на алгоритм?

S>>Скажу что от процессора тут мало что зависит — основные тормоза — это диск. Сравнивать решения будут на одном и том же компе.

DO>На каком компе? Диск какой? HDD 5400 или SSD? А SSD какой?

Какая разница какой SSD? Будет запускаться на разных дисках.

S>>Если напишешь самое быстрое — тебе поднимут зарплату в 2 раза и назначат на крутой проект.

DO>Какой крутой проект, какая зарплата? Ты рассуждаешь как рядовой кодер, первое звено в пищевой цепочке. Речь идет о том, заплатит ли заказчик вообще, и заплатит ли ту сумму которая оговорена в договоре. А заказчик платит только тогда, когда удовлетворены все требования ТЗ и это не возможно оспорить.

Т.е. вы сразу готовы бодаться с заказчиком и в судах отстаивать что было выполнено все по Т.З.?

А если заказчик сам не до конца понимает как сделать лучше? И хочет чтобы вы были его другом, подсказали оптимальный вариант.
Re[8]: Как бы вы делали эту задачу (переходим к конкретике)...
От: Shmj Ниоткуда  
Дата: 30.08.22 10:25
Оценка:
Здравствуйте, Marty, Вы писали:

S>>Есть такая фишка — значение по умолчанию. Благодаря этому не нужно уточнять миллионы нюансов.

M>Есть такая фишка, которая выясняется в процессе сдачи работы. Она заключается в том, что значения по умолчанию у сдающего и принимающего могут кардинально различаться

На пример что в обсуждаемой задаче?
Re[2]: Как бы вы делали эту задачу (переходим к конкретике)...
От: Shmj Ниоткуда  
Дата: 30.08.22 10:31
Оценка:
Здравствуйте, AleksandrN, Вы писали:

AN>Если такое задание возникнет при разработке программного продукта, то хорошо бы понимать, что за данные в файле, откуда он взялся и что с ним дальше делать надо. Единственное, что приходит в голову — лог, в который пишется из нескольких потоков и потому, некоторые отметки времени могут быть перепутаны. Тогда нужно искать участки, с нарушением порядка и сортировать только их. И сравнивать не всю строку, а только время.


Почему же единственное? А мне первое что пришло в голову — криптовалютные адреса и суммы поступлений на адрес. Сортируешь и быстро узнаешь баланс на любом запрашиваемом адресе. По размеру как раз будет несколько сотен гигабайт.

Можно держать старые данные в таком вот файле и находить быстро бинарным поиском. А оперативные данные за день-два — держать в ОЗУ в виде хеш-таблицы. Раз в день схлопывать.

S>>Идея такая, что для такой задачи не оптимально писать все с нуля а правильнее найти готовое решение.


AN>И возникает вопрос, как часто нужно сортировать такие файлы и насколько критично время сортировки. Скорее всего окажется, что не нужно изобретать велосипед, а нужно взять готовое решение — утилиту sort (в windows тоже есть).


Уже писали вам — время критично. Сколько по времени отработает эта утилита на 100 Гб данных?
Re[10]: Как бы вы делали эту задачу (переходим к конкретике)...
От: Shmj Ниоткуда  
Дата: 30.08.22 10:35
Оценка:
Здравствуйте, AleksandrN, Вы писали:

AN>Значит сбором требований занимался плохой аналитик. А хороший аналитик — специалист редкий и дорогой.

AN>Но если бы требований не было бы вообще, на основе чего ты бы предлагал, как сделать лучше?

Да вопрос не в том нужны те требования или нет. Вопрос в том — какой процент от трудовых затрат их собрать.
Re[9]: Как бы вы делали эту задачу (переходим к конкретике)...
От: Pzz Россия https://github.com/alexpevzner
Дата: 30.08.22 10:42
Оценка:
Здравствуйте, Shmj, Вы писали:

S>Тестовые задания бывают и оплачиваемы. За сколько денег бы вы взялись?


Ни за сколько. Я сейчас не ищу дополнительного дохода.
Re[8]: Как бы вы делали эту задачу (переходим к конкретике)...
От: AmSpb  
Дата: 30.08.22 11:21
Оценка:
Здравствуйте, Pzz, Вы писали:

Pzz>Здравствуйте, Shmj, Вы писали:


AS>>>>А самое первое, зачем ты это делаешь. Т.е. целесообразность, как по мне, должна быть на самом приоритетном месте.

Pzz>>>Зачем — понятно. Ему такое на собеседовании дали. Затем, чтобы понравиться собеседующим и получить работу мечты.

S>>Сценариев может быть масса. Задание самое обычное. От конкретного сценария решение не зависит.


Pzz>У нас, в Касперском, никому никаких тестовых заданиев не дают. Уважают время кандидата и не считают себя вправе награждать незнакомого человека куском бесплатной и бесполезной работы.


Pzz>Между прочим, отобранный коллектив очень хороший и сильный.



Сотрудники Kaspersky сообщили о предложении уволиться на просьбы о переезде из России

Сотрудники «Лаборатории Касперского» рассказали, что IT-компания предложила уволиться тем, кто хотел уехать в другие страны после начала «спецоперации». Компания заявила Forbes, что в вопросах релокации сотрудников «в первую очередь руководствуется бизнес-необходимостью»

По словам одного из них, сотрудники задали вопрос о релокации на общем собрании, состоявшемся через несколько дней после начала «спецоперации», и в ответ гендиректор компании Евгений Касперский сказал: «Если капитан остается на корабле, то команда должна оставаться на корабле независимо от погоды». Еще один бывший сотрудник «Касперского» подтвердил, что глава компании ответил так.

В «Лаборатории Касперского» работают 4000 сотрудников, офисы компании расположены в том числе в Дубае, Стамбуле, Лондоне, следует из информации на сайте компании.


Чувствуется гебешная закалка.
Re[9]: Как бы вы делали эту задачу (переходим к конкретике)...
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 30.08.22 12:16
Оценка:
Здравствуйте, Shmj, Вы писали:

S>>>Есть такая фишка — значение по умолчанию. Благодаря этому не нужно уточнять миллионы нюансов.

M>>Есть такая фишка, которая выясняется в процессе сдачи работы. Она заключается в том, что значения по умолчанию у сдающего и принимающего могут кардинально различаться

S>На пример что в обсуждаемой задаче?


Например, "скорость" работы "среднего" ПК
Маньяк Робокряк колесит по городу
Re[10]: Как бы вы делали эту задачу (переходим к конкретике)...
От: Shmj Ниоткуда  
Дата: 30.08.22 12:58
Оценка:
Здравствуйте, Marty, Вы писали:

M>Например, "скорость" работы "среднего" ПК


Так решения от разных разработчиков будут сравниваться на одном и том же ПК. Так что разницы особой не будет. Все равно там будет несколько ядер а не одно, если речь о возможности параллелить. Или хотите захардкодить количество ядер?
Re[11]: Как бы вы делали эту задачу (переходим к конкретике)...
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 30.08.22 13:13
Оценка:
Здравствуйте, Shmj, Вы писали:

M>>Например, "скорость" работы "среднего" ПК


S>Так решения от разных разработчиков будут сравниваться на одном и том же ПК. Так что разницы особой не будет. Все равно там будет несколько ядер а не одно, если речь о возможности параллелить. Или хотите захардкодить количество ядер?


Уже обнаружились и какие-то различные разработчики
Маньяк Робокряк колесит по городу
Re: Как бы вы делали эту задачу (переходим к конкретике)...
От: Gt_  
Дата: 30.08.22 13:36
Оценка:
ну нафлеймили. очевидно же что это задание на знание map-reduce парадигмы и про параллельность. совершенно типичная задача на позиции Data Engineering. правда обычно все же устно просят рассказать и бывает ждут что расскажут про многоблочное чтение (readFileScattered из winapi).
Re[11]: Как бы вы делали эту задачу (переходим к конкретике)...
От: DiPaolo Россия  
Дата: 30.08.22 13:43
Оценка:
S>Так решения от разных разработчиков будут сравниваться на одном и том же ПК. Так что разницы особой не будет. Все равно там будет несколько ядер а не одно, если речь о возможности параллелить. Или хотите захардкодить количество ядер?

Вот видите, уже вырисовывается другая задача: не просто реализовать, не реализовать "за приемлемое время", а выиграть конкурс по скорости.

Я опять-таки попробую снять сову с глобуса и вернуться к реальным задачам.

МГУ каждый год уже лет 20 проводит сравнение лучших в мире видео-кодеков (http://www.compression.ru/video/codec_comparison/index_en.html). Так вот, помимо постоянной круглогодичной оптимизации, за пару месяцев до отправки своего кодека команда начинает специально готовиться к этому: прогонять тесты, тюнить настройки, все перепроверять. А порой и за полгода начинает работает над ускорением. Не один человек, не два вечера. А, условно, пол-команды. Для того, чтобы быть быстрее по скорости-качеству.

Понимаете? Потому что задача такая перед продуктом на это время стоит: подготовить бинарники и конфиги к ним с наиболее оптимизированными настройками. А в другое время могут стоять другие задачи. А в других продуктах может стоять задача — лишь бы работало, неважно какая скорость.

Вот это все и лежит в плоскости сбора и определения требований.
Патриот здравого смысла
Re[3]: Как бы вы делали эту задачу (переходим к конкретике)...
От: DiPaolo Россия  
Дата: 30.08.22 13:47
Оценка:
S>Почему же единственное? А мне первое что пришло в голову — криптовалютные адреса и суммы поступлений на адрес. Сортируешь и быстро узнаешь баланс на любом запрашиваемом адресе. По размеру как раз будет несколько сотен гигабайт.

Вооооот... А если подойти с умом и сначала все узнать, то можно для оптимизации не держать все в строках вида '<number>. <string>', а придумать сразу, как более оптимально это хранить. Важен контекст. Важно не просто "отсортировать это", а выяснить, что за данные, откуда берутся, сколько их будет, как часто их надо сортировать. Это все и есть поиск. И может случиться так, что эффективнее будет в экселе это раз в квартал руками делать, чем отдавать вам на 2 месяца писать супер-пупер быстрый алгоритм в вакууме, чтобы потешить свое программерское самолюбие.

S>Уже писали вам — время критично. Сколько по времени отработает эта утилита на 100 Гб данных?


Да проверьте уже сами. Который день пишете о том, что надо проверить. Уже бы давно проверили, раз вас эта тема так не отпускает.
Патриот здравого смысла
Re[2]: Как бы вы делали эту задачу (переходим к конкретике)...
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 30.08.22 13:52
Оценка:
Здравствуйте, Gt_, Вы писали:

Gt_>ну нафлеймили. очевидно же что это задание на знание map-reduce парадигмы и про параллельность. совершенно типичная задача на позиции Data Engineering. правда обычно все же устно просят рассказать и бывает ждут что расскажут про многоблочное чтение (readFileScattered из winapi).


А чем эта функция отличается от обычного ReadFile в асинхронном режиме?
Маньяк Робокряк колесит по городу
Re[3]: Как бы вы делали эту задачу (переходим к конкретике).
От: Gt_  
Дата: 30.08.22 14:02
Оценка:
Gt_>>ну нафлеймили. очевидно же что это задание на знание map-reduce парадигмы и про параллельность. совершенно типичная задача на позиции Data Engineering. правда обычно все же устно просят рассказать и бывает ждут что расскажут про многоблочное чтение (readFileScattered из winapi).

M>А чем эта функция отличается от обычного ReadFile в асинхронном режиме?


не дергает процессор и читает мимо виндового кеша сразу несколько блоков с устройства через DMA, мимо процесора. обычный read читает из кеша винды по одном блоку, дергает cpu ...
Отредактировано 30.08.2022 14:10 Gt_ . Предыдущая версия .
Re[13]: Как бы вы делали эту задачу (переходим к конкретике)
От: Dym On Россия  
Дата: 30.08.22 14:10
Оценка:
Здравствуйте, Shmj, Вы писали:

S>Т.е. вы сразу готовы бодаться с заказчиком и в судах отстаивать что было выполнено все по Т.З.?

Не без этого, да...

S>А если заказчик сам не до конца понимает как сделать лучше? И хочет чтобы вы были его другом, подсказали оптимальный вариант.

Вот, я рад, что ты сам подошел к этому. Да, заказчик сам не до конца понимает, что же он хочет получить. Именно так. И именно по этому на сбор и анализ требований уход много сил и времени. Я уже писал когда-то, что на одном проекте пока я составлял расширенное ТЗ требования менялись раз пять, причем на диаметрально противоположные. И это в общем-то нормально. Процесс работы с требованиями итерационный, это постоянные интервью, наблюдения, иногда даже участие в процессе, местами иногда телепатия (шучу, не иногда, а почти всегда). Иногда макетирование, даешь слепленный на коленке макет пощупать (потом этот макет становится ядром системы, состоящей из костылей и заплаток, мудро называемыми модулями ).
Счастье — это Glück!
Отредактировано 30.08.2022 14:11 Dym On . Предыдущая версия .
Re[9]: Как бы вы делали эту задачу (переходим к конкретике)...
От: Pzz Россия https://github.com/alexpevzner
Дата: 30.08.22 19:54
Оценка:
Здравствуйте, AmSpb, Вы писали:

AS>Сотрудники Kaspersky сообщили о предложении уволиться на просьбы о переезде из России


Угу. Ученый изнасиловал журналиста.

Правда заключается в том, что ЛК не может обеспечить возможность удаленной работы для сотрудников, уехавших из России. Тех, кто хочет/планирует уехать, но еще не уехал, никто никак не обижает.
Re: Как бы вы делали эту задачу (переходим к конкретике)...
От: gyraboo  
Дата: 30.08.22 20:05
Оценка:
Здравствуйте, Shmj, Вы писали:

S>В продолжение темы: https://rsdn.org/forum/job/8342543.flat
Автор: Shmj
Дата: 24.08.22

S>Многие думают, что главное собрать требования а остальное легко — что требования собрать — это большая часть времени а разработка типа 15%.

S>Ну ок, чтобы далеко не ходить, давайте популярную задачу, которую уже дважды на днях поднимали:


S>1. https://rsdn.org/forum/dotnet/8335182.flat
Автор: Shmj
Дата: 14.08.22

S>2. https://rsdn.org/forum/alg/8340088.flat
Автор: _FRED_
Дата: 21.08.22


S>Требования собраны, всем все понятно. Только абсурдировать не нужно, понятно что демагогическими приемами все можно свести к абсурду, любая фраза не формальна и не полна. По сути всем все понятно.


S>Вот мое видение на скорую руку: https://rsdn.org/forum/dotnet/8338266.1
Автор: Shmj
Дата: 18.08.22


S>Идея такая, что для такой задачи не оптимально писать все с нуля а правильнее найти готовое решение.


S>Но! Прав ли я? Во-первых, мое решение не доделано — там сортируется сначала по цифре, потом по строке (но это ладно, можно поменять местами). Второе — не учитываются дубликаты (можно прибавить к каждой записи счетчик или задействовать Berkeley DB, вроде там дубликаты разрешены, но это не точно).


S>Как бы вы это решали? Искали бы сначала готовую библиотеку или же писали бы с нуля?


S>Ну и как думаете — если мое решение с LevelDB довести до ума — будет ли быстрее чем предложенные самописные решения на сотнях гигабайт данных? Ведь больше 2-3 Гб. никто проверять не хочет, а это размер, который полностью вмещается в ОЗУ. Когда в ОЗУ перестанет влазить — цифры могут быть другими.


S>Вот я реально не знаю. Нужно только проверять. А проверить с 50 Гб. данных — уже час времени.


Ну вот допустим, ты приходишь к оптинскому старцу, человеку с большим жизненным опытом решения жизненных же проблем (тынц: https://rsdn.org/forum/life/8347891
Автор: gyraboo
Дата: 30.08.22
, или тынц: https://rsdn.org/forum/flame/8346842
Автор: Khimik
Дата: 29.08.22
, или даже https://rsdn.org/forum/life/8347606
Автор: gyraboo
Дата: 30.08.22
). Ты описываешь ему проблему, а про себя думаешь, ну что какой-то там старец может тут сделать, он же ни на одну кнопку в жизни не нажимал, и ни про какие О-большое не слыхивал даже, ты описываешь ему свою проблему, он тебя спрашивает — а ты, мил человек, решением энтой своей зандачей многим людям мирским поможешь в жизни их? И ты такой — опа, а что ответить-то мудрому человеку? И вопрос-то он задал дурацкий, не по делу, не решает он твою зандачу, и пойдешь ты от него, и станешь всем говорить, что старцы на то только и годятся, что место им уступать в трансопрте.
Re[3]: Как бы вы делали эту задачу (переходим к конкретике)...
От: AleksandrN Россия  
Дата: 30.08.22 22:33
Оценка:
Здравствуйте, Shmj, Вы писали:

S>Сколько по времени отработает эта утилита на 100 Гб данных?


Лениво проверять. Если интересно — сравни с другими реализациями.
Re[4]: Как бы вы делали эту задачу (переходим к конкретике)...
От: Shmj Ниоткуда  
Дата: 31.08.22 10:06
Оценка:
Здравствуйте, AleksandrN, Вы писали:

AN>Лениво проверять. Если интересно — сравни с другими реализациями.


Не то лениво — это просто затраты времени и ресурсов.
Re[5]: Как бы вы делали эту задачу (переходим к конкретике)...
От: Gradiens  
Дата: 02.09.22 12:02
Оценка:
Здравствуйте, Shmj, Вы писали:

S>Речь была о том, что сбор и анализ требований — это основная часть работы. Причем тут продажи и документация?


Кажется, речь была о том, что программирование — это 15% от всей разработки, которая включает анализ и все такое.
И эти остальные активности никуда не денутся.
Конкретно ты можешь их посылать в сад и игнорировать эти активности. Значит, этим будут заниматься другие люди. Или не будут. Но тогда придет пушной зверек, и не один.
То есть конкретно ты можешь тратить на программирование 50% и даже больше.
Но в разработке вообще оно займет порядка 15%. Где-то больше, где-то меньше.
Re[3]: Как бы вы делали эту задачу (переходим к конкретике).
От: Shmj Ниоткуда  
Дата: 04.09.22 05:36
Оценка:
Здравствуйте, Gt_, Вы писали:

Gt_>тест прошел 2m14s, убрал repartition(1), попробовал руками конкатинировать 200 файлов что спарк по дефолту выплевывает — вышло дольше 2m31s


Позвольте полюбопытствовать. Сортировка происходит просто бинарная или с учетом правил языка, о чем упомянули ниже?

В-четвертых, то что пропустили почти все, в условиях мало что известно о природе строк. Многие посчитали их ASCII-строками (массивами байт-символов), тогда как может быть UTF-8 с правилами сортировки для Норвежского языка.


Сложно ли вам кастомизировать сортировку?
Re[2]: Как бы вы делали эту задачу (переходим к конкретике).
От: Shmj Ниоткуда  
Дата: 04.09.22 09:42
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>Я немного проанализировал и понял что можно почти все написать с помощью стандартных пакетов.

G>Вот решение https://github.com/gandjustas/HugeFileSort
G>Я примерно полчаса поискал библиотеки для megre двух IEnumerable и для min heap и не нащел ничго внятного. Merge написал сам, а вместо min heap использовал стандартный PriorityQueue

И сможешь ли сказать честно — сколько времени ушло на все, включая анализ и пр.?

Данные вашего решения на машине Google Cloud (4 ядра, 16 Гб ОЗУ) с SSD:

100 млн. записей, 13,8 Гб:

Генерация — 437 сек. (7,2 мин.)
1 Гб — 32 сек.

Сортировка — 934 сек (15,5 мин.)
1 Гб — 68 сек.

Отредактировано 04.09.2022 10:13 Shmj . Предыдущая версия . Еще …
Отредактировано 04.09.2022 10:11 Shmj . Предыдущая версия .
Re[4]: Как бы вы делали эту задачу (переходим к конкретике).
От: Gt_  
Дата: 04.09.22 11:57
Оценка:
Gt_>>тест прошел 2m14s, убрал repartition(1), попробовал руками конкатинировать 200 файлов что спарк по дефолту выплевывает — вышло дольше 2m31s

S>Позвольте полюбопытствовать. Сортировка происходит просто бинарная или с учетом правил языка, о чем упомянули ниже?


да, бинарная. причем sort() это я не подумав использовал (sort внутри партиции сортирует, а не весь датасет), там orderBy() вместо него должен быть и цифровую часть следовало кастить в инт, иначе как строку сортирует.
подправил — 15 секунд прибавилось.

S>

S>В-четвертых, то что пропустили почти все, в условиях мало что известно о природе строк. Многие посчитали их ASCII-строками (массивами байт-символов), тогда как может быть UTF-8 с правилами сортировки для Норвежского языка.


S>Сложно ли вам кастомизировать сортировку?


да, сложно. свой компаратор можно подсунуть в sort() партиции, но сортировать внутри партиции нет смысла, т.к. весь файл в одну партицию по памяти не влезет.
Re[5]: Как бы вы делали эту задачу (переходим к конкретике).
От: Shmj Ниоткуда  
Дата: 04.09.22 12:08
Оценка:
Здравствуйте, Gt_, Вы писали:

Gt_>да, бинарная. причем sort() это я не подумав использовал (sort внутри партиции сортирует, а не весь датасет), там orderBy() вместо него должен быть и цифровую часть следовало кастить в инт, иначе как строку сортирует.

Gt_>подправил — 15 секунд прибавилось.

Gt_>да, сложно. свой компаратор можно подсунуть в sort() партиции, но сортировать внутри партиции нет смысла, т.к. весь файл в одну партицию по памяти не влезет.


repartition(1) — это на сколько частей разбить файл?

Оно точно не в памяти файл целиком хранит?
Отредактировано 04.09.2022 12:14 Shmj . Предыдущая версия .
Re[2]: Как бы вы делали эту задачу (переходим к конкретике)...
От: Shmj Ниоткуда  
Дата: 04.09.22 12:54
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>Вот решение https://github.com/gandjustas/HugeFileSort


Сортировка в 2.5 раза медленнее у вас, чем этот вариант: https://rsdn.org/forum/alg/8351025.1
Автор: artelk
Дата: 04.09.22


Задание одно и тоже. Требования всем понятны. А вот как решить оптимально — вот это хрен знает. Нужна компетенция колоссальная.
Re: Как бы вы делали эту задачу (переходим к конкретике)...
От: AmSpb  
Дата: 04.09.22 16:41
Оценка:
Здравствуйте, Shmj, Вы писали:

https://itamargilad.com/gist-framework/
Re[6]: Как бы вы делали эту задачу (переходим к конкретике).
От: Gt_  
Дата: 04.09.22 17:47
Оценка:
Gt_>>да, сложно. свой компаратор можно подсунуть в sort() партиции, но сортировать внутри партиции нет смысла, т.к. весь файл в одну партицию по памяти не влезет.

S>repartition(1) — это на сколько частей разбить файл?


S>Оно точно не в памяти файл целиком хранит?


процесс жрет 5-6 гигов, пока не понял почему, я вроде driver двумя гигами ограничивал. repartition(1) завязан на write(), думаю он получает стрим и на ходу записывает в файл. можно убрать repartition(1), но тогда придется самому склеивать 200 файлов от партиций что оставит orderBy().
я думаю оно работает так — файл разбивается на 200 частей — маперы читают, отправляют на 200 редюсоров, те устраивают сортировку внутри партиции — во на выходе и 200 RDD с отсортированным датасетом. на сколько помню RDD может сбрасываться на диск, если памяти не хватает.
Отредактировано 04.09.2022 17:48 Gt_ . Предыдущая версия .
Re[3]: Как бы вы делали эту задачу (переходим к конкретике).
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 04.09.22 22:36
Оценка:
Здравствуйте, Shmj, Вы писали:

S>Здравствуйте, gandjustas, Вы писали:


G>>Вот решение https://github.com/gandjustas/HugeFileSort


S>Сортировка в 2.5 раза медленнее у вас, чем этот вариант: https://rsdn.org/forum/alg/8351025.1
Автор: artelk
Дата: 04.09.22


Сделано в предположение, что файлы ASCII

Это слишком сильное предположение как по мне. Хотя как раз на строки (преобразование и уборка мусора) тратится почти половина не-IO времени.
Если рассматривать строки как ascii, то можно zero-allication код сделать, который будет до 10 раз быстрее там где не-IO. Но все равно хороший ССД даст прирост по скорости больше чем микрооптимизации.

S>Задание одно и тоже.

По факту нет. Разница unicode и ascii строк огромная.

S>Требования всем понятны.

Требования для этой задачи не полны, увы. В том числе требования быстродействия.

S>А вот как решить оптимально — вот это хрен знает. Нужна компетенция колоссальная.

Какой параметр мы оптимизируем?
Если время работы программы, то можно взять наивную реализацию на питоне или .net и поставить диски побыстрее.
Если суммарные затраты в денежном эквиваленте, то непонятно как оценивать разницу во времени работы даже в два раза.
Если процессорное время или затраты памяти, то надо переписывать на С\C++\Rust и отказаться от управляемых сред.

Вообще само определение критерия оптимальности может занять те самые 85% времени.
Отредактировано 04.09.2022 22:55 gandjustas . Предыдущая версия .
Re[4]: Как бы вы делали эту задачу (переходим к конкретике).
От: Shmj Ниоткуда  
Дата: 05.09.22 07:19
Оценка:
Здравствуйте, gandjustas, Вы писали:


S>>И сможешь ли сказать честно — сколько времени ушло на все, включая анализ и пр.?

G>Часа два смотрел видос и читал что люди написали.
G>Полчаса первый прототип — похоже на итоговое решение
G>Потом часа три пытался "оптимизировать" не шибко удачно
G>Потом еще час доводил прототип до текущего состояния

Т.е. уже ушло 2+1.5+3+1=7.5 часов — минимум рабочий день вы потратили.

Причем будем откровенны — вы один из лучших спецов по .Net в нашем сообществе, во всяком случае в плане знания платформы/библиотек и практических решений.
Re[5]: Как бы вы делали эту задачу (переходим к конкретике).
От: DiPaolo Россия  
Дата: 05.09.22 07:26
Оценка:
S>Т.е. уже ушло 2+1.5+3+1=7.5 часов — минимум рабочий день вы потратили.

Вот видишь: один день. А требования мы примерно вчетвером собирали около 2-х недель. Округлим в меньшую сторону плюс не все 4ро всегда участвовали. Ну пусть будет даже 1 человеко-месяц. Что гораздо больше, чем 1/20 человеко-месяц.

чтд

ПыСы надо еще учитывать, что точные требования так до конца из тебя и не выудили.
Патриот здравого смысла
Re[6]: Как бы вы делали эту задачу (переходим к конкретике).
От: Shmj Ниоткуда  
Дата: 05.09.22 07:36
Оценка:
Здравствуйте, DiPaolo, Вы писали:

DP>Вот видишь: один день. А требования мы примерно вчетвером собирали около 2-х недель. Округлим в меньшую сторону плюс не все 4ро всегда участвовали. Ну пусть будет даже 1 человеко-месяц. Что гораздо больше, чем 1/20 человеко-месяц.


Один день с учетом того, что были готовые решения и ничего принципиально нового он не добавил. Но стоит отметить умение писать код просто, выразительно, с глубокое знание фреймворка.

Вот вариант уважаемого_FRED_ https://rsdn.org/forum/alg/8340088.1
Автор: _FRED_
Дата: 21.08.22
, для примера. Написан с архитектурой — хотя архитектуру никто не требовал и о возможностях кастомизации никто не просил. Т.е. он позиционирует себя не как разработчика, готового выполнять задачи, а как архитектора проекта. А самой задаче внимания уделил мало — ему нравится разрабатывать архитектуры. Притом его решение крешится у меня на 14 Гб. без всяких логов и сообщений об ошибках.
Отредактировано 05.09.2022 7:40 Shmj . Предыдущая версия .
Re[7]: Как бы вы делали эту задачу (переходим к конкретике).
От: DiPaolo Россия  
Дата: 05.09.22 07:39
Оценка:
DP>>Вот видишь: один день. А требования мы примерно вчетвером собирали около 2-х недель. Округлим в меньшую сторону плюс не все 4ро всегда участвовали. Ну пусть будет даже 1 человеко-месяц. Что гораздо больше, чем 1/20 человеко-месяц.

S>Один день с учетом того, что были готовые решения и ничего принципиально нового он не добавил. Но стоит отметить умение писать код просто, выразительно, с применением готовых фреймворков.


S>Вот вариант уважаемого_FRED_ https://rsdn.org/forum/alg/8340088.1
Автор: _FRED_
Дата: 21.08.22
, для примера. Написан с архитектурой — хотя архитектуру никто не требовал и о возможностях кастомизации никто не просил. Т.е. он позиционирует себя не как разработчика, готового выполнять задачи, а как архитектора проекта. А самой задаче внимания уделил мало — ему нравится разрабатывать архитектуры. Притом его решение крешится у меня на 14 Гб. без всяких логов и сообщений об ошибках.


Как это относится к тому, что написал я?

Кстати, вы почему-то скипнули приведенный еще неделю-две назад мой пример с реальным ТЗ. Там еще отчетливее было бы видно, насколько много времени отнимает планирование и сбор требований.
Патриот здравого смысла
Re[8]: Как бы вы делали эту задачу (переходим к конкретике).
От: Shmj Ниоткуда  
Дата: 05.09.22 07:58
Оценка:
Здравствуйте, DiPaolo, Вы писали:

DP>Кстати, вы почему-то скипнули приведенный еще неделю-две назад мой пример с реальным ТЗ. Там еще отчетливее было бы видно, насколько много времени отнимает планирование и сбор требований.


Понял вас. Вы просто хотите сбавить психологическое напряжение и переложить все на составление Т.З. Мол это не я виноват что сроки сорвал, что не так работает — это все кривое Т.З.

На самом деле хорошее Т.З. возможно только в одном случае — если вы УЖЕ ранее делали этот же проект, он был успешен — и вы решили переписать все с нуля качественно. Только так.
Re[9]: Как бы вы делали эту задачу (переходим к конкретике).
От: DiPaolo Россия  
Дата: 05.09.22 08:01
Оценка:
S>Понял вас.

Нет, не поняли.
Патриот здравого смысла
Re[11]: Как бы вы делали эту задачу (переходим к конкретике).
От: DiPaolo Россия  
Дата: 05.09.22 08:13
Оценка:
S>Это психологическая защита. Конечно вы не хотите признавать этот механизм, дабы не лишать себя механизма защиты.

Будьте добры, говорите за себя. Мне неинтересны ваши фантазии обо мне.
Патриот здравого смысла
Re[5]: Как бы вы делали эту задачу (переходим к конкретике).
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 05.09.22 08:33
Оценка:
Здравствуйте, Shmj, Вы писали:

S>Здравствуйте, gandjustas, Вы писали:



S>>>И сможешь ли сказать честно — сколько времени ушло на все, включая анализ и пр.?

G>>Часа два смотрел видос и читал что люди написали.
G>>Полчаса первый прототип — похоже на итоговое решение
G>>Потом часа три пытался "оптимизировать" не шибко удачно
G>>Потом еще час доводил прототип до текущего состояния

S>Т.е. уже ушло 2+1.5+3+1=7.5 часов — минимум рабочий день вы потратили.

Если бы я просто хотел отсортировать файл, то заняло бы часа два на все.
Ну и файл в 100ГБ сортировался бы час-полтора.


S>Причем будем откровенны — вы один из лучших спецов по .Net в нашем сообществе, во всяком случае в плане знания платформы/библиотек и практических решений.

Сама по себе задача сортировки простая и не требует ни библиотек, ни особых знаний языка, ни особых знаний алгоритмов.
А вот попытка ускорить как раз требует, в зависимости от разных допущений варианты могут быть кардинально разные.

Можно потратить ещё 8-20 часов чтобы файл в 100гб сортировался не за час, а за 30 минут.
Есть ли в этом смысл — сильно зависит от требований.
Re[9]: Как бы вы делали эту задачу (переходим к конкретике).
От: Dym On Россия  
Дата: 05.09.22 09:03
Оценка:
Здравствуйте, Shmj, Вы писали:

S>На самом деле хорошее Т.З. возможно только в одном случае — если вы УЖЕ ранее делали этот же проект, он был успешен — и вы решили переписать все с нуля качественно. Только так.

Почти правильно. Только надо не забывать, что ТЗ исходит все-таки от заказчика, когда при подписании акта о вводе в промышленную, после трех лет опытной, заказчики тебе говорят: "А вот теперь мы готовы написать ТЗ," — реальный случай в моей практике, о не один.
Счастье — это Glück!
Re[10]: Как бы вы делали эту задачу (переходим к конкретике).
От: Shmj Ниоткуда  
Дата: 05.09.22 15:03
Оценка:
Здравствуйте, Dym On, Вы писали:

DO>Почти правильно. Только надо не забывать, что ТЗ исходит все-таки от заказчика, когда при подписании акта о вводе в промышленную, после трех лет опытной, заказчики тебе говорят: "А вот теперь мы готовы написать ТЗ," — реальный случай в моей практике, о не один.


Это может для гос. контор нужно для отчетности. В реальности так не работает — гениев нет и никто не может предвидеть все нюансы до начала разработки и исследований. Все что там нафантазируют — бесполезно. Проводить разработку без написания кода и выражать в виде квадратиков с описанием алгоритмов на псевдо-языке — тоже не возможно на практике и еще сложнее чем на нормальном ЯП, который можно проверить компилятором.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.