SVZ>Может расскажешь свою success story? Какие алгоритмы использовали, на каких данных, сколько данных и т.д.?
У нас энтерпрайз и все большие объемы — они в БД. Была отдельная эпопея со скейлингом на 100ядерные машины, но к С++ она никакого отношения не имеет
Интересующимся параллелизмом в БД рекомендую посмотреть
А в плюсах — обычно неожиданно выясняется что данных стало 10-50-100 раз больше чем планировалось 3 года назад, и все как-то ме-е-е-е-дленно
Если скейлится линейно — прикручиваем параллелизм, если код написан в парадигме STL — то это будет просто.
Иногда не скейлится и дальше it depends...
Кучу ресурсов жрет UI, у нас упор на юзабилити, работу с текстом и все такое...
Несколько примеров
— году эдак в 2002 Microsoft в SP к XP сделал прекрасную вещь. Он использовал в проводнике сортировку строк, которая различала числа внутри.
IMG8
IMG9
IMG10
IMG11
стали сортироваться именно в таком порядке
однако до сих про 99% софта сортирует строки как
IMG10
IMG11
IMG8
IMG9
оно и понятно почему, алгоритм который различает числа работает раз в 5 медленне
— была такая програмка punto switcher, переключала текст набранный не в той раскладке, потом поисковики начали фиксить неправильные запросы, но весь остальной софт это почему-то не коснулось
99% продолжают при поиске требовать от пользователей вводить все as is.
Fuzzy matching, он тоже достаточно ёмкий и малоизвестный https://en.wikipedia.org/wiki/Bitap_algorithm
— большинство search as you type работает довольно мерзко, ищет в основном по совпадению начальных символов, некоторые по подстроке, но найти
в комбо-боксе по вводу "п и с" "Пушкин Иван Сергеевич" — практически никто не может
— 90% софта испытвает проблемы если вместо 12.3 ввести 12,3 или 12 300 вместо 12300
— поиск во всех гридах сделан откровенно фигово
Если добавить еще фишек и данных, то окажется что на 1м ядре не взлетает.
Права жрут кучу ресурсов
Декомпрессия данных, когда их много
Формулки всякие