Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Cuvanje sahovskih pozicija u bazi

[es] :: MySQL :: Cuvanje sahovskih pozicija u bazi

[ Pregleda: 4527 | Odgovora: 16 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

kukipei
Niš

Član broj: 19564
Poruke: 164
82.208.210.*

Sajt: www.bestbetinfo.com


Profil

icon Cuvanje sahovskih pozicija u bazi07.03.2006. u 16:55 - pre 220 meseci
Pozdrav.

Interesuju me vase ideje za cuvanje sahovskih pozicija u bazi.
Baza je relativno velika. Oko 750 000 partija.
Potrebno je da korisnik namesti poziciju na tabli i izvrsi pretragu u bazi.
Rezultat bi trebalo da budu sve partije koje sadrze datu poziciju.

ja sam nesto radio,

http://www.gensunasumus.com/explorer/explorer1.php

medjutim nisam zadovoljan brzinom.

Zelim da cujem vase ideje i iskustva,

Pozdrav i unapred hvala,
Predrag
 
Odgovor na temu

NikolaVeber
NikolaVeber
neradnik na porodiljskom bolovanju
Karlsruhe

Član broj: 5115
Poruke: 1254
*.rz.uni-karlsruhe.de.

Jabber: nikolaveber@jabber.org
ICQ: 121532865


Profil

icon Re: Cuvanje sahovskih pozicija u bazi07.03.2006. u 17:08 - pre 220 meseci
Pa napisi kako si cuvao podatke (u kom obliku), kako si vrsio pretrazivanje, na kojim poljima imas indekse i tako to.
Moguce da ce onda neko imati predlog kako to poboljsati.

Sada mi pade na pamet da bi recimo mogao da cuvas broj figura na tabli u jednom polju i na njega stavis index i koristis kao prvi uslov, to bi moglo doneti neko poboljsanje (evenutualno broj crnih/belih odvojeno).

[Ovu poruku je menjao NikolaVeber dana 07.03.2006. u 18:09 GMT+1]
Pop Servis "Paradise Tours"
Java User Group Karlsruhe
IT Dan - Srbija

Officer, I saw the driver who hit me - his name was Johnny Walker.
 
Odgovor na temu

mulaz
Ljubljana

Član broj: 47602
Poruke: 2239
*.dial-up.dsl.siol.net.

Jabber: mulaz@elitesecurity.org
Sajt: www.mulaz.org


+184 Profil

icon Re: Cuvanje sahovskih pozicija u bazi07.03.2006. u 17:10 - pre 220 meseci
http://www.xoops.org/modules/news/article.php?storyid=1596

pogledaj to.. amm.. nije nesto apmetno, ali isto on drzi podatke o poziciji figura u bazi, mozda nesto pomogne.. ali kako kaze onaj covek sa pinka.. ne moze da skodi :)
Bolje ispasti glup nego iz aviona
http://www.mulaz.org/
 
Odgovor na temu

kukipei
Niš

Član broj: 19564
Poruke: 164
82.208.210.*

Sajt: www.bestbetinfo.com


Profil

icon Re: Cuvanje sahovskih pozicija u bazi07.03.2006. u 18:36 - pre 220 meseci
Pozdrav,

Evo ovako. Svaka sahovska pozicija se moze predstaviti tzv. FEN notacijom.
npr FEN pocetne pozicije TSLDKLST/PPPPPPPP/8/8/8/8/pppppppp/tsldklst itd.
gde su velika slova crne figure a mala bele figure, brojevi oznacavaju prazna polja.

sada ja te pozicije pamtim u jednoj tabeli. Ona trenutno ima oko 21 000 000 slogova. Svaki od tih FEN-ova ima svoj ID. U drugoj tabeli imam zapamcenje partije u obliku niza ID fenova. Kolone te tabele su prvipotezbelog, prvipotezcrnog, drugipotezbelog itd...

Kada neko trazi poziciju najpre tu poziciju pretvorim u FEN pa trazim ID tog FEN-a, a zatim trazim gde se javlja taj ID i na taj nacin nalazim partije. Broj slogova druge tabele je oko 750 000.

Pretrazivanje FEN-a mi je po indeksima, a u drugoj tabeli nemam nigde indekse

[Ovu poruku je menjao kukipei dana 07.03.2006. u 19:38 GMT+1]
 
Odgovor na temu

jablan

Član broj: 8286
Poruke: 4541



+711 Profil

icon Re: Cuvanje sahovskih pozicija u bazi08.03.2006. u 08:09 - pre 220 meseci
Dodaj u obe tabele ID partije, drugu indeksiraj po tom IDju.

Ako u drugoj za svaki potez imaš po kolonu, verovatno ti je bolje da sve poteze spakuješ u jednu kolonu, u neko tekst polje, ovako bacaš mnogo mesta.

Verovatno ti je prva tabela spora. Možeš probati sa savetom N. Vebera, da dodaš jedno indeksirano polje broj figura koje bi ubrzalo pretragu.
 
Odgovor na temu

kukipei
Niš

Član broj: 19564
Poruke: 164
82.208.210.*

Sajt: www.bestbetinfo.com


Profil

icon Re: Cuvanje sahovskih pozicija u bazi08.03.2006. u 09:46 - pre 220 meseci
Pozdrav,

Prva tabela je relativno brza, a njoj pristupam samo jednom, tako da to nije problem.
Citat:
jablan
Ako u drugoj za svaki potez imaš po kolonu, verovatno ti je bolje da sve poteze spakuješ u jednu kolonu, u neko tekst polje, ovako bacaš mnogo mesta.


Mislim da ce tada biti problema sa pretragom. Jer ja trazim ID fena u toj tabeli a ako u jednoj koloni imam tekst (vise ID fena), kako cu vrsiti pretragu.

Citat:
jablan:  Možeš probati sa savetom N. Vebera, da dodaš jedno indeksirano polje broj figura koje bi ubrzalo pretragu.


Ovako cu da probam.
Pozdrav i hvala
 
Odgovor na temu

jablan

Član broj: 8286
Poruke: 4541



+711 Profil

icon Re: Cuvanje sahovskih pozicija u bazi08.03.2006. u 10:04 - pre 220 meseci
Citat:
kukipei: Mislim da ce tada biti problema sa pretragom. Jer ja trazim ID fena u toj tabeli a ako u jednoj koloni imam tekst (vise ID fena), kako cu vrsiti pretragu.

Iz prve tabele na osnovu fena izvučeš ID partije. Nađeš partiju u drugoj tabeli.
U drugoj tabeli u tekstualnom polju ne čuvaš ID fenova (da ne bi morao da radiš lookupe na prvu), nego redosled poteza.
 
Odgovor na temu

noviKorisnik
Dejan Katašić
Novi Sad

Član broj: 13216
Poruke: 4533
212.200.25.*

Sajt: www.novikorisnik.net


+5 Profil

icon Re: Cuvanje sahovskih pozicija u bazi08.03.2006. u 12:13 - pre 220 meseci
Mislim - pogledaj računicu - imaš 750 hiljada partija, a 21 milion jedinstvenih pozicija, ako podelim to sa bojem partija dobijam da po partiji prosečno 26 jedinstvene pozicije. E sad, nemam predstavu kolika je prosečna dužina partije ... recimo da je 50 poteza, znači 100 pozicija.

I sam kažeš da nemaš nekih posebnih problema s prvom tabelom.

Ako bi druga tabela bila jednostavno - IdPartije, IdPozicije, RedniBrojPotezaUPartiji - po mojoj pretpostavci o prosečnoj dužini partije bi trebalo da ova tabela ima svega 4 puta više slogova od prve. Odavde je lako izvući pojedinu partiju, ili sve partije gde se javlja neka pozicija.

... inače, totalno mi je nejasna predstavljena postavka druge tabele, s mnogo kolona ... koliko ima tih kolona? Šta s partijom koja popuni sve kolone a nije još gotova, kako je sačuvati? Šta s nepopunjenim poljima kraćih partija, mnogo ih je? I konačno, najvažnije, ne postoji način za efikasno pretraživanje pozicija jer su razbacane po različitim kolonama!

Naravno, može dodatno da se optimizuje kad se uvede u sistem još tabela, recimo teorija otvaranja, pa bi se u tabeli partija (tamo gde su podaci o igračima, ko je beli a ko crni, gde se i kada igralo i slično) pamti i koje se otvaranje koristilo, pa bi se u tabeli toka partije (ova "druga" o kojoj se priča) pamtile tek pozicije nakon otvaranja (što bi značajno smanjilo broj slogova u toj tabeli). itd
 
Odgovor na temu

flighter_022
L2 Applications Administrator
NS

Član broj: 18499
Poruke: 737
196.200.1.*

ICQ: 23089150


+232 Profil

icon Re: Cuvanje sahovskih pozicija u bazi08.03.2006. u 20:54 - pre 220 meseci
Mozda nije najbolje optimizovano, ali ovako na brzinu, ja bih uradio sledece:

Tabela sahista

-IdSahiste
-Ime
-Ostali podaci po potrebi

Tabela partija

-IdPartije
-SahistaBeli (ID sahiste)
-SahistaCrni (ID sahiste)
-OstaliPodaci (po potrebi)

Tabela poteza

-IdPoteza
-Idpartije (iz tabele partija)
-64 polja tipa BYTE (gde su figure predstavljene vrednostima 1-16 za bele figure, i 17-32 za crne, a 0 za prazno polje)
-DatumPoteza
-VremePoteza
-IdSahiste (koji je izvrsio potez)

Ovo je prilicno pojednostavljeno. Mozda bi deo sa 64 polja mogao dodatno da se optimizuje (jer za jedno polje na tabli nije potrebno svih 8 bitova, vec 5, ali bi to nepotrebno komplikovalo ceo sistem a i opterecivalo server koji bi to sve dekodovao).

Na ovaj nacin, bilo bi moguce pregledati partije i poteze po bilo kojem kriterijumu, ukljucujuci pretragu po zadatom stanju na tabli.

E sad, koliko bi baza zauzimala? Pa recimo da zaglavlje partije zauzima 64 bajtova (ili manje), da podaci o svakom sahisti zauzimaju 128 bajtova, i da svaki potez zauzima dodatnih 128 bajtova. Ako imas 10.000 sahista, 750.000 partija, sa prosecno 100 poteza (50+50), onda bi to bilo:

1250 KB za podatke o sahistima
46875 KB za podatke o partijama
93750 KB za podatke o potezima
---------------------------------------
141875 KB (138 Mb)

Ova kolicina podataka ne ukljucuje indekse... Sa indeksima, mozda bi poraslo do 400 Mb
 
Odgovor na temu

kukipei
Niš

Član broj: 19564
Poruke: 164
*.smin.sezampro.yu.

Sajt: www.bestbetinfo.com


Profil

icon Re: Cuvanje sahovskih pozicija u bazi16.03.2006. u 20:55 - pre 220 meseci
Pozdrav.

Izvinjavam se sto se ranije nisam javio. Bio sam nesto zauzet.


Ovo je struktura baze koju trenutno koristim:

CREATE TABLE `fenovi` (
`ID_fena` int(20) NOT NULL auto_increment,
`fen` varchar(100) binary NOT NULL default '',
`pob` mediumint(11) NOT NULL default '0',
`por` mediumint(11) NOT NULL default '0',
`ner` mediumint(11) NOT NULL default '0',
PRIMARY KEY (`ID_fena`),
UNIQUE KEY `fen` (`fen`)
) ENGINE=MyISAM;
CREATE TABLE `igrac` (
`ID_igraca` int(11) NOT NULL auto_increment,
`ime` varchar(35) NOT NULL default '',
`broj` smallint(4) NOT NULL default '0',
PRIMARY KEY (`ID_igraca`),
KEY `ime` (`ime`(10))
) ENGINE=MyISAM;
CREATE TABLE `otvaranja` (
`eco_kod` char(3) NOT NULL default '',
`naziv` varchar(60) NOT NULL default '',
`potezi` varchar(150) NOT NULL default '',
PRIMARY KEY (`eco_kod`)
) ENGINE=MyISAM;
CREATE TABLE `partija` (
`ID_beli` mediumint(11) NOT NULL default '0',
`ID_crni` mediumint(11) NOT NULL default '0',
`turnir` varchar(50) NOT NULL default '/',
`site` varchar(50) NOT NULL default '/',
`datum` varchar(10) NOT NULL default '0000.00.00',
`rezultat` char(3) NOT NULL default 'nul',
`round` tinyint(3) NOT NULL default '0',
`ECO` char(3) NOT NULL default '/',
`belirejting` smallint(4) NOT NULL default '0',
`crnirejting` smallint(4) NOT NULL default '0',
`ID_partije` int(11) NOT NULL auto_increment,
`potezi` text NOT NULL,
`god` smallint(4) NOT NULL default '0',
PRIMARY KEY (`ID_partije`),
KEY `ECO` (`ECO`),
KEY `ID_beli` (`ID_beli`),
KEY `ID_crni` (`ID_crni`),
KEY `god` (`god`)
) ENGINE=MyISAM;
CREATE TABLE `s_fen` (
`ID_partije` int(11) NOT NULL default '0',
`w1` int(11) NOT NULL default '0',
`b1` int(11) NOT NULL default '0',
`w2` int(11) NOT NULL default '0',
`b2` int(11) NOT NULL default '0',
`w3` int(11) NOT NULL default '0',
`b3` int(11) NOT NULL default '0',
`w4` int(11) NOT NULL default '0',
`b4` int(11) NOT NULL default '0',
`w5` int(11) NOT NULL default '0',
`b5` int(11) NOT NULL default '0',
`w6` int(11) NOT NULL default '0',
`b6` int(11) NOT NULL default '0',
`w7` int(11) NOT NULL default '0',
`b7` int(11) NOT NULL default '0',
`w8` int(11) NOT NULL default '0',
`b8` int(11) NOT NULL default '0',
`w9` int(11) NOT NULL default '0',
`b9` int(11) NOT NULL default '0',
`w10` int(11) NOT NULL default '0',
`b10` int(11) NOT NULL default '0',
`w11` int(11) NOT NULL default '0',
`b11` int(11) NOT NULL default '0',
`w12` int(11) NOT NULL default '0',
`b12` int(11) NOT NULL default '0',
`w13` int(11) NOT NULL default '0',
`b13` int(11) NOT NULL default '0',
`w14` int(11) NOT NULL default '0',
`b14` int(11) NOT NULL default '0',
`w15` int(11) NOT NULL default '0',
`b15` int(11) NOT NULL default '0',
`w16` int(11) NOT NULL default '0',
`b16` int(11) NOT NULL default '0',
`w17` int(11) NOT NULL default '0',
`b17` int(11) NOT NULL default '0',
`w18` int(11) NOT NULL default '0',
`b18` int(11) NOT NULL default '0',
`w19` int(11) NOT NULL default '0',
`b19` int(11) NOT NULL default '0',
`w20` int(11) NOT NULL default '0',
`b20` int(11) NOT NULL default '0',
`w21` int(11) NOT NULL default '0',
`b21` int(11) NOT NULL default '0',
`w22` int(11) NOT NULL default '0',
`b22` int(11) NOT NULL default '0',
`w23` int(11) NOT NULL default '0',
`b23` int(11) NOT NULL default '0',
`w24` int(11) NOT NULL default '0',
`b24` int(11) NOT NULL default '0',
`w25` int(11) NOT NULL default '0',
`b25` int(11) NOT NULL default '0',
`rez` tinyint(1) unsigned NOT NULL default '3',
`eco` char(3) NOT NULL default '0',
`god` smallint(4) unsigned NOT NULL default '0',
PRIMARY KEY (`ID_partije`)
) ENGINE=MyISAM;

najbitnije tabele su (tabele koje najvise koristim prilikom pretrage)
s_fen i fenovi

s_fen ima oko 750000 slogova
a fenovi vise od 20 miliona

pa ako nekog interesuje neka pogleda.


Citat:
flighter_022: E sad, koliko bi baza zauzimala? Pa recimo da zaglavlje partije zauzima 64 bajtova (ili manje), da podaci o svakom sahisti zauzimaju 128 bajtova, i da svaki potez zauzima dodatnih 128 bajtova. Ako imas 10.000 sahista, 750.000 partija, sa prosecno 100 poteza (50+50), onda bi to bilo:

1250 KB za podatke o sahistima
46875 KB za podatke o partijama
93750 KB za podatke o potezima
---------------------------------------
141875 KB (138 Mb)

Ova kolicina podataka ne ukljucuje indekse... Sa indeksima, mozda bi poraslo do 400 Mb


Jesi li siguran da je racunica tacna. Po meni ispada oko 9 GB.
128 B * 750000 = 96 000 000B (93750 KB) * 100 = 8.9 GB

Pozdrav
 
Odgovor na temu

noviKorisnik
Dejan Katašić
Novi Sad

Član broj: 13216
Poruke: 4533
*.ADSL.neobee.net.

Sajt: www.novikorisnik.net


+5 Profil

icon Re: Cuvanje sahovskih pozicija u bazi16.03.2006. u 21:35 - pre 220 meseci
Nijedna partija nema više od 25 poteza?
 
Odgovor na temu

kukipei
Niš

Član broj: 19564
Poruke: 164
*.smin.sezampro.yu.

Sajt: www.bestbetinfo.com


Profil

icon Re: Cuvanje sahovskih pozicija u bazi16.03.2006. u 21:50 - pre 220 meseci
Naravno da ima,

Ali zbog velicine baze moguce je pretrazivati samo prvih 25 poteza.
Nisam uspeo da smislim bolji nacin
 
Odgovor na temu

noviKorisnik
Dejan Katašić
Novi Sad

Član broj: 13216
Poruke: 4533
*.ADSL.neobee.net.

Sajt: www.novikorisnik.net


+5 Profil

icon Re: Cuvanje sahovskih pozicija u bazi16.03.2006. u 22:59 - pre 220 meseci
Pogledaj moj prethodni post onda. Evo malo da probam da pretočim u strukturu prema ovome što si priložio:

Tabela 'fenovi' : ID_fena i fen (ovo ostalo su ti statistike, nije mi baš jasno da je to potrebno držati, bar ne tu, možda u posebnoj tabeli

Tabela 'igrač' : ok, čuvaj šta hoćeš, treba ti ID_igrača za partije samo, ostalo po volji

Tabela 'otvaranja' - preskočiću u ovoj analizi

Tabela 'partija' : osnovno da ima svoj ID i da definiše ko je beli a ko crni

Tabela 's_fen' : ID_partije, ID_fena i redni broj poteza u partiji (složeni ključ od sve 3 kolone)

Ti sad hoćeš da nađeš sve partije u kojima je odigran neki potez ... vidiš da je trivijalno. Pored toga, partija može da ima i više od 25 poteza, a nema praznih polja u tabeli ukoliko je partija kraća.
 
Odgovor na temu

noviKorisnik
Dejan Katašić
Novi Sad

Član broj: 13216
Poruke: 4533
212.200.25.*

Sajt: www.novikorisnik.net


+5 Profil

icon Re: Cuvanje sahovskih pozicija u bazi17.03.2006. u 08:26 - pre 220 meseci
uf pardon, u 's_fen' je ključ ID_partije i redni broj poteza ...
 
Odgovor na temu

kukipei
Niš

Član broj: 19564
Poruke: 164
82.208.210.*

Sajt: www.bestbetinfo.com


Profil

icon Re: Cuvanje sahovskih pozicija u bazi17.03.2006. u 15:09 - pre 220 meseci
Cini mi se kao dobra ideja

Pozdrav
 
Odgovor na temu

NikolaVeber
NikolaVeber
neradnik na porodiljskom bolovanju
Karlsruhe

Član broj: 5115
Poruke: 1254
*.rz.uni-karlsruhe.de.

Jabber: nikolaveber@jabber.org
ICQ: 121532865


Profil

icon Re: Cuvanje sahovskih pozicija u bazi10.04.2006. u 20:19 - pre 219 meseci
Verovatno je kasno, mozda i pomenuto u predhodnim postovima: kako bi bilo cuvati poteze kao pocetno i krajnje polje?

Tako bi za svaki potez umesto matrice 8x8 imao 2 vrednosti. Znaci imas id partije, broj poteza i pocetno i krajnje polje. Tako mozes jednoznacno rekonstruisati partiju, a velicina baze se znatno smanjuje.

Da, i sa partijom se mora cuvati i podatak ko je poceo partiju - crni ili beli.
Pop Servis "Paradise Tours"
Java User Group Karlsruhe
IT Dan - Srbija

Officer, I saw the driver who hit me - his name was Johnny Walker.
 
Odgovor na temu

Kalasnjikov

Član broj: 59600
Poruke: 8
212.5.210.*



Profil

icon Re: Cuvanje sahovskih pozicija u bazi24.08.2006. u 10:10 - pre 214 meseci
crni krajnje retko pocinje partiju! :D

Informacije o poziciji bi trebalo drzati na nivou bitova: svaka figura moze zauzimati jedno od 64 polja (6 bitova), imas max 32 figure, (6 razlicitih), pa puta 2 jer mogu biti i crne i bele, znaci 12 (4 bita), u proseku 16, znaci 16x(6+4) = 160 bitova, plus po bit za ko je na potezu i da li su vrsili rokadu, sto ce reci u proseku oko 163 bita po poziciji.
 
Odgovor na temu

[es] :: MySQL :: Cuvanje sahovskih pozicija u bazi

[ Pregleda: 4527 | Odgovora: 16 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.