zdravim php-ckarov..
mam cca 2000-2500 poloziek v databaze na ktore sa da hlasovat. (nieco ako Paci - Nepaci) Hlasovat mozu len registrovany uzivatelia, cize nemusim kontrolovat ani ip ani to robit cez cookies. Mohol by som to zapisovat do mysql formou id_uzivatela, id_polozky... Lenze tu nastava problem, co ked bude mat kazda polozka napr. 2000 hlasov (to mame 5 000 000 zaznamov v db, co by bol asi uz velky vykonnostny problem). Preto sa pitam ako je najlepsie tento problemik vyriesit. Ako vlastne zistovat ci registrovany uzivatel uz hlasoval za konkretnu polozku.
dakujem za vase konstruktivne navrhy.. a rady..
Fórum › PHP
Zamedzenie viacnasobneho hlasovanie
Mohl bys ukládat hlasování uživatele do tabulky např. ve formátu xml. Pak bys měl na jednoho uživatele jen jeden záznam, ale výkonostně by to asi nebylo nic moc. IMHO i MySQL zvládne 5M a víc záznamu bez problémů.
jj rozmyslal som aj nad tym ze jeden zaznam = jeden uzivatel napr. vo formate -idpolozky-idpolozky-idpolozky-.... a ci hlasoval zistit napr. pomocou substr... len som si skusal vlozit do db (na klasickom stolnom pocitaci) 5M zaznamov a bolo vidiet ze to je pomale.. :( tak newiem
kdyz das indexy tak to vykonostne databaze v klidu zvladne... krom toho ses optimista :D
nereknu kdyz mam 2miliony zaznamu a delam nad nima treba pocty klicovejch slov a k tomu nejaky dalsi parametry ... to uz si veme tak 15-30s (kdyz bych jeste prevadel unixtimestamp na cas a s nim pak srovnaval tak to kostuje minimalne minutu - na rozdil kdyz se datum mezi kterym to chci mit prevede naopak)
v horsim pripade udelas pro kazdy clanek vlastni tabulku hlasu :D
jen by to byla pekna hromada souboru
ok KIIV pouvazujem nad tym..... len dufam ze to nebudem potom musiet za behu pracne prerabat :)
hmm.. 2000 tabuliek... kym by som preskroloval naspodok menu v phpmyadmin tak by sa mi uz nechcelo :smile6:
ci este niekto ma nejaky napad, navrh?
To Santas : jj viem , server bude mat isto vacsi vykon (radovo), len som sa zabudol zmienit ze hlasovanie sa bude vykonavat pomerne casto.. cize urcite nejaka zataz tam bude... uz som ale pregooglil vsetko mozne a vyzera to ze to inak ani nie je mozne urobit..
To marioff : tak udelej experiment... jednu tabulku kde budou hodnoty 2000x5000
a jak dlouho bude trvat testnuti zda neco existuje nebo ne
krom toho taky muzes udelat unikatni klic a kdyz bys pridaval neco stejneho tak uz by to nedovolilo
moc sem tu diskuzi neprocital, ale jednoznacne pouzit db table s indexy. Vzhledem k tomu, ze se bude jednat pouze o cisla, tak bych tom nevidel problem. Navic, pokud se jedna o interakci uzivatelu, tak bych to nevidel tak cerne, ne kazdy ohodnoti par tisic polozek na serveru.
sry ak to uz niekto povedal tiez som si to moc necital, skus pouzit UNIQUE a potom cez podmienku ak sa sql prikaz nepodaril(cize v SQL prebehla chyba ze do UNIQUE tabulky sa neda pridat taky isty zaznam s takym istym ID uzivatela) tak vypise spravu ze uzivatel uz zahlasoval.. neviem ci to bude fungovat ale malo by..
To Lordest : To by fungovalo, kdyby měl pro každý článek novou tabulku, ale jakmile bude mít hlasy ke všem článkům v jedné tabulce, tak by mohl každý čtenář hlasovat pro jediný článek :-)) A nebo to udělat, že by tam byl ještě jeden sloupec, kde by byly hodnoty například IdClanku_IdCtenare (např.: 10_25), potom by se dal použít ten UNIQUE.
To z_moravec : Jako že by se jeden index vztahoval na více sloupců? Tak jo, další nová informace :-) A jak by se v tomto případě choval UNIQUE? Bral by to tak, že aspoň jedna hodnota musí být unikátní? A nebo, že třeba obě hodnoty musí být unikátní? Protože pokud by museli být oba unikátní, tak by to stejně nešlo.
To DragonBehemont : A multiple-column index can be considered a sorted array containing values that are created by concatenating the values of the indexed columns. http://dev.mysql.com/doc/refman/5.1/en/multiple-column-indexes.html
To z_moravec : Děkuji za vysvětlení :-)
no vrovna nwm jak si to predstavujes ale ja mam ankety dlany nejak takto jedna tabulka ma v sobe :
[seznam]id ankety [/seznam]
[seznam]Na co se ptas [/seznam]
[seznam]1moznost [/seznam]
[seznam]2moznost atd. [/seznam]
a druha tabulka co ma :
[seznam]Kdo hlasoval [/seznam]
[seznam]id ankety ve ktere hlasoval [/seznam]
[seznam]Jakou moznost si zvolil [/seznam]
Pak to muze byt treba tahle
1 //id ankety
ak se ti libi stranky? //nazev
dobre // 1 moznost
ujde to // 2moznost
spatne /// 3moznost
Quimby // kdo hlasoval
1 // id ankety
3 // moznost c.3
a pak kdyby nekdo hlasoval tak se vybere id ankety z db a porovna se to z druhou tabulkou jestli uz tam neni nahodou ze uz hlasoval
EDIT: Nikde nesmi bejt primary key nebo tak neco mozna bych mohl poslat i soubory ale jsou stary delany pro php 5 to by slo ale dalo by se to este dost upravovat protoze ale nato nemam cas a nebavi me to.....
EDIT2 : este jsem si vzpomel to hlasovani by slo jen kdyz je uzivatel prihlasenej cili pokud to delas pres session tak by cely ankety delal nak tahle
session_start();
if(session_is_registered("neco"))
{
ankety........
}
else
{
echo "Musíte se přihlásit.";
}
takhle bych to resil ja jinak posli odkaz na stranky plz
DragonBehemont napsal:
To Lordest : To by fungovalo, kdyby měl pro každý článek novou tabulku, ale jakmile bude mít hlasy ke všem článkům v jedné tabulce, tak by mohl každý čtenář hlasovat pro jediný článek :-)) A nebo to udělat, že by tam byl ještě jeden sloupec, kde by byly hodnoty například IdClanku_IdCtenare (např.: 10_25), potom by se dal použít ten UNIQUE.
skusal som to pri ankete a hodnoteni , a funguje to na sto percent.. neviem ako je to u clankov alebo u sekciach ktore sa casto aktualizuju ( novinky a pod. ).. ale ako hovorim pri ankete a hodnoteni mi to fungovalo..
Přidej příspěvek
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku
×Vložení zdrojáku
×Vložení obrázku
×Vložení videa
Uživatelé prohlížející si toto vlákno
Podobná vlákna
Hlasovanie — založil FufurR
Moderátoři diskuze