Autor Téma: TMySQLDatabase  (Přečteno 2004 krát)

Offline Vladimir64

  • Nováček
  • *
  • Příspěvků: 15
  • Karma: 0
    • Verze Delphi: 10.2
TMySQLDatabase
« kdy: 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?

Offline vandrovnik

  • Guru
  • *****
  • Příspěvků: 1274
  • Karma: 51
    • Verze Delphi: 10.3
Re:TMySQLDatabase
« Odpověď #1 kdy: 03-03-2021, 20:35:07 »
Excellent
Rated 1 time
Ahoj, a poslouchá ten server na onom portu? Funguje následující?
telnet webmysql.forpsi.com 3306

Offline Vladimir64

  • Nováček
  • *
  • Příspěvků: 15
  • Karma: 0
    • Verze Delphi: 10.2
Re:TMySQLDatabase
« Odpověď #2 kdy: 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.

Offline vandrovnik

  • Guru
  • *****
  • Příspěvků: 1274
  • Karma: 51
    • Verze Delphi: 10.3
Re:TMySQLDatabase
« Odpověď #3 kdy: 03-03-2021, 22:21:16 »
Excellent
Rated 1 time
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.

Offline Vladimir64

  • Nováček
  • *
  • Příspěvků: 15
  • Karma: 0
    • Verze Delphi: 10.2
Re:TMySQLDatabase
« Odpověď #4 kdy: 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.

Offline Vladimir64

  • Nováček
  • *
  • Příspěvků: 15
  • Karma: 0
    • Verze Delphi: 10.2
Re:TMySQLDatabase
« Odpověď #5 kdy: 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.



Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 3291
  • Karma: 139
    • Verze Delphi: D2007, XE3, DX10
Re:TMySQLDatabase
« Odpověď #6 kdy: 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.

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 3291
  • Karma: 139
    • Verze Delphi: D2007, XE3, DX10
Re:TMySQLDatabase
« Odpověď #7 kdy: 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.

Offline Vladimir64

  • Nováček
  • *
  • Příspěvků: 15
  • Karma: 0
    • Verze Delphi: 10.2
Re:TMySQLDatabase
« Odpověď #8 kdy: 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

Offline Vladimir64

  • Nováček
  • *
  • Příspěvků: 15
  • Karma: 0
    • Verze Delphi: 10.2
Re:TMySQLDatabase
« Odpověď #9 kdy: 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 :-)

Offline František

  • Guru
  • *****
  • Příspěvků: 704
  • Karma: 7
    • Verze Delphi: primárne v XE5, občas 10.2.3 comunity
Re:TMySQLDatabase
« Odpověď #10 kdy: 10-03-2021, 15:19:43 »
na co tam davat ms win ked mysql bezi na linuxe a s postatne mensou reziou

Offline Vladimir64

  • Nováček
  • *
  • Příspěvků: 15
  • Karma: 0
    • Verze Delphi: 10.2
Re:TMySQLDatabase
« Odpověď #11 kdy: 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? 

Offline vandrovnik

  • Guru
  • *****
  • Příspěvků: 1274
  • Karma: 51
    • Verze Delphi: 10.3
Re:TMySQLDatabase
« Odpověď #12 kdy: 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...

Offline Vladimir64

  • Nováček
  • *
  • Příspěvků: 15
  • Karma: 0
    • Verze Delphi: 10.2
Re:TMySQLDatabase
« Odpověď #13 kdy: 11-03-2021, 18:29:29 »
Ok
Rated 1 time
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

Offline vandrovnik

  • Guru
  • *****
  • Příspěvků: 1274
  • Karma: 51
    • Verze Delphi: 10.3
Re:TMySQLDatabase
« Odpověď #14 kdy: 11-03-2021, 18:34:49 »
Nemůže vlastně celý ten program běžet na tom virtuálu, musí běžet na stanicích?

Offline Vladimir64

  • Nováček
  • *
  • Příspěvků: 15
  • Karma: 0
    • Verze Delphi: 10.2
Re:TMySQLDatabase
« Odpověď #15 kdy: 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

Offline Vladimir64

  • Nováček
  • *
  • Příspěvků: 15
  • Karma: 0
    • Verze Delphi: 10.2
Re:TMySQLDatabase
« Odpověď #16 kdy: 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.

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 3291
  • Karma: 139
    • Verze Delphi: D2007, XE3, DX10
Re:TMySQLDatabase
« Odpověď #17 kdy: 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.


Offline Jan Fiala

  • Plnoletý
  • ***
  • Příspěvků: 236
  • Karma: 3
    • Verze Delphi: 10.4.1
    • PSPad editor
Re:TMySQLDatabase
« Odpověď #18 kdy: 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.

Offline Vladimir64

  • Nováček
  • *
  • Příspěvků: 15
  • Karma: 0
    • Verze Delphi: 10.2
Re:TMySQLDatabase
« Odpověď #19 kdy: 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

Offline Vladimir64

  • Nováček
  • *
  • Příspěvků: 15
  • Karma: 0
    • Verze Delphi: 10.2
Re:TMySQLDatabase
« Odpověď #20 kdy: 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.

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 3291
  • Karma: 139
    • Verze Delphi: D2007, XE3, DX10
Re:TMySQLDatabase
« Odpověď #21 kdy: 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.

Offline Vladimir64

  • Nováček
  • *
  • Příspěvků: 15
  • Karma: 0
    • Verze Delphi: 10.2
Re:TMySQLDatabase
« Odpověď #22 kdy: 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

Offline Vladimir64

  • Nováček
  • *
  • Příspěvků: 15
  • Karma: 0
    • Verze Delphi: 10.2
Re:TMySQLDatabase
« Odpověď #23 kdy: 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;

  :)