Forum Delphi.cz

Delphi => FireDAC => Téma založeno: matej 04-01-2018, 20:32:26

Název: Návrh optimálního umístění databáze pro aplikaci na závody
Přispěvatel: matej 04-01-2018, 20:32:26
Zdravím,
prosím o pomoc s návrhem, jakým způsobem pracovat s daty v aplikaci na vyhodnocování závodů. Cílem je program pro tvorbu startovních listin pro různé kategorie, dílčí etapy, týmy, apod a zaznamenávání výsledků s vyhodnocením.
Jedná se cca o 5 tabulek s celkovým počtem záznamů do 2.000

Potřeboval bych ale 1) co nejrychlejší práci z jednoho počítače s tím, že databáze bude běžet jen na tomto PC 2) umožnit připojení druhého PC v lokální síti, který by mohl pracovat s daty souběžně 3) v ojedinělých případech, ale do budoucna častěji, bych potřeboval, aby byla databáze uložena na serveru, 1 nebo i více počítačů pracovalo souběžně na stejné databázi a zároven by k databázi přistupovali účástníci závodů přes mobilní telefon pro kontrolu startovní listiny a aktualizovaných výsledků

Důležitá je samozřejmě rychlost ale také právě flexibilita. Ve třetím případě i zabezpečení komunikace.

Pracuji s databázemi MySQL a mám Delphi XE7.

Prosím o jakýkoli nápad, jak byste toto řešili.

Díky
Název: Re:Návrh optimálního umístění databáze pro aplikaci na závody
Přispěvatel: vandrovnik 04-01-2018, 20:41:47
A v čem je vlastně problém? MySQL je možné provozovat jak na "obyčejném" počítači (připojit se dá i z druhého PC - nastavit firewall), tak na serveru (Win, linux...). Já bych teda akorát použil svůj oblíbený Firebird :-) U MySQL jsem vždycky zápasil s velikostí písmen v názvech tabulek, když se databáze přenášela mezi Windows a linuxem.
Název: Re:Návrh optimálního umístění databáze pro aplikaci na závody
Přispěvatel: matej 04-01-2018, 20:57:36
Určitě to jde, o tom také nepochybuji. Spíš nejsem tak zběhlý v tom, jak si s tím nejlépe poradit. Můžu mít pro případ 1 databázi v rámci programu bez instalace lokálního serveru, aby to pro uživatele bylo co nejjednodušší? Může se pak další PC připojit k databázi na souběžně spuštěném počítači s databází bez serveru?
Název: Re:Návrh optimálního umístění databáze pro aplikaci na závody
Přispěvatel: Stanislav Hruška 04-01-2018, 21:01:08
OT: Keď som sa dočítal, že niektoré RDBM vyžadujú len veľké písmena, tak v mojej DB (aj keď to je FB) sa malé písmená nikde nevyskytujú. Pre mudrlantov: okrem údajov :) Aj samotné SQL texty sú len z veľkých písmen.
A ešte otázočka: máš kúpený Add-On Pack pre FireDAC? Ten dodávaný s Delphi umožňuje pracovať len s embeded verziou.
Název: Re:Návrh optimálního umístění databáze pro aplikaci na závody
Přispěvatel: vandrovnik 04-01-2018, 21:03:05
Určitě to jde, o tom také nepochybuji. Spíš nejsem tak zběhlý v tom, jak si s tím nejlépe poradit. Můžu mít pro případ 1 databázi v rámci programu bez instalace lokálního serveru, aby to pro uživatele bylo co nejjednodušší? Může se pak další PC připojit k databázi na souběžně spuštěném počítači s databází bez serveru?

Tohle by asi uměl ten Firebird, ale vyzkoušeno to nemám (hlavně nemám vyzkoušený ten souběžný přístup více strojů k jednomu souboru bez spuštěného serveru).
Název: Re:Návrh optimálního umístění databáze pro aplikaci na závody
Přispěvatel: Delfin 04-01-2018, 21:16:18
Vytvoris business logic vrstvu a pak uz je jedno kde bude DBMS. Ano, pozadavek na "nejrychlejsi praci z jednoho pocitace" tim nesplnis, ale moc nechapu proc by melo pro zavody neco kritickeho existovat. Napr. REST serverem si vytvoris vratka pro budouci mobilni aplikaci a "zajistis zabezpeceni".
Název: Re:Návrh optimálního umístění databáze pro aplikaci na závody
Přispěvatel: Miroslav Baláž 04-01-2018, 22:04:12
.. a zároven by k databázi přistupovali účástníci závodů přes mobilní telefon ..

.. Ve třetím případě i zabezpečení komunikace.

Pracuji s databázemi MySQL a mám Delphi XE7.
Nie je jasné, či máš Delphi vyššie ako Pro.
Ak nie, tak DB Server a aj mobilný telefón môžu byť problém (add on Pack C/S a add OnPack Mobile, každý tak po 1000Eur).
Aj napriek tomu by tu boli určité možnosti, ale nie triviálne. Skôr naopak:
- spomínaný Rest server .. príspevok Delfin
- prípadne SYNOPSE mORMot (pozor ten framework má niekoľko 1000 stranový návod)
http://blog.synopse.info/post/2014/08/11/CrossPlatform-Clients/SmartMobileStudio (http://blog.synopse.info/post/2014/08/11/CrossPlatform-Clients/SmartMobileStudio)
Osobne by som si to veru netrúfol, neviem si predstaviť, ako to zvládnuť jednoducho, bez širokých poznatkov..
Název: Re:Návrh optimálního umístění databáze pro aplikaci na závody
Přispěvatel: matej 05-01-2018, 14:31:25
Díky za podněty. Delphi mám XE7 Architect.

Určitě nemám znalosti, abych se mohl pustit do něčeho, co zkušený programátor řekne, že je složité. Čili případ 2 bych tedy řešil lokálním serverem na jednom z PC s připojením v rámci lokální sítě druhého.
Třetí případ by znamenal externě uložený server a přístup všech počítačů a mobilů přes internet a nebo lokální server s Wifi pro připojení mobilů do lokální sítě.

Je možné při přístupu mobilních telefonů používat databázi MySQL?
Je výhodnější pro první případ - tedy práce pouze na jednom PC, s databází pracovat na lokálním serveru nebo spíše využít komponent pro práci s daty pouze v rámci programu?
Je možné nainstalovat server MySQL nějakým "tichým" přednastaveným způsobem, aby to proběhlo v rámci instalace programu jako takového? (ideálně, aby to nijak nezatěžovalo uživatele)

Díky
Název: Re:Návrh optimálního umístění databáze pro aplikaci na závody
Přispěvatel: Delfin 05-01-2018, 14:50:25
Určitě nemám znalosti, abych se mohl pustit do něčeho, co zkušený programátor řekne, že je složité. Čili případ 2 bych tedy řešil lokálním serverem na jednom z PC s připojením v rámci lokální sítě druhého.

Implementace zminovaneho REST serveru a klienta neni az tak slozita (viz. webinar (https://www.embarcadero.com/rad-in-action/rest)), byt jsem ho nikdy v produkci nepouzil a spis bych se mu vyhnul ve prospech jinych jazyku. Ale tvrdi to osel ktery se tahnul vic nez 12 let (nepocitaje takovych 6 let ucebnich) za Delphi a ono mu pod rukama umira :-[ :) [kdyby se me zeptal klient ktery takovou aplikaci chce naprogramovat seriozne, v Delphi, poradil bych mu jiny jazyk byt je Object Pascal muj "rodny jazyk"]

Je možné při přístupu mobilních telefonů používat databázi MySQL?
Je výhodnější pro první případ - tedy práce pouze na jednom PC, s databází pracovat na lokálním serveru nebo spíše využít komponent pro práci s daty pouze v rámci programu?
Je možné nainstalovat server MySQL nějakým "tichým" přednastaveným způsobem, aby to proběhlo v rámci instalace programu jako takového? (ideálně, aby to nijak nezatěžovalo uživatele)

- pokud vytvoris z telefonu na server tunel, nemel by byt problem
- tomu bodu nerozumim, ale chapal bych to jako dotaz ve smyslu "mam nainstalovat MySQL spise na stroj v siti nez na kazdeho klienta?"; pokud to chapu spravne, dal bych se cestou centralni instalace protoze pokud se ma ta aplikace rozvijet, je jen otazkou casu kdy bude stejne (nejen) kvuli synchronizaci treba cetralizovani databaze zajistit
- verim ze to mozne je (MySQL nepouzivam), nasel jsem jen referenci k verzi 5.5 (https://dev.mysql.com/doc/refman/5.5/en/windows-installer-msi-quiet.html)
Název: Re:Návrh optimálního umístění databáze pro aplikaci na závody
Přispěvatel: matej 05-01-2018, 15:56:05

 [kdyby se me zeptal klient ktery takovou aplikaci chce naprogramovat seriozne, v Delphi, poradil bych mu jiny jazyk byt je Object Pascal muj "rodny jazyk"]
A jaký by si doporučil? Začínal jsem na škole s Pascalem a pokračoval tak plynule do Delphi, kde mi vyhovuje jednoduchost rozhraní se spoustou dostupných komponent, které mi dost ulehčují život.

- pokud vytvoris z telefonu na server tunel, nemel by byt problem
- tomu bodu nerozumim, ale chapal bych to jako dotaz ve smyslu "mam nainstalovat MySQL spise na stroj v siti nez na kazdeho klienta?"; pokud to chapu spravne, dal bych se cestou centralni instalace protoze pokud se ma ta aplikace rozvijet, je jen otazkou casu kdy bude stejne (nejen) kvuli synchronizaci treba cetralizovani databaze zajistit
- verim ze to mozne je (MySQL nepouzivam), nasel jsem jen referenci k verzi 5.5 (https://dev.mysql.com/doc/refman/5.5/en/windows-installer-msi-quiet.html)

Druhou otázkou jsem myslel buď na každé uživatelské PC nainstalovat server, ze kterého by aplikace brala data a nebo použít Memtable/ClientDataSet. Pokud by tedy uživatel neměl v plánu, aby na závodě pracovalo víc PC najednou a nebo aby se k datům přistupovalo z mobilů, tak jestli není jednodušší a rychlejší data ukládat v paměti při běhu aplikace.
Název: Re:Návrh optimálního umístění databáze pro aplikaci na závody
Přispěvatel: matej 05-01-2018, 16:00:58
Pro upřesnění ještě dodávám, že závody probíhají na různých místech a od různých organizátorů. Takže uživatelů je poměrně dost. Proto přemýšlím, jestli musí mít každý nainstalovaný server, i když nepotřebuje přístup z jiných PC nebo mobilů.
Název: Re:Návrh optimálního umístění databáze pro aplikaci na závody
Přispěvatel: Delfin 05-01-2018, 18:23:04
V tomto pripade nejspis PHP 8) A rychlost co resis je s dnesnim vykonem otazka zlomku sekund, ne-li milisekund - i pres rozumne nastavenou sit. A poradatele bych rozlozil logicky, co poradatel, to server - idealne separovany, centralni (i za cenu toho ze by na nem z financnich duvodu pracoval treba nejaky predseda zavodu ci neceho takoveho).
Název: Re:Návrh optimálního umístění databáze pro aplikaci na závody
Přispěvatel: pf1957 05-01-2018, 19:29:46
Implementace zminovaneho REST serveru a klienta neni az tak slozita (viz. webinar (https://www.embarcadero.com/rad-in-action/rest))
Je otazka, jestli aplikace bez HATEOAS je REST aplikace, nebo jen buzzword ;)

Ale jinak s tebou souhlasim: DB bych zaboxoval do sluzby. Jestli to bude REST nebo SOAP nebo neco jineho je jedno, zrovna tak jaky bude typ RDBMS nebo jestli pobezi lokalne nebo na jinem pocitaci. To by mela byt jen otazka konfigurace. A napsat jednoduchy HTML serverik treba nad Synapsi je brnkacka - my ho v Delphi davali skoro do kazde aplikace.

Jen s tim PHP bych si nic nezacinal  ;)
Název: Re:Návrh optimálního umístění databáze pro aplikaci na závody
Přispěvatel: matej 05-01-2018, 20:14:35
Díky, podívám se na googlu na ten REST, protože moje znalosti jsou hodně omezené a o tomhle nevím nic.
Kdyby si někdo chtěl dát tu námahu a polopaticky mi vysvětlit jak to funguje a co by to v mém případě mělo provádět, budu opravdu rád.

Zatím jsem pracoval jen s vazbou Delphi>ZeosLIb>MySQL v prehistorickém Delphi 7.
Název: Re:Návrh optimálního umístění databáze pro aplikaci na závody
Přispěvatel: Delfin 05-01-2018, 22:50:50
Implementace zminovaneho REST serveru a klienta neni az tak slozita (viz. webinar (https://www.embarcadero.com/rad-in-action/rest))
Je otazka, jestli aplikace bez HATEOAS je REST aplikace, nebo jen buzzword ;)

Ale jinak s tebou souhlasim: DB bych zaboxoval do sluzby. Jestli to bude REST nebo SOAP nebo neco jineho je jedno, zrovna tak jaky bude typ RDBMS nebo jestli pobezi lokalne nebo na jinem pocitaci. To by mela byt jen otazka konfigurace. A napsat jednoduchy HTML serverik treba nad Synapsi je brnkacka - my ho v Delphi davali skoro do kazde aplikace.

Jen s tim PHP bych si nic nezacinal  ;)

S PHP? Ja taky ne, ale je multiplatformni ;) A dokud nema Delphi implementovane v Oknech ani "nove" thread pool API v kombinaci s async sockety (coz doda vyznamny narust vykonu serverovych aplikaci i pred planovanym poklesem kvuli chybe Intel), nema pro me smysl radit lidem si s nim zacinat v serioznich serverovych aplikacich ;) Zalezi jak moc seriozni je tato. I tak bych ji ale zaboxoval do sluzby se kterou si pripadne budou rozumet i "ostatni programatori".
Název: Re:Návrh optimálního umístění databáze pro aplikaci na závody
Přispěvatel: matej 07-01-2018, 13:58:13
Tak začínám tomu snad trochu rozumět.

Bylo by dobré tedy řešit všechny tři případy takhle?
Vždy na PC nainstalovat lokální server a připojit aplikaci přes FireDAC (i při jednom PC a bez telefonů)
Pro připojení druhého PC připojit přes lokální sít (wifi) přímo k DB přes FireDAC
Pro připojení telefonů - telefony se připojí také k Wifi a k aplikaci přes Datasnap+REST

Dává to takhle smysl?
Jaký je rozdíl mezi přístupem přes DataSnap s HTTP a Datasnap+REST?
Zvládne průměrný notebook spuštěný server a samostatnou práci v databázi přes aplikaci + připojení druhého PC k databázi na tomto notebooku + přístupy cca 50-150 telefonů pro zobrazování dat?

Telefony nebudou zapisovat ani upravovat žádná data, jen číst.

Název: Re:Návrh optimálního umístění databáze pro aplikaci na závody
Přispěvatel: Delfin 08-01-2018, 11:14:05
Tak začínám tomu snad trochu rozumět.

Bylo by dobré tedy řešit všechny tři případy takhle?
Vždy na PC nainstalovat lokální server a připojit aplikaci přes FireDAC (i při jednom PC a bez telefonů)
Pro připojení druhého PC připojit přes lokální sít (wifi) přímo k DB přes FireDAC
Pro připojení telefonů - telefony se připojí také k Wifi a k aplikaci přes Datasnap+REST

Dává to takhle smysl?

Dava. Jen budes psat dvoji interface (jeden pro prime spojeni s RDBMS a druhy pro REST server).

Jaký je rozdíl mezi přístupem přes DataSnap s HTTP a Datasnap+REST?

Nevim co tim myslis nebo kde jsi na to narazil. Ptas se jaky je rozdil mezi TDSRESTServer a TDSHTTPServer?

Zvládne průměrný notebook spuštěný server a samostatnou práci v databázi přes aplikaci + připojení druhého PC k databázi na tomto notebooku + přístupy cca 50-150 telefonů pro zobrazování dat?

Telefony nebudou zapisovat ani upravovat žádná data, jen číst.

Snad ano, ale mel by sis jej vyzkouset pod umelou zatezi (REST server muzes otestovat trebas pomoci Apache HTTP server benchmarking tool (http://httpd.apache.org/docs/current/programs/ab.html)).
Název: Re:Návrh optimálního umístění databáze pro aplikaci na závody
Přispěvatel: matej 08-01-2018, 20:24:03
Tak začínám tomu snad trochu rozumět.

Bylo by dobré tedy řešit všechny tři případy takhle?
Vždy na PC nainstalovat lokální server a připojit aplikaci přes FireDAC (i při jednom PC a bez telefonů)
Pro připojení druhého PC připojit přes lokální sít (wifi) přímo k DB přes FireDAC
Pro připojení telefonů - telefony se připojí také k Wifi a k aplikaci přes Datasnap+REST

Dává to takhle smysl?

Dava. Jen budes psat dvoji interface (jeden pro prime spojeni s RDBMS a druhy pro REST server).
OK, tak to takhle udělám. Nejsem si jistý, jak by to šlapalo při práci pouze přes REST server i na zapisujících PC.

Jaký je rozdíl mezi přístupem přes DataSnap s HTTP a Datasnap+REST?

Nevim co tim myslis nebo kde jsi na to narazil. Ptas se jaky je rozdil mezi TDSRESTServer a TDSHTTPServer?
Ano, asi tak. Pro mě by bylo asi nejsnazší vytvořit projekt DataSnap REST Application a dále Stand-alone app>VCL app>TDataModule
V této aplikaci bych potom vytvořil připojení k DB a spouštěl REST server pro připojení mobilů.
Zvládne průměrný notebook spuštěný server a samostatnou práci v databázi přes aplikaci + připojení druhého PC k databázi na tomto notebooku + přístupy cca 50-150 telefonů pro zobrazování dat?

Telefony nebudou zapisovat ani upravovat žádná data, jen číst.

Snad ano, ale mel by sis jej vyzkouset pod umelou zatezi (REST server muzes otestovat trebas pomoci Apache HTTP server benchmarking tool (http://httpd.apache.org/docs/current/programs/ab.html)).
Ok, až to bude někdy hotové, tak to vyzkouším.
Název: Re:Návrh optimálního umístění databáze pro aplikaci na závody
Přispěvatel: Delfin 09-01-2018, 22:40:39
Dava. Jen budes psat dvoji interface (jeden pro prime spojeni s RDBMS a druhy pro REST server).
OK, tak to takhle udělám. Nejsem si jistý, jak by to šlapalo při práci pouze přes REST server i na zapisujících PC.

Je tam overhead v podobe prijeti a "precteni" pozadavku na zapis (REST requestu). Za cenu dvojiho interface.

Moznosti je spousta. Co me napada trebas, nevim jak ma Delphi ten REST implementovany, ale neco malo bys mohl ziskat "integrovanim" obou interface, kdy bys napr. po commitu zaznamu primym RDBMS interface predpripravil do cache session klientu potrebne zaznamy nebo primo sestavil REST response pro REST interface (alespon na casove kriticke operace). Tim by klienti nemuseli pres REST opakovane sahat do databaze. Pak treba moznost chodit si jen pro delty mezi tim co uz na klienta stahli a co je na serveru noveho. Atd.

Tech moznosti i optimalizaci bude dost ::) :)