Vlastne jednoduche CMS - pristup 2 ludi sucasne

Programovacie jazyky, rady, poradňa...
Boccaccio
Medium Professional
Medium Professional
Používateľov profilový obrázok
Príspevky: 1097
Registrovaný: 01 mar 2014, 14:00
Bydlisko: Bratislava

Re: Vlastne jednoduche CMS - pristup 2 ludi sucasne

Príspevok od používateľa Boccaccio »

Takto?

Kód: Vybrať všetko

$db->pdo->beginTransaction();

$count = $db->count("test");

if ($count <= 10) {
	$last_user_id = $db->insert("test", [
		"name" => "foo"
	]);
}

if ($last_user_id) {
   $db->pdo->commit();
} else {
   $db->pdo->rollBack();
}
Ale insert zbehne vzdy, pokial je $count <= 10.
rollBack je tam zbytocny, ved pokial sa neinstertne, tak nema co rollBackovat.
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Re: Vlastne jednoduche CMS - pristup 2 ludi sucasne

Príspevok od používateľa audiotrack »

máš v tom trošku bordel v hlave :) Neviem či je na mieste ti tu teraz vysvetlovať elementárne základy databáz, keď už máš očividne nejakú časť toho tvojho cms naprogramovanú, a neverím že to všetko prerobíš (alebo ešte lepšie odložíš a vezmeš do ruky knihu). Ale tak:
1) insert zbehne vždy pokial je count <= 10. Áno, veď to bola tvoja požiadavka, nie? Ak tam nie je viac ako 10 záznamov, môže si pridať fotku. To že zbehne vždy nie je isté, môže byť výpadok db a insert nemusí zbehnúť
2) transakcia ti zoskupí viacero sql dotazov do "jedného". Buď sa vykoná celá transakcia (všetky dotazy) alebo žiaden dotaz. Ak do transakcie uzavreš tento select s insertom, je to ako keby jeden dotaz. To okrem iného znamená, že sa vytvorí zámok a žiaden iný dotaz nevstúpi medzi ne
3) rollback istotne nie je zbytočný, ani ak nenastane insert a bude to len o tom selecte. Transakcia musí vždy končiť commitom alebo rollbackom. Inak stále beží (a drží zámky) a rollbackne sa automaticky po strate connection na db. To ale určite nie je optimálny stav
Boccaccio
Medium Professional
Medium Professional
Používateľov profilový obrázok
Príspevky: 1097
Registrovaný: 01 mar 2014, 14:00
Bydlisko: Bratislava

Re: Vlastne jednoduche CMS - pristup 2 ludi sucasne

Príspevok od používateľa Boccaccio »

Ak by bol vypadol DB a nezbehne insert, tak nemam co rollbackovat (aj tak by nic neslo, kedze DB by bola mimo).
Lebo jedina zmena v DB je ten insert.

Aj ked to mozno teraz tak nevyzera, ale viem presne na co sluzi transakcia, len dako v tomto pripade neviem ako ma spravne fungovat.
Vies mi prosim upravit moj kusok kodu, aby to fungovalo?
Lebo mam dojem, ze ti potvrdil, ze to nie je take lahke a nemusi spravne fungovat ani tvoj kod.
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Re: Vlastne jednoduche CMS - pristup 2 ludi sucasne

Príspevok od používateľa audiotrack »

nie, nemohol lebo neviem čo za triedu to používaš. Neviem ako je tam definované beginTransaction, či je na read write alebo read only. Neviem akú máš verziu mysql a ako nakonfigurovanú a podobne. Ten kod ktorý tam máš je logicky v poriadku. Ak ti to nefunguje, bude to issue u teba a nie globálny problém.

každopádne tu ale riešime ako zabiť mravca raketometom namiesto toho, aby sme sa zamysleli prečo ich chceme vlastne zabíjať :) Som si istý, že väčšinu problémov by si vyriešil omnoho jednoduchšie zmenou návrhu. Napríklad konkrétne tu by imho úplne stačilo vymeniť poradie. Proste to tam vlož, a ak ti select za tým vráti že je viac ako 10 záznamov, vypluj userovi chybu (a prípadne odmaž všetky čo sú navyše). Nevravím že je to ideálne, len som ti chcel ukázať ako malá zmena dokáže z velkého problému konkurencie spraviť banalitu

prípadne si tam evidovať poradie (čo podla mňa tak či tak potrebuješ ak ich chceš preusporiadavať) a dať to ako unikátny klúč. Tým pádom ti dva záznamy s číslom 10 (pocet+1) nevloží. Možností je plno
Boccaccio
Medium Professional
Medium Professional
Používateľov profilový obrázok
Príspevky: 1097
Registrovaný: 01 mar 2014, 14:00
Bydlisko: Bratislava

Re: Vlastne jednoduche CMS - pristup 2 ludi sucasne

Príspevok od používateľa Boccaccio »

audiotrack napísal:prípadne si tam evidovať poradie (čo podla mňa tak či tak potrebuješ ak ich chceš preusporiadavať) a dať to ako unikátny klúč. Tým pádom ti dva záznamy s číslom 10 (pocet+1) nevloží. Možností je plno
Ano, toto som uz riesil, no bolo mi tu poradene, ze pri mazani netreba robit reorder (update kazdeho), cize by som mohol mat zaznamy s poradim oznacenym ako 1, 8, 9 - tu by sa este mohlo pridat 7 fotiek, no system by to uz neumoznil, pokial by to bolo nakodene tak, ako pises.
Michaelo
Hardcore addict
Hardcore addict
Používateľov profilový obrázok
Príspevky: 6177
Registrovaný: 16 júl 2008, 20:29
Bydlisko: Pri PC
Kontaktovať používateľa:

Re: Vlastne jednoduche CMS - pristup 2 ludi sucasne

Príspevok od používateľa Michaelo »

Kto ti poradil aby si nerobil reorder? Nie je to tak zlozite a samotny dotaz je dost rychly, pokial tam nebudes pod jednym albumom mat tisicky fotiek a aj tak to bude rychle.

Po vymazani spravit jedinu vec -> Vsetky fotky z daneho albumu co mali vacsi rowposition ako ta zmazana budu mat rowposition=rowposition-1
Boccaccio
Medium Professional
Medium Professional
Používateľov profilový obrázok
Príspevky: 1097
Registrovaný: 01 mar 2014, 14:00
Bydlisko: Bratislava

Re: Vlastne jednoduche CMS - pristup 2 ludi sucasne

Príspevok od používateľa Boccaccio »

Michaelo napísal:Kto ti poradil aby si nerobil reorder?
post2171534.html#p2171534
audiotrack napísal:Sort bude default '0' a upravíš ho iba pri reordere.
Michaelo
Hardcore addict
Hardcore addict
Používateľov profilový obrázok
Príspevky: 6177
Registrovaný: 16 júl 2008, 20:29
Bydlisko: Pri PC
Kontaktovať používateľa:

Re: Vlastne jednoduche CMS - pristup 2 ludi sucasne

Príspevok od používateľa Michaelo »

Ako, technicky by aj mal pravdu, no ked uz ho budes upravovat pri reorderi, tak ho tam musis potom pocitat, co mi pride stupidnejsie ako si ho rovno zapisat pri uploade a rovno by ti to pomohlo aj tuto...

Plus, preco ukladas fotku do DB este pred tym, ako ju upravujes? To mi tiez pride ako demencia. Ked uz robis tie thumby atd., tak si najprv sprav vsetky veci s fotkou a az tak ju uloz do DB. Takto by si sa kompletne vyhol tomuto problemu co mas.
Boccaccio
Medium Professional
Medium Professional
Používateľov profilový obrázok
Príspevky: 1097
Registrovaný: 01 mar 2014, 14:00
Bydlisko: Bratislava

Re: Vlastne jednoduche CMS - pristup 2 ludi sucasne

Príspevok od používateľa Boccaccio »

Do DB sa zapisuje po spracovani fotky. Problem je multiupload.
Michaelo
Hardcore addict
Hardcore addict
Používateľov profilový obrázok
Príspevky: 6177
Registrovaný: 16 júl 2008, 20:29
Bydlisko: Pri PC
Kontaktovať používateľa:

Re: Vlastne jednoduche CMS - pristup 2 ludi sucasne

Príspevok od používateľa Michaelo »

Preco by mal byt problem multiupload?

Najjednoduchsie je si spravit kontrolu pri uploade, kolko fotiek ma a kolko prave nahrava, ak nahrava viac ako moze, rovno ho zastav. Najjednoduchsia moznost je pri uploade kazdej fotky spravit count, ze kolko ich ma (alebo rovno ukladat pocet do tabulky k albumu a staci len select) a ak ich ma viac ako 10, tak zmazat zvysne fotky z disku a vyhodit error. Nie je to idealne riesenie, ale je najjednoduchsie a ak mas normalnu DB, tak je aj dost rychle.
Napísať odpoveď