LINUX.ORG.RU

Как подружить SQLite3 и C++ на веб-сервере?

 , , , ,


0

1

Приветствую, воскресный ЛОР!

У меня два вопроса.
1 - Можно ли работать с SQLite, используя C++ не C-функции, которые я нашёл в примерах в интернете?
2 - Можно ли будет вкомпилировать БД SQLite3 в свою C/C++-программу?

Нужен именно С++, потому что я боюсь что накасипорю, при использовании С. А вкомпилировать нужно, чтобы использовать в CGI-скрипте на сервере хостинга(онтопик).

Благодарю за ответы!

Вызов функций в c++ ничем не отличается от вызова функций си.

https://www.sqlite.org/cintro.html

Да и если есть с++ обёртка то разница будет разве что не просто функцию вызывать, а метод класса. Короче никакой разницы.

https://www.sqlite.org/quickstart.html

https://www.tutorialspoint.com/sqlite/sqlite_c_cpp.htm

LINUX-ORG-RU ()
Ответ на: комментарий от LINUX-ORG-RU
const char* SQL = "CREATE TABLE IF NOT EXISTS foo(a,b,c); INSERT INTO FOO VALUES(1,2,3); INSERT INTO FOO SELECT * FROM FOO;";

Вот эта *опа мне не нравится. Очень легко накосячить. Я могу использовать обычный string?

xwicked ★★ ()
Ответ на: комментарий от xwicked

Вот эта *опа мне не нравится.

Так оно и так и так будет же

Очень легко накосячить.

Ну это в любом случае легко

Я могу использовать обычный string?

Не знаю как сейчас в плюсах с этим дело. Но что точно можешь так это использовать c++ строки, а передавать всё равно придётся в виде char * в sqlite API функции. Путём кастования к нужному типу.

Но проще и надёжнее писать на C API. С++ ничего в плане безопасности и удобства или защиты от дурака не даст по моему.

Да и сами запросы можно не хардкорить в код. А читать из файликов где всё оттестировать и вылизать до блеска. А уж потом если приспичит прямо прибить гвоздями в основной код

LINUX-ORG-RU ()
Последнее исправление: LINUX-ORG-RU (всего исправлений: 1)
Ответ на: комментарий от LINUX-ORG-RU

Но проще и надёжнее писать на C API. С++ ничего в плане безопасности и удобства или защиты от дурака не даст по моему.

А данные извлекать? У меня будут unicode-строки, использовать функции типа mbstowcs и обратно или всё обрабатывать в С? Тогда я точно закопаюсь в ошибках, если всё буду в С делать. Я намучился уже со своим кроссвордом, когда на С CGI-скрипт писал.

xwicked ★★ ()
Последнее исправление: xwicked (всего исправлений: 1)
Ответ на: комментарий от xwicked

str.c_str()
Учти что твой str не должен удаляться пока sqlite нужна переданная строка. Хотя скорее всего после завершения запроса она ему уже не нужна

mittorn ★★★★★ ()
Последнее исправление: mittorn (всего исправлений: 1)

Используя C++ на сервере, да и ещё мёртвый CGI ты всё делаешь неправильно. Ща уже на крестах пишут плагины для Node.js (он на крестах), а не колупают 💩 мамонта, да и ещё какой-то хостер, ты не из 2000-го? У нас в 2020 каждый бомж может себе позволить бесплатный free google cloud виртуалку с 512 Мб оперативы и крути там что хочешь, без унылого г типа «CGI скриптов», это что-то из времён, когда был только апач и пёрл 4

menangen ★★★★★ ()
Ответ на: комментарий от xwicked

У тебя в голове бардак какой-то, непонятно даже с чего начинать. От абстрактного «где-то накасипорю» до обертки sql на крестах в cgi-процессе. Это что-то уровня поеду на танке в магазин за электричеством, потому что боюсь китайцев.

Возьми любой скриптовый язык, поставь первый попавшийся в гугле минифреймворк, напиши на нем что там тебе нужно, реверс-проксни это все нгинксом. Python, flask tutorial, sqlite. Node, express tutorial, better-sqlite3. Setup nginx reverse proxy. Reverse proxy https.

Если у тебя готовая прога на крестах, которую нужно высунуть наружу через хттп/с, то подними веб-сервер крестовый прямо в своем процессе. C++ http server. Sqlite c++ wrapper.

anonymous ()
Ответ на: комментарий от LINUX-ORG-RU

Но проще и надёжнее писать на C API.

Ню-ню.

С++ ничего в плане безопасности и удобства или защиты от дурака не даст по моему.

По-моему, вы очень сильно заблуждаетесь: https://www.youtube.com/watch?v=ngsilquWgpo

eao197 ★★★★★ ()

Вот готовый пример маленького плюсового CRUD-приложения с использованием SQLite: https://github.com/Stiffstream/restinio-crud-example

Что вы подразумеваете под «вкомпилировать БД SQLite3 в свою C/C++-программу?» не понял. SQLite – это библиотека, он подлинковывается к вашему исполнимому файлу, отдельно инсталлировать ее на машине не нужно.

eao197 ★★★★★ ()
Ответ на: комментарий от Diano4kaNyashenka

Вот тебе фреймворк - https://github.com/uNetworking/uWebSockets.

Это нужно будет устанавливать на сервере хостинга?

И судя по тому что ты берешь sqlite, ты можешь хранить все данные тупо в памяти, сбрасывая их на диск... временами... не знаю как тебе надо.

Ничего нельзя хранить в памяти. Время работы скрипта 1 секунда максимум по-моему, иначе менять тариф.

xwicked ★★ ()
Последнее исправление: xwicked (всего исправлений: 1)
Ответ на: комментарий от eao197

SQLite – это библиотека, он подлинковывается к вашему исполнимому файлу, отдельно инсталлировать ее на машине не нужно.

Это хорошая новость. Но даст ли хостинг загрузить её в память? Или он потом выгрузит её, после завершения работы скрипта или мне самому выгружать?

xwicked ★★ ()
Ответ на: комментарий от Diano4kaNyashenka

Тогда забей на то что я сказал. Но где ты нашел CGI хостинг, и почему именно он?

А клиент будет на Qt/C++ как на компе, так и на телефоне

В принципе на хостинге можно же использовать разрешённый PHP с SQLite? А как же полнота очучений от процесса?
Сейчас почитаю про то что идёт в PHP разрешённого на сервере.

xwicked ★★ ()
Ответ на: комментарий от xwicked

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

Насколько я помню, классический CGI подразумевает запуск отдельного процесса (CGI-скрипта) на каждый входящий запрос. Если вы пишете CGI-скрипт на C++, то у вас просто будет приложение с кодом SQLite внутри. Web-сервер его запустит при получении запроса, как только запрос обработается, приложение просто завершит свою работу.

Соответственно, в таком случае вашей основной проблемой будет совместный доступ к одному файлу БД из нескольких параллельно работающих CGI-скриптов.

Может ваш хостер кроме Web-сервере вам еще и какой-нибудь MySQL или MSSQL дает, который уже у него развернут и работает?

eao197 ★★★★★ ()
Ответ на: комментарий от eao197

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

2 часа в день процессор
1ГБ ОЗУ.

Соответственно, в таком случае вашей основной проблемой будет совместный доступ к одному файлу БД из нескольких параллельно работающих CGI-скриптов.

Пока будет один клиент. Я собираюсь написать АРМ для своей мастерской, а на хостинг выгружать или копию БД заказов или разместить оригинал. Если копию, то только мой телефон будет обращаться, поэтому ожиданий доступа к БД тоже не будет.
Это будет проблемой для будущего моего проекта.

Может ваш хостер кроме Web-сервере вам еще и какой-нибудь MySQL или MSSQL дает, который уже у него развернут и работает?

Предоставляет, аж 5 MySQL баз, но знания то где-то нужно взять. Тем более мне не нужно всё, только 5 запросов. Создание таблицы, удаление, добавление/удаление записей и выборка. Больше ничего. С SQLite я уже знаком и знаю как в Qt его использовать.
Подождите..., у меня же GNU / Linux на сервере хостера. Может мне на полноценном Qt/C++ написать сервер-CGI-скрипт и собрать статически? :D :D :D

xwicked ★★ ()
Ответ на: комментарий от Diano4kaNyashenka

Веб-сокеты не всегда нужны. А что до CGI - можно ведь и не делать CGI! Просто запускаешь свой демон, он слушает определенный порт. Как пришло что туда - ОК, работаем. Т.е. вместо того, чтобы запускать на каждый вызов по процессу, будет запускаться по потоку - как в fastCGI.

Я [url=https://github.com/eddyem/zeiss_utils/tree/master/Z1000_focus]вот здесь[/url] так делал. Добавить туда еще аутентификацию и вуаля!

anonymous ()
Ответ на: комментарий от xwicked

В смысле - демонов нельзя? Это что ж за хостинг такой дебильный?

Ну, трындец... Это тогда тебе реально только CGI...

До того, как перейти на вебсокеты, я тоже CGI вовсю пользовал. Даже начал библиотечку рисовать. Там самый минимум: куки, веб-запросы и базовая работа с sqlite.

anonymous ()
Ответ на: комментарий от xwicked

С SQLite я уже знаком и знаю как в Qt его использовать.

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

Так что напишите свой CGI на Qt, если больше ничего не умеете и умеющих людей нанять не можете, и пусть этот CGI работает с уже запущенной хостером БД MySQL.

eao197 ★★★★★ ()
Ответ на: комментарий от Diano4kaNyashenka

ТС сказал уже выше: демоны запрещены. Т.е. ничего в духе вебсокетов или fast-CGI не получится! Остается только CGI. Ну или опуститься на самое днище и пыхпых заюзать.

anonymous ()
Ответ на: комментарий от Diano4kaNyashenka

Что значит «не ограничен»? ТС ограничен. Ему либо по-пацански CGI писать, либо по-пидарски пыхпыхом пользоваться. Больше вроде нет вариантов, если демоны запустить нельзя.

С другой стороны, лично мне непонятно, как так может быть, что нельзя демона запустить? Ну, допустим, по крону хрен запустишь. Но ведь можно сделать псевдозапрос при открытии странички, который будет с пустым аргументом вызывать псевдоCGI. Если этот демон уже запущен, ничего не будет, только пустой ответ. А если не запущен, то запустится. Вуаля - решили проблему невозможности запуска демонов.

anonymous ()
Ответ на: комментарий от anonymous

И вообще, демонов можно запускать и при помощи at или локального крона, коль у ТС нет доступа к руту! Неужто там на хостинге все так уныло, что даже cron и atd не запущены?

anonymous ()

1 - Можно ли работать с SQLite, используя C++ не C-функции, которые я нашёл в примерах в интернете?

Чего же нельзя?
Понадобился мне SQLite … Вообщем за день перевел исходники на C++ /все Ok!/.

Владимир

anonymous ()
Ответ на: комментарий от anonymous

У меня два вопроса. 1 - Можно ли работать с SQLite, используя C++ не C-функции, которые я нашёл в примерах в интернете? 2 - Можно ли будет вкомпилировать БД SQLite3 в свою C/C++-программу?

1 - можно.
2 - можно.

Владимир

anonymous ()
Ответ на: комментарий от anonymous

Что значит «не ограничен»?

Если ты не ограничен дебильным хостингом, то и выбирать CGI смысла нету. Вот.

А если не запущен, то запустится.

Ну там же вроде ограничение на время выполнения «скрипта» в 1 секунду. Все убьется возможно просто.

Diano4kaNyashenka ()
Ответ на: комментарий от anonymous

Ну и как ты в этом случае надеешься вообще работать? Если у тебя сайт будет доступен лишь 2 часа в день…

Процессор сервера виртуального хостинга обрабатывает в среднем около сотни запросов за одну секунду. Это значит, что, если страница вашего сайта была загружена за одну секунду, процессор мог затратить на обработку этого запроса примерно в сто раз меньше времени. Процессорное время в этом случае может составить от 0.01 до 0.1 секунд - это обычное время для выполнения запроса.

Обычно клиенты виртуального хостинга с небольшими сайтами используют в среднем 5 минут процессорного времени в день. Более тяжелый сайт с большим количеством плагинов, виджетов, cron-задач и обширной базой данных может потреблять 50-60 минут процессорного времени в день. Наш лимит в 120 минут является самым оптимальным решением и лучшим предложением на рынке виртуального хостинга на данный момент. Если для работы сайта требуется больше 120 минут процессорного времени в день, это признак того, что проект вырос и его пора переносить на более производительный тариф.

Мой текущий CGI-скрипт кроссворда загружает кроссворд за 7мс. По их подсчётам, процессор работал 70мкс над моим скриптом. Всё должно быть ОК.

xwicked ★★ ()

2 - Можно ли будет вкомпилировать БД SQLite3 в свою C/C++-программу?

Зачем ее «вкомпилировать»?
Чем dll или elf не устраивает?

Владимир

anonymous ()
Ответ на: комментарий от anonymous

И ещё, мой кроссворд, при использовании Ajax с C++-сервером загружает слова с задержкой в 0,5-1с периодически 30-50% запросов. Это означает, что при использовании чего-то другого на сервере, моя программа будет тупить по несколько секунд, что недопустимо для моей нервной системы. Я не смогу работать с этой программой.

xwicked ★★ ()
Последнее исправление: xwicked (всего исправлений: 1)
Ответ на: комментарий от Diano4kaNyashenka

Ну там же вроде ограничение на время выполнения «скрипта» в 1 секунду.

Я уже нашёл 2 часа на весь день, но всё равно это не позволяет сильно шиковать.

xwicked ★★ ()
Ответ на: комментарий от Diano4kaNyashenka

VPS можно купить буквально за 100 рублей, с 1gb-ram, 10gb-hdd. Держу в курсе. Можно будет ставить что угодно, возможно даже выбрать свою ОС...

SSD, лимиты на время скрипта и серверы в России?

xwicked ★★ ()
Ответ на: комментарий от Diano4kaNyashenka

Назови хоть один и он будет хуже в 2 раза. Сервера в РФ обязательно, так как у меня скоро будет там клиентская база, чтобы конкурентам не давать повода.
И хватить спамить.

xwicked ★★ ()

Можно конечно в проект на C++ подключить и сишный SQLite.
В чем проблемы то?

Перевел SQLite на С++ лишь из-за того, что планирую задействовать
SQLite для работы с своей метадата базой с использованием SQL.
Кроме того в SQLite хороший API, который можно использовать и без
использования SQLite «как таковой».

Владимир

anonymous ()
Ответ на: комментарий от xwicked

А нормальную впску без этих обескураживающих заскоков тебе великий лидер свет нации Ким Чен Ын запрещает или что? Или 3 евро в месяц пробивает маржинальность сириус бизнеса?

anonymous ()