Baza de date în cloud

După cum probabil ştiţi, dezvolt un program de facturare. Sub capotă este un engine SQLite, modificat să permită şi conexiuni TCP/IP. Teoretic, serverul SQL se poate instala într-un VPS, il accesezi printrun VPN sau tunel SSH şi voila, eşti conectat la “cloud”.

Însa practica e ceea care ne omoară. Utilizatorul tipic al programului de facturare probabil nici nu ştie ce-i ăla VPS, VPN, SSH etc, aşa că încerc să imaginezi o soluţie în care utilizatorul bagă un user şi o parola şi gata, e conectat la cloud.

Am săpat prin Google Clould, Azure, Amazon dar în continuare sunt extrem de confuz, sunt termeni de marketing care mă depăşesc. E şi foarte stufoasă oferta…

Ce recomandaţi pentru un serviciu SQL în cloud? Trebuie să fie extrem de ieftin sau chiar gratuit, pentru că utilizatorul tipic al unui program de facturare face putine inregistrari, interactionarea cu baza de date va fi relativ rara (probabil sub 100 de interogari pe zi).

4 Likes

De ce nu ii faci un sync cu Dropbox/Drive/OneDrive ?

Exista ElephantSQL cu PostgreSQL care are si un plan gratuit.

3 Likes

Nu prea e o idee bună să copiezi bazele de date in timp ce sunt deschise pentru utilizare, risti sa obtii o copie corupta. In plus, asta nu ar permite utilizarea concurenta.

Mersi, o sa arunc o privire. Ideea e să nu găzduiesc la mine datele clienţilor utilizatorulor, nu vreau să am de-a face cu GDPR-ul.

3 Likes

Atunci de ce nu le găzduiești la client?! Anyway, nu am detalii despre aplicăția asta, dar mă gîndesc la ce se întimplă cînd “pică net-ul”…

1 Like

@serghei Saluare!
Cred am studiat problema ta (chiar la tine pe forum) si cred ca putem discuta / colabora pe aceasta directie.

Depinde cum vei dori sa faci sync cu acel sqlite de la client catre clound.
DB in clound, este f. simplu, un VPS cu o baza de date pe care o doresti tu, si un REST API in fata, care sa faca operatiile necesare.
In aceasta situatie, va trebui ca in app-ul tau sa prevezi api request-urile.
Costuri VPS, cativa euro / luna.

Te pot ajuta cu placare in aceasta directie.

Stima

2 Likes

Well, asta e soluţia cea mai la îndemână, la care m-am şi gândit iniţial. Problema cu VPS-ul este că datele clienţilor vor fi în custodia mea, ceea ce nu doresc. Pentru câţiva lei pe lună (dacă ar fi cineva dispus să-i plătească) va trebui să-mi asum responsabilităţi foarte mari. Inclusiv să răspund în faţa instituţiilor statului - daca vreun client este investigat în vreo fraudă, mi se va solicita acces la datele lor (s-a şi întâmplat de câteva ori - a trebui să le explic în scris că datele acelea nu îmi sunt accesibile).

M-am gândit la un truc care ar putea funcţiona, să exploatez API-ul Google Spreadsheet. Baza de date a programului de facturare e relativ simpla, sheet-urile ar putea fi tabelele. Momentan mă bate chestia cu OAuth 2.0 :slight_smile: Trebuie s-o inţeleg, ca s-o pot implementa în C++.

1 Like

Nu sunt foarte familiar cu Google Sheets, esti sigur ca are functionalitatile de care probabil o sa ai nevoie de la o baza de date gen primary keys, foreign keys, indexes, transactions etc. sau ceva echivalent ?

Personal eu nu as face asta, poate gresesc, dar suna a genul ala de decizie care o sa iti dea batai de cap pe viitor.

Sunt curios de ce ai ales C++ :thinking:

Aplicaţia este deja făcută, chestia cu “clould-ul gratuit” ar fi doar un feature în plus. Nu vrei să dai bani, accepţi o mică penalizare de performanţă (dacă există vreuna). Din câte am văzut, Google Spreadsheet suportă un soi de SQL, deci teoritic aş putea face filtrele necesare. Câte facturi poate avea cineva? 10k? 20k? 30k? Mă îndoiesc că va fi sesizată vreo întarziere notabilă. Poate mă înşel, trebuie testat.

De ce nu? :slight_smile: E un limbaj la fel de bun ca oricare altul. Cu avantajul că binarele rezultate sunt extrem de mici şi rapide. Iar utilizatorul atehnic nu trebuie să-şi bata capul cu jdemiile de versiuni de runtime de .NET sau Java sau mai ştiu eu ce alte dependenţe i-aş mai băga pe gât. E un singur .exe, dai click pe el, doar merge.

5 Likes

Interesanta şi chestia cu FaunaDB, trebuie cercetată.

Ce compilator/mediu folosesti pentru cross-platform ?

AWS RDS. Te poți conecta din exterior, poți pune PostgreSQL sau MySQL. Fa niște simulări de costuri, nu cred ca ar fi așa mult la atât de putine operații.

MingW pentru Windows, osxcross pentru MacOS X.

1 Like

https://aws.amazon.com/rds/aurora/serverless/

Amazon Aurora Serverless is an on-demand, auto-scaling configuration for Amazon Aurora (MySQL-compatible and PostgreSQL-compatible editions), where the database will automatically start up, shut down, and scale capacity up or down based on your application’s needs.

Scad mult costurile daca de exemplu noaptea sau in weekend-uri nu foloseste nimeni aplicatia.

2 Likes

Mulţumesc pentru sugestii, până la urmă sunt o grămadă de variante. Poate n-ar fi o idee rea să fac ceva pluggabil şi fiecare să-şi dezvolte interfaţa cu ce serviciu de cloud are chef.

Cine e clientul totuși aici? Sa faci un setup de genul e rezonabil ptr firme de IT, sau firme cu departament IT decent. E un motiv ptr care soluțiile in cloud au prins așa de bine - scapi de bătăile de cap.

2 Likes

Clientul e un nene generic, cu cunoştinţe de IT care tind spre zero, posibil PFA sau patron de SRL de apartament. Ideea era să ofer o soluţie ieftină sau gratis pentru o astfel de categorie. De aia ar fi fost ideal să pot să exploatez cumva unul sau mai multe dintre serviciile free oferite de Google şi aplicaţia doar să ceară user-ul şi pass-ului contului de Gmail, că bănuiesc că toată lumea are aşa ceva.

Care ar fi profitul meu? Well, teoretic aplicaţia mea de facturare este gratuită, dar există şi o versiune licenţiată care oferă mici feature-uri în plus şi suport tehnic. Aş face opţiunea de cloud disponibilă doar în versiunea licenţiată.

1 Like

Ah, gottit.
Daca e pe sqlite nu se poate sincroniza doar fișierul ăla pe Dropbox/OneDrive/Google Drive/etc ca so storage.
Nu soluția propusă mai sus că clientul sa îl pună acolo (care e tricky, desi platformele ar fi read only), ci o integrare a aplicației cu respectivele platforme. De ex, pe mobil folosesc Genius Scan, care are o integrare cu Dropbox și-mi uploadeaza scanurile direct într-un folder de Dropbox.

O bază de date nu prea se poate partaja intr-o chestie gen Dropbox, din mai multe motive:

  1. Trebuie să poată fi accesată concurent, fără a-i fi pusă în pericol integritatea
  2. O bază de date poate fi mare (de exemplu la Wifimag am deja 34177 facturi, ceea ce inseamnă că la fiecare scriere în baza de date trebuie transferat de fiecare dată aproximativ 50 MB de date).
  3. O bază de date nu e un fişier obişnuit, există anumite momente (cum ar fi în timpul unei tranzacţii SQL) când baza de date este într-o stare inconsistentă. Dacă ai salvat-o exact în momentul ăla, tocmai te-ai ales cu o copie coruptă.
1 Like