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

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ů: 3214
  • 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ů: 199
  • Karma: 2
    • 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ů: 3214
  • 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;

  :)