Как стать автором
Обновить
3
0

Пользователь

Отправить сообщение

Ну, т.е. проблема уже не в PHP, а в неудачном разбиении базы / разбиении базы, которое в какой-то момент переросло допустимые лимиты?


Можно ли было изменить базу, но при этом не пихать туда хранимки, а бизнес-логику переписать на PHP / каком-то другом более шустром языке с соответствии с новой структурой?

Сломали всем шаблон

вот уж точно


и при этом добились превосходных результатов

вот тут уж время покажет (а когда покажет уже на самом деле и интересно ни кому не будет — забудут уже)

В ближайших статьях я приведу примеры решения задачи на PHP и pgSQL — почувствуйте разницу

О, вот это действительно интересно

Код на PHP был достаточно качественным — особо его не оптимизируешь

Вы же вроде говорили про чёрный ящик?) Как можно сказать что код был качественным, если его нельзя понять?


Но опять же, на PHP свет клином не сошёлся, вот сейчас go набрал популярность, почему не попробовать его?

Кстати та функция разбиения на js — моя гордость ^__^
Она конечно сложноватая, но вовсе не потому, что там много исключений для текста — их там вообще не было и базовая логика разбиения выглядит почти как


text.split(/\s+/).map(word => `<tran>${word}</tran>`);

(конечно там не так написано, в то время, когда она писалась ещё es6 не был в моде, зато был жив ещё jQuery :-))


Вся основная сложность там заключалась в учёте тегов, которые есть в html (старая переводилка работала не только для джунглей но и для субтитров и курсов, в которых были нередки вкрапления html-а) — надо было обернуть текст в теги так, чтобы это не ломало вёрстку и при этом слово выделялось в тег, т.е. учесть варианты типа <b>pre</b>position и не сделать из этого двух раздельных переводов =)


А так же при этом надо было учесть, что ты оборачиваешь живой DOM, на элементах которых могут висеть обработчики событий и нельзя всё содержимое блока перезаписать через innerHTML

Со структурированными данными — не сомневаюсь, с проиндексированными тоже вроде логично. Но вот с предобработкой и сырыми данными — вот тут действительно интересно

Так возможность сделать надёжную систему и в обычном SQL-запросе есть

Вся логика этой функции вместе с исключениями и сложными правилами деления текста раньше была написана на JavaScript на фронте. Функция была очень громоздкой, перевод мог занимать много времени.

Перевод же не был реализован на фронте? Или я неправильно распарсил выражение?


Мы реализовали эту функцию в базе данных.

Кстати, действительно интересно, насколько вообще приспособлены движки баз данных (и postgresql в частности) для обработки больших текстовых строк (разбиение, поиск, что там ещё понадобилось для парсинга?).

Эх, действительно на лендосе контакты не предусмотрели, вот тут есть контакты если что https://lingualeo.com/en/contacts (доступно для неавторизованных пользователей)


З.Ы. надеюсь, ребята саппорт-то не сократили в порыве оптимизации =))

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

О, уже хорошо!


А они попадают туда вручную и расчёт на то, что разработчик не забудет положить очередной снапшот в git или есть какая-то автоматика?


А есть возможность убедиться в том, что в конкретной ветке гита лежит актуальная версия снапшота, соответствующая боевой / тестовой базе?

Время решения старых задач оценивали по jira (когда завели, когда закрыли).

А время решения новых как оценивали?

Сейчас все стало гораздо проще) И, на мой взгляд, эффективнее.

Главное, чтобы это было не на чей-то взгляд, а на самом деле)

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

О чём и речь. Суть-то не в технологии, а в правильном её использовании. И в обычных запросах вроде давно уже принято использовать плейсхолдеры параметров (кажется, так это называется?).

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

Хочется верить, что все эти изменения и правда были не зря, и что все выводы не умозрительные, а хоть как-то подтверждены на практике =)


Надеюсь у Вас всё получится!

Оценили, сколько часов разработки и тестирования уходило на решение схожей задачи в старой архитектуре и в новой.

По какому количеству задач эта оценка была проведена?


А оценка включала в себя затраты на исправления, которые могли случиться после реализации задачи? На каком интервале времени считались такие оценки?

  1. Снизить стоимость разработки в 5+ раз
  2. Увеличить скорость разработки в 5+ раз
  3. Снизить стоимость владения в 10+ раз

Вот тут было бы интересно узнать, каким образом снимались метрики, и каким образом сравнивались =)

Наконец, продукт стал безопаснее. Раньше, когда вся бизнес-логика была в прослойке на PHP, оттуда из разных функций шли запросы в базу данных. Открытая для SQL-запросов база данных — это проблема: можно сделать SQL-инъекцию и заставить её выполнить опасный код, например, удаление данных. Сейчас снаружи не приходит ни одного SQL-запроса, потому что мы перенесли всю логику внутрь».

Хм, а разве сейчас какие-то адаптеры к БД не экранируют параметры в SQL запросах, чтобы не сыграл SQL Injection?


И разве хранимки каким-то дополнительным образом от этого защищены? Вот тут говорят что в некоторых случаях при некотором стечении обстоятельств это всё-таки возможно, поправьте меня, если я не прав

Делайте периодически снапшоты хранимок (это текстовый файл на пару мегабайт), и все.

А где лежат эти снапшоты?
А как понять кто и по какой причине поменял ту или иную хранимку / ввёл новую версию хранимки?

Команды менялись, новички не всегда понимали, как работают старые части системы, в итоге код Lingualeo постепенно превратился в чёрный ящик: непрозрачная логика в бэкенде, перегруженный фронт, обилие костылей, большие пробелы в документации.

И конечно же сейчас, не дай бог что произойдёт с разработчиком БД, подобной ситуации конечно же не произойдёт, потому что… Почему?

Информация

В рейтинге
Не участвует
Зарегистрирован
Активность

Специализация

Веб-разработчик