Нужно ли отдельно писать сервер для взаимодействия с БД?
Сразу извиняюсь за корявую формулировку вопроса, совсем зелёная ещё.
У меня стоит задача написать приложение (не web), в котором клиенты могли бы обмениваться сообщениями и просматривать файлы которые выложил администратор (тоже клиент, но как особый тип пользователя). Также нужно чтобы каждый клиент имел свой профиль, который он может редактировать.
Собственно главный вопрос: как организовать всё это дело с использованием базы данных?
В интернете куча всяких примеров подключения к БД из клиентского приложения, но всё это в пределах одного ПК и одного пользователя. Хотелось бы понять нужно ли мне писать свой сервер для взаимодействия с БД, которая размещается на удалённом ПК или же можно просто напрямую с клиентского приложения подключатся к БД, только чтобы не было никаких конфликтов, когда одновременно несколько клиентов пытаются авторизоваться или изменить данные.
Если второй вариант возможен, то могу ли я разместить базу данных на обычном домашнем ПК с учётом того, что может быть ~1000 клиентов, или же лучше размещать БД на какой-то платный хостинг?
Направьте в нужное русло пожалуйста, а то совсем запуталась. Спасибо.
Хостинг: шаред или дешевый VPS, на котором вы разместите свою БД.
Там же - API на чем угодно (PHP, JS, Python), с авторизацией и разрешением конфликтов (а скорее - устранением их причины).
И все остальное, что вам нужно сделать из приложения, покроет libCurl.
1. Вынос через сервис (rest, grpc, soap и прочее) (плюсы уменьшение площади атаки до вашего сервиса)
2. Вынос подключения к бд тоже имеет место быть, все нормально с использованием нормальной базы postgree , mysql, mssql, oracle, db2
3. Просто вставка в ваше приложение веб вью
Владимир Коротенко, это вопрос безопасности, и он реально важен, прямые подключения через интернет — плохая практика. В описании задачи такого требования нет.
Владимир Коротенко, для каждого юзера создавать группу, которой будет доступна одна строчка в таблице через RLS? Это нормальная практика по-вашему?
На уровне приложения это не особо надежно решать, банальным hex редактором ищем SQL запросы в строковых константах, и меняем их на что угодно, хоть на DROP TABLE. Если будет RPC, это ведь и есть первый вариант.