Okos keresés brutális adatbázisban

Luigi.hu képe

Adott egy nagy adatbázis 22000 sor, 1 db text mező, 3 db integer mező (értéke max 10), 1 db link mező.

A text mező tartalma igen rémisztő pl. "Methyl (R)-2-(4-(3-Chloro-5-Trifluoromethyl-2-Pyridyloxy)Phenoxy)Propionate", ezért úgy volna ideális keresni a usernek, hogy amikor gépeli be a keresendő (kulcs)szót, akkor vhol lássa a találatokat, hogy ne kelljen teljesen beírni a keresett szót, hanem a találati listából választhasson.

Ezen vágyálom megvalósítása gondolom durván erőforrásigényes, főleg, ha egyszerre sok user keresgél az oldalon, ezért arrra volnék kíváncsi, hogyan célszerű az adatokat tárolni/keresni/megjeleníteni, hogy működjön ez a szolgáltatás és ne feküdjön ki tőle a vas?

Előre is köszönöm.

PS: Az adatbázist persze nem én gépelném be, :-) hanem beimportálnám Excelből, CSV-ből.

Drupal verzió: 
satya képe

Hi,

nem vágom a DB-ket nagyon, de ha a 3 integer mező értéke max 10, akkor nem lenne célszerűbb smallint-et használni? Lehet ez csak a tárhely igényt csökkentené és a teljesítményt nem befolyásolná persze.

0
0
Luigi.hu képe

Köszi az ötletet, de smallint formátumot alapból nem tudom kiválasztani, milyen modullal tudom azt felrakni. (kereséssel csak a Formatted Number CCK-ban találtam erre utalást).

0
0
satya képe

Azt hittem külön táblát csinálsz neki manuálisan és nem CCK-n keresztül építesz hozzá tartalom típust. Én a MySQL SMALLINT data type-ra gondoltam:
http://dev.mysql.com/doc/refman/5.0/en/numeric-types.html

0
0
Luigi.hu képe

Értem, de most már eléggé sürget az idő, ezért maradok a CCK-nál.
Köszi!

0
0
csg képe

Én mindig azt szoktam csinálni, ha írnom kell egy olyan modult, amihez hasonlót még nem csináltam, hogy keresek egy olyan már meglevőt, amiben a kulcsfunkciók benne vannak, és letöltöm, és kilesem az okosságot a kódjából. Eközben sokat lehet tanulni is, de fontos persze, hogy ne csak vaktában, próbálgatós alapon nyomd a kopi-pésztet, hanem először értelmezd, és tudd, hogy mit miért csinál.

Javaslom tehát, hogy nézd meg pl. a Taxonomy modul autocomplete funkcióját, vagy keress rá a modulok között az 'autocomplete' kulcsszóra, és tölts le valami olyat, ami még közelebb áll az elképzelésedhez.

Ja, és mindenképpen tegyél indexet a táblára, akkor sokkal gyorsabb lesz, és nem lesz olyan erőforrásigényes.

u.i.: Annyira nem kell megijedni, egy 22000 rekordos tábla azért még tökre nem számít brutálisnak. Szerintem vannak itt többen, akik dolgoztak már milliós nagyságrendekkel is.

0
0

--
Csonka Gergely
http://cheppers.com

Luigi.hu képe

Szétnéztem és a Finder modul tűnik a eddig legjobbnak, még el kell vele játszadoznom, hogy kiderüljön tényleg OK lesz-e.

Az indexelést SQL vagy Drupal szinten lehet beállítani? Az előbbivel már volt párszor dolgom, de ha Drupalban van erre vmi megoldás, akkor az is érdekel.
Köszönöm.

Most picit belegondolva 22000 rekord és néhány szimpla mező tényleg nem egy brutális adatbázis, máskor jobban odafigyelek, hogy milyen szavakat írogatok itt munkaidőben...

0
0
csg képe

Ugyebár nem "normál" Drupal tartalomban akarsz keresni, hanem egy teljesen saját táblában, ehhez viszont nem fogsz kész modult találni. Mindenképpen programoznod kell.

Nagyjából két lehetőséged van:
- Ahogy már javasoltam, írsz egy modult, ami a saját tábládban keres, és ehhez az autocomplete részt kinézed mondjuk a Taxonomy modulból.
- Leprogramozod a csv fájlod importálását (cck) node-okként, úgy, hogy a keresendő mező legyen a node title, és akkor jó lesz a Finder modul.

Hogy melyiket érdemesebb választanod, az több mindentől is függ, de nincs harmadik, szimplán "összekattintgatós" megoldás.

Ha a keresésre írsz modult, nézd meg ezt a topikot, a végén van egy kész megoldás, amin alig kell változtatnod:
http://drupal.hu/forum/saj%C3%A1t-search-form

0
0

--
Csonka Gergely
http://cheppers.com

pp képe

Minden kényelmi szolgáltatás erőforrás igényes. Ezért ezeket érdemes minél jobban optimalizálni. Az, hogy a vas kifekszik-e vagy sem ez millió dologtól függ. Ha jót akarsz magadnak akkor mindig az un. szűk keresztmetszetet fogod megkeresni. Pl. hiába optimalizálod az adatbázisod és a programod, ha a gép amin futtatod egy matuzsálem. Hiába vagy a legnagyobb vason a világon, ha a magyar szolgáltatók nudli külföldi sávszéllel engedik ki az embereket. Szóval ez nem olyan egyszerű mint elsőre látszik.

Na de térjünk vissza az optimalizáláshoz. Te ugye keresni akarsz. Ebből következik, hogy indexelned kell az adatbázisodat. (110 000 lépés helyett 17 lépés) Ha ez megvan akkor eljött az idő, hogy megnézzük milyen a lekérdezésed, és hogy azon lehet-e optimalizálni. Ezután ha a lekérdezéseden nem lehet akkor még mindig csinálhatsz Te egy más adatszerkezetet amiben aztán gyorsabban tudsz majd keresni. Ezután jöhet az, hogy a szerveredet optimalizálod. Ez igazán izgalmas feladat. Egyszer láttam egy kis előadást, ahol Rasmus pár egyszerű beállítással elérte, hogy kb. 100x annyi kérést tudott kiszolgálni mint azelőtt.

pp
(ja és itt van mellettem egy barátom aki szélesen mosolyog a brutális adatbázis megnevezésen. Ő egy olyan adatbázissal dolgozik ahova naponta másfél milliárd rekord kerül be. A szám nem tévedés és elírás tényleg ekkora ez az adatbázis. Na az tényleg brutális)

0
0
Luigi.hu képe

Ezért szeretném én is minél kevesebb extra modullal, funkcióval ill. "okosan" megtervezve felépíteni az oldalt, de a használhatóság miatt jó lenne ezt a szolgáltatást belepakolni.

A szolgáltatóm elvileg normálisabb vasra pakolta a Drupalos oldalamat és nincsenek sebesség gondjaim, de más okokból többször felmerült már bennem, hogy talán érdemes volna profibb külföldi szolgáltatóra váltani, de mivel magyarországi látogatóknak szeretném az oldalt készíteni, ezért ahogyan Te is mondtad, a szűkebb külföldi sávszélesség miatt ez nem biztos, hogy megéri.

Az indexelést még dBase-ben tanultuk anno, de persze azóta azért ezt már inkább másban használtam... Ami most nem tiszta: SQL szintű vagy vmi drupal modulos indexelésre gondolsz?

Lekérdezésem még nincs, így azt a modult szeretném választani, ami a legjobb erre a feladatra, a Finder-t nézegettem tegnap este, de még nem olvastam el a readme-t, annak van egy 'Finder Autocomplete' modulja, talán az jó lesz.
A szerverhez persze nem tudok hozzányúlni.

A brutális szó ekkora adatbázisnál szakmai szempontból tényleg viccesen hangzik, inkább a felhasználó szempontjából tűnik ez az adatmennyiség soknak, mert nem célszerű pl. egy sima listát kipakolni, ezért nehezebb nekik a sokféle fura név között eligazodni.
Köszönöm.

0
0
pp képe

"Ami most nem tiszta: SQL szintű vagy vmi drupal modulos indexelésre gondolsz?"

A hozzászólásom címében jeleztem, hogy ez nem Drupal kérdés. :)

pp

0
0
Luigi.hu képe

A címmel kapcsolatban a szolgáltatóválasztás témádra gondoltam, de így már minden tiszta.
Köszi!

0
0