View - jak "izolovat" práci dvou klientů? – MySQL – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

View - jak "izolovat" práci dvou klientů? – MySQL – Fórum – Programujte.comView - jak "izolovat" práci dvou klientů? – MySQL – Fórum – Programujte.com

 

30. 6. 2014   #1
-
0
-

Ahoj,

 zkusil jsem nahradit dočasnou tabulku pomocí view abych odstranil problém s vícenásobným otevřením dočasné tabulky v příkazech obsahujících union. Celé to funguje a je to rychlejší. Pokud jsem správně pochopil, view se chová podobně jako stálá tabulka - tím vzniká problém při současné práci více klientů.

create or replace view vz as (select greatest(cas, '2014-04-11 11:20:30') as cas,
 'zp' as u from leva_udalosti where udalost = 'pozn' and popis = 'poznamka')
union all (select greatest(cas, '2014-04-11 11:20:30') as cas,
 'zn' as u from leva_udalosti where udalost = 'nazev' and popis = 'mereni');

select ta.cas, 'kp' as u from leva_udalosti ta join vz on
  ta.udalost = 'pozn' and ta.cas > vz.cas group by vz.cas having min(ta.cas)
union all
select ta.cas, 'kn' as u from leva_udalosti ta join vz on
  ta.udalost = 'nazev' and ta.cas > vz.cas group by vz.cas having min(ta.cas)
union all
   select cas, u from vz order by cas;

výše uvedenou sekvenci příkazů potřebuji provést zaráz tak aby jiný klient nemohl změnit obsah wiew (musel počkat až právě pracující klient dokončil práci). Chtěl jsem použít transakci, ale v dokumentaci jsem narazil na informaci, že create view patří mezi příkazy, které provedou commit implicitně. Jak situaci vyřešit?

Použití dvou dočasných tabulek je citelně (asi 6x) pomalejší :(

hu

Nahlásit jako SPAM
IP: 195.178.67.–
KIIV
~ Moderátor
+43
God of flame
30. 6. 2014   #2
-
0
-

tak at klient dela nahodny nazev pro view.. a pak to musi akorat dropnout po skonceni pouzivani.. view se stejne nevypocitava hned, ale az pri dotazech

Nahlásit jako SPAM
IP: 94.113.95.–
Program vždy dělá to co naprogramujete, ne to co chcete...
30. 6. 2014   #3
-
0
-

Domněnka: DB eviduje každého připojeného klienta, ten má pravděpodobně unikátní číslo soketu. Lze ho získat?

hu

Nahlásit jako SPAM
IP: 188.95.60.–
2. 7. 2014   #4
-
0
-

Náhodné nezaručuje unikátní. Vhodnější je použít connection ID které je pro každého připojeného klienta unikátní:

set @sql_text = concat('create or replace view v', connection_id(), ' as select * from nazvy_a_pozn');
prepare stmt from @sql_text;
execute stmt;
deallocate prepare stmt;

hu

Nahlásit jako SPAM
IP: 195.178.67.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 12 hostů

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý