Forum Delphi.cz

Databáze => MySQL => Téma založeno: Vladimir64 03-03-2021, 19:46:36

Název: TMySQLDatabase
Přispěvatel: Vladimir64 03-03-2021, 19:46:36
Hi, udělal jsem program využívající databázi MySql a pro přístup k tabulkám využívám komponenty DAC for MySql. Všechno běží jak má, pokud využívám localserver (TMySQLDatabase: Host: prázdné nebo "localhost", Port: 3306, DatabaseName: xxx, User: xxx, Password: xxx). Program provádí rozsáhlé výpočty, které trvají řadu dní. Abych to zkrátil chci spustit program na větším počtu počítačů. K tomu jsem Mysql databázi přesunul na webmysql.forpsi.com. Nedaří se mi ale k databázi připojit. Ať dělám, co dělám při pokusu připojit se to hází chybu: MySQL Error Code: (2003) Can´t connect to MySQL server. Má s tím někdo zkušenosti?
Název: Re:TMySQLDatabase
Přispěvatel: vandrovnik 03-03-2021, 20:35:07
Ahoj, a poslouchá ten server na onom portu? Funguje následující?
telnet webmysql.forpsi.com 3306
Název: Re:TMySQLDatabase
Přispěvatel: Vladimir64 03-03-2021, 21:10:03
Připojování k webmysql.forpsi.com...Nelze navázat spojení s hostitelem. na portu 3306: Připojení se nezdařilo
pokračuj prosím ... já hledal chybu v nastavení komponent a chyba je jinde.
Název: Re:TMySQLDatabase
Přispěvatel: vandrovnik 03-03-2021, 22:21:16
Ony takovéhle služby ani nebývají vystrčené do internetu. Jestli je to pronajatý virtuální počítač, tak by se k němu třeba dalo připojovat přes VPN a tu MySQL komunikaci hná přes VPN. Jestli je to ale jen hosting, tak se obávám, že nebudou chtít ten port MySQL otevřít do světa.
Název: Re:TMySQLDatabase
Přispěvatel: Vladimir64 03-03-2021, 22:49:12
Je to jen hosting. Databáze je zřízena na samostatném servu (každá, takže zjevně virtuálním) Zkusím to prověřit na forpsi. Ale snad pronajímají prostor k tomu, abych mohl k tabulkám přistupovat odkudkoliv, z jakéhokoliv zařízení. Pokud lze data spravovat pouze přes jejich administrační systém phpMyAdmin, tak to ztrácí kouzlo.
Název: Re:TMySQLDatabase
Přispěvatel: Vladimir64 04-03-2021, 00:26:29
odpověď je:
bohuzel externi pristup k MySQL databazi je z nasi strany zakazany. Sprava probiha pres rozhrani webmysql.forpsi.com.

Díky za radu. Problém je vyřešený. Bohužel ne tak, jak jsem si představoval. Tudy cesta nevede, bohužel. Instalovat Apache a Mysql na každý z počítačů na kterém chci spustit program je nepraktické, z důvodu časté aktualizace tabulek.


Název: Re:TMySQLDatabase
Přispěvatel: pf1957 04-03-2021, 07:03:08
Díky za radu. Problém je vyřešený. Bohužel ne tak, jak jsem si představoval.
DB obecne se pres verejne site nezpristupnuji.
Název: Re:TMySQLDatabase
Přispěvatel: pf1957 04-03-2021, 08:06:29
odpověď je:
Instalovat Apache a Mysql na každý z počítačů na kterém chci spustit program je nepraktické, z důvodu časté aktualizace tabulek.
No a je nejaky problem nekam postavit vlastni server s nainstalovanou MySQL a k nemu by se vsechny pocitace pripojovaly? V LAN bez problemu, ve WANu pristupne pres VPN.
Název: Re:TMySQLDatabase
Přispěvatel: Vladimir64 04-03-2021, 08:52:14
forpsi mi už nabídlo vlastní server a voucher na dva měsíce na vyzkoušení. Přes víkend to zkusím zprovoznit. Dopíšu potom do tohoto vlákna, jestli se dílo povedlo. Díky za reakce
Název: Re:TMySQLDatabase
Přispěvatel: Vladimir64 06-03-2021, 01:08:42
vyřešeno. Virtuální server v cloudu, s OS Windows a nainstalovanou Mysql. Není potřeba VPN připojení. Funguje to přesně jak potřebuji. Pro ty z Vás, pro které je programování koníčkem tak jako pro mně a vytváření algoritmů je cosi jako pro jiné luštění křížovek, pro ty kteří mají radost když algoritmus dělá přesně to co chcete a máte neustále pocit, že Vám ujel vlak (v případě programování spíš šinkansen), nepokoušejte se nakonfigurovat server a nainstalovat na něj mysql sami. Z důvodu Vaší a internetové bezpečnosti :-)
Název: Re:TMySQLDatabase
Přispěvatel: František 10-03-2021, 15:19:43
na co tam davat ms win ked mysql bezi na linuxe a s postatne mensou reziou
Název: Re:TMySQLDatabase
Přispěvatel: Vladimir64 11-03-2021, 16:47:49
ano, to je pravda. Server s Linuxem je za nějakých 80 Kč měsíčně, s Windows za cca 350 Kč. Musel bych se podívat na přesné částky za kolik to lze pořídit. Řeším teď ale jiný problém. Program na kterém pracuji, provádí řadu výpočtů a příkaz SELECT mám uvnitř cyklu. Dokud jsem pracoval na local disku tak to nebyl problém, ale se vzdáleným přístupem na server to je neúnosné. Má to nějaké elegantní řešení bez toho, abych při tom ztratil výhody databáze? 
Název: Re:TMySQLDatabase
Přispěvatel: vandrovnik 11-03-2021, 18:21:20
Trochu pomůže stáhnout data pokud možno najednou, nedělat pokaždé nový select. Pokud to tedy jde...
Název: Re:TMySQLDatabase
Přispěvatel: Vladimir64 11-03-2021, 18:29:29
jistěže to jde, ale přijdu o všechno, co sql příkazy nabízí. Můžu stáhnout vybraná data a naplnit nimi třeba stringlist, nebo stringgrid a dál pracovat jen s nimi, ale to už je úplně jiný příběh. Tabulky mají tisíce řádků a pracuji s nimi v celém jejich rozsahu. To už snad bude lepší instalovat na každý počítač mysql a server využívat jen pro aktualizaci tabulek
Název: Re:TMySQLDatabase
Přispěvatel: vandrovnik 11-03-2021, 18:34:49
Nemůže vlastně celý ten program běžet na tom virtuálu, musí běžet na stanicích?
Název: Re:TMySQLDatabase
Přispěvatel: Vladimir64 11-03-2021, 18:48:03
to je zajímavý nápad... to mně nenapadlo. Přes víkend to vyzkouším. Alespoň porovnám rychlost výpočtu na serveru a na localdisku. Znovu přidám do vlákna, jestli to je cesta. Snad tato diskuse pomůže i jiným. Díky
Název: Re:TMySQLDatabase
Přispěvatel: Vladimir64 14-03-2021, 10:55:23
vyzkoušeno. Spustit program na serveru není problém, ale nesplňuje to to, co chci dosáhnout. Spustit výpočet na více počítačích současně. Tak jak je server nakonfigurován, je výpočet na serveru pomalejší, než když ho spustím na stanici. To by asi šlo zrychlit alokací dalších zdrojů na serveru, ale ani tak to nebude dostatečné. Rozhodl jsem se proto využívat server jen pro aktualizaci tabulek před vlastním spuštěním výpočtu. Tím dosáhnu toho, že budu moci spustit program na libovolném počtu počítačů (každý bude muset mít nainstalovaný Apache a Mysql) a přitom bude stačit udržovat aktuální jen db na serveru.
Název: Re:TMySQLDatabase
Přispěvatel: pf1957 14-03-2021, 13:02:48
server nakonfigurován, je výpočet na serveru pomalejší, než když ho spustím na stanici. To by asi šlo zrychlit alokací dalších zdrojů na serveru, ale ani tak to nebude dostatečné.
Mam podobnou zkusenost s MS SQL serverem: vyvoj jsme delali na lokalnich instalacich a kdyz jsme pak ve virtualu spustili MS SQL, v sousednim virtualu bezela aplikace a v dalsim IIS (tam byla rychlost dobra), tak to bylo stejne pomalejsi nez na ThinkPadu, vzdor radove vykonejsimu zelezu.
Jadro takovych problemu je pravdepodobne v tom, ze lokalne se nepracuje pres TCP/IP, ale vetsinou pres pipes apod. cili de facto pres IPC v ramci OS.

Take slo o vypocetne narocnou aplikaci, ktera si tahala spoustu dat na klienta a dost jich zapisovala zpatky do DB jako mezivysledky.  A nepovedlo se s tim na strane serveru nic udelat, i kdyz jsme se dost snazili. Samozrejme princip, ze se vypocty delaji na klientske strane, jde proti smyslu client-server paradigmatu - tam by se to melo odehravat v SP na strane serveru. Ale kdo by to v tech SP matlal :-(

Pokud na klientovi nepotrebujes persistentni data, tak by mohlo byt reseni si ta data ze spolecneho serveru stahnout a nasackovat do nejakych vhodnych generickych struktur.

Název: Re:TMySQLDatabase
Přispěvatel: Jan Fiala 16-03-2021, 12:11:55
Pro rychly pristup k datum se pouzivaji InMemory databaze - cela databaze je v pameti.
Jakym zpusobem a proc vlastne chces rozhazovat praci mezi stanice? kazda si stahne podmnozinu dat, kterou zpracovava?
Psal jsi o tom, ze se pracuje s daty v celem rozsahu. Jakym zpusobem rozdelis ukoly jednotlivým stanicim?
Asi by ses musel trochu víc rozepsat o tom, co vlastne chces delat.
Název: Re:TMySQLDatabase
Přispěvatel: Vladimir64 16-03-2021, 20:03:27
analyzuji algoritmy sázkových kanceláří. K tomu zpracovávám data za posledních 20 let a simuluji různé strategie. To ale není téma do tohoto fóra. Možností jak práci rozdělit mezi stanice mám celou řadu. Jedna stanice bude provádět výpočty Premier League, druhá LaLigy a třetí třeba Bundesligy. Výpočet můžu i pozastavit s uložením mezivýsledků a znovu spustit třeba na jiné stanici. Některé výpočty provádím "hrubou silou" a ty jsou časově a početně hodně náročné.
Děkuji za tip inMemory databáze. Zkusím si k tomu něco nastudovat
Název: Re:TMySQLDatabase
Přispěvatel: Vladimir64 16-03-2021, 20:39:12
k odpovědi výše... persistentní data na stanicích nepotřebuji. Jak jsem psal výše, mohl bych data stáhnout ze serveru a dál pracovat s nimi. Momentálně ale hledám cestu jak pracovat s db. Jinak budu muset přeprogramovat celé výpočty. Chci zprovoznit několik pocket PC (micro, mini nebo jak se těm asijským krabičkám říká). Jsou pro výpočty pomalejší, ale může jich běžet najednou hodně. Mně v podstatě nevadí, že výpočet trvá třeba dva týdny, ale potřebuji jich mít spuštěných najednou více. Jeden zkušební Pocket PC W5 Pro už běží a počítá. Každých 24 hodin uloží mezivýsledky (pro jistotu) a po ukončení výpočtu uloží výsledky.
Název: Re:TMySQLDatabase
Přispěvatel: pf1957 16-03-2021, 22:08:51
hledám cestu jak pracovat s db.
Ja vidim potiz v tom, ze neni DB jako DB...

Takze jestlli to mas napsane proti MySQL, tak bud z hrusky dolu co se rychlosti tyce nebo nezbyde pouzit lokalni instalaci MySQL a nejak replikovat data mezi serverem. Ale zalezi, jak mas SQL prenesitelny na jiny RDBMS -> pak by se mozna na stanicich dalo uvazovat o nejake embedded DB, ktera se v podstate neinstaluje, jen se prida k aplikaci .DLL, jako je Firebird.

Samotne FireDAC v Delphi nabizi jakesi siditko v podobe TFDLocalSQL a sadou TFDMemTables, ale nikdy jsem to nepouzil, takze moznosti neznam.

Treba SQLite se zadanim :MEMORY: misto jmena DB souboru da spustit jako in-memory DB. My ji kdysi v jednom projektu pouzili prave na klientech proti MySQL serveru, ale SQLite je pro radu programatoru "divna" databaze, protoze puvodne mela jen PK jako int a vsechna ostatni pole jako ASCIIZ, ale postupem casu to zacali pod tlakem DB verejnosti ohybat smerem k beznym RDBMS, takze se mi prestala libit. A uz jsem v ni hafo let taky nic nedelal, takze jeji skutecny stav neznam.

S temi ostastnim in-memory DB bude v Delphi nejspis problem, ale uvidis.
Název: Re:TMySQLDatabase
Přispěvatel: Vladimir64 16-03-2021, 23:38:11
step by step. Nejdříve zkusím před spuštěním výpočtu aktualizovat data ze serveru na klienta s nainstalovanou Mysql a dále výpočet poběží už jen lokálně. Tohle by mohlo fungovat a asi to nedá moc práce. Možná bych mohl zkusit spustit víc instancí programu a změřit co to udělá s rychlostí výpočtu. V dalším kroku se musím seznámit s komponentami FireDAC, na první pohled to vypadá, že bych mohl naplnit TFDMemTables a dál pracovat s touto tabulkou pomocí standardních sql příkazů bez instalace Mysql na stanicích. Díky za rady
Název: Re:TMySQLDatabase
Přispěvatel: Vladimir64 18-03-2021, 22:36:09
Prozatím považuji problém za vyřešený. Děkuji všem kdo mně navedli správným směrem. Mysql je instalovaná jak na serveru, tak i na stanicích. Data aktualizuji pouze na serveru. Před spuštěním výpočtů na stanicích se aktualizují data ze serveru. Vyžaduje to dva řádky kódu.

Na formulář je potřeba umístit a nastavit správně komponenty:
TMySQLDatabase 2x
TMySQLTable 2x
TDataSource 2x
jednu sadu nastavit na databázi na serveru a druhou na databázi na stanici
Dále komponenty:
TFDBatchMove
TFDBatchMoveDatasetWriter
TFDBatchMoveDatasetReader
nastavit je na zdrojovou a cílovou tabulku.

a ty dva řádky kódu jsou:
DataContainerForm.ResultsTab.EmptyTable;
DataContainerForm.FDBatchMove1.Execute;

  :)