170 похожих чатов

Всем привет! Есть парсер, который парсит данные и нужно их класть

в БД. Есть два решения как это делать:

1) Создать в БД юзера и ограничить его по правам к двум таблицам, и из парсера напрямую грузить данные в БД
2) Создавать на бэкенде эндпойнты для загрузки данных в БД, и уже из парсера обращаться к бэку, а тот будет грузить эти данные в БД

Какое из решений лучше ? У кого как реализовано на проекте ? Мб еще какое-то решение лучшее есть

7 ответов

30 просмотров
𝔻𝕚ℤ𝕚ℕ𝕟𝔼𝕤- Автор вопроса

Спросил у ChatGPT и тот расписал мне такой текст: ————————————————— Оба подхода имеют свои преимущества и недостатки, и выбор между ними зависит от требований вашего проекта. Рассмотрим оба варианта: Создать в БД пользователя с ограниченными правами. Преимущества: Обычно это быстрее, поскольку не требует обращения к бэкенду. Это может быть проще в реализации, если у вас уже есть код для работы с базой данных. Недостатки: Может создать потенциальные проблемы с безопасностью, если учетные данные пользователя утекут. Этот пользователь сможет взаимодействовать с базой данных без какого-либо контроля со стороны вашего приложения, что может привести к неожиданным результатам. Сделать на бэкенде endpoint. Преимущества: Предоставляет больше контроля над тем, какие данные могут быть записаны в базу данных. Упрощает изменение логики записи в базу данных, поскольку она централизована на бэкенде. Позволяет включать дополнительную логику обработки данных на бэкенде, такую как валидация, преобразование данных и т.д. Недостатки: Возможно, будет медленнее из-за дополнительного уровня между клиентом и базой данных. Требует дополнительного кода на бэкенде для обработки запросов. В зависимости от ваших нужд в контроле данных, скорости и сложности реализации, вы можете выбрать подходящий вариант. Оба варианта рабочие, но второй подход обычно предпочтительнее, поскольку он предоставляет больше контроля и гибкости.

Юзера для приложения в любом случае надо создавать, хотя бы чтобы приложение случайно не снесло все таблицы по твоей ошибке (в популярных ORM такой рефреш делается за один вызов функции)

Какая СУБД, какой объём и частота появления данных?

𝔻𝕚ℤ𝕚ℕ𝕟𝔼𝕤- Автор вопроса
Алексей Попов
Какая СУБД, какой объём и частота появления данных...

На данный момент MySQL, но в будущем наверное будет PostgreSQL

𝔻𝕚ℤ𝕚ℕ𝕟𝔼𝕤- Автор вопроса
Feanorx
Юзера для приложения в любом случае надо создавать...

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

𝔻𝕚ℤ𝕚ℕ𝕟𝔼𝕤
Кстати, да, вы правы, юзера так и так придется соз...

Если база полноценная типа postgresql, я бы подключался к ней из парсера. Если sqlite (или поддержка такой базы нужна, например, для тестов), так не получится сделать.

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

Похожие вопросы

Обсуждают сегодня

30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
в JclConsole объявлено так: function CtrlHandler(CtrlType: DWORD): BOOL; stdcall; - где ваше объявление с stdcall? у вас на картинке нет stdcall
Karagy
8
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
program test; {$mode delphi} procedure proc(v: int32); overload; begin end; procedure proc(v: int64); overload; begin end; var x: uint64; begin proc(x); end. Уж не знаю...
notme
6
Карта сайта