Permalink és ID visszakeresés
Sziasztok!
Gyakorlott fejlesztők véleményét szeretném kérni a következő problémában.
Egy CMS-t fejlesztek és szeretnék permalink alapú oldal elérést. Az lenne a kérdésem, hogy ha a permalink-ből nem lehet egyedileg meghatározni a megjelenítendő tartalmat, ti milyen eljárást használtok. A problémám pl: http://siteom.hu/blog/majusi_kirandulas_bakony ami a http://siteom.hu/index.php?modul=blog&id=234. Az ID az adatbázisban tárolt oldal/tartalom kulcsa. A "majusi_kirandulas_bakony" string és a 234 között ugye nincs egyértelmű leképzés. Hogy a megfelelő tartalmat tudjam megjeleníteni az egyes permalinkekhez, vagy a táblában tárolom az egyes tartalmakhoz a hozzájuk tartozó permalinket vagy egy külön katalógust használok a permalink=>ID/kulcs megfeleltetésekhez. Az előbbit szeretném elkerülni, mert nem akarok egy ekkora mezőre indexet építeni, tekintve, hogy sokezer rekord lesz a táblában. És ha minden egyes oldalletöltésnél plusz egy lekérdezést le kell futtatni, már nem tartom annyira jó ötletnek.
A külön katalógusra a következőt találtam ki. Készítek egy PHP tömböt a permalink=>ID hozzárendelésekhez, amit a permalinkek kezdőbetűi alapján széttördelek és külön fájlokba teszem őket.
Például:
permalinkek:
a_sotet_ejszaka
az_elveszett_frigylada_fosztogatoi
Azur_kek_tenger
bachelor_of_arts
barbie_es_ken
barracuda
bukaresti_mese
A tömb:Ezt megfelelően külön fájlokba szétdobva:Így a permalink és annak első két betűjének ismeretében mindenféle adatbázis vagy bonyolultabb művelet nélkül hozzájutunk a kulcshoz/ID-hez: Hátránya, hogy include-olni kell és időről-időre optimalizálni/aktualizálni kell a tömböt. Előnye, hogy lényegesen kevesebb erőforrást mozgat meg mint egy adatbázis lekérdezés. A tömbök mérete sem lesz soha túl nagy, hiszen ha túl sok permalink kerülne egy tömbbe, megnövelhetjük a használt kezdőbetűk számát és máris századára csökken a tömb mérete. Arra is gondoltam, hogy memcached-be is lehetne tenni a tömböt.
Mennyire érdemes tehermentesíteni az adatbázist? Túlzás ez, túlreagálom a problémát? (Nagy (10 000 + / nap) látogatottsággal kell számolni)
Vélemények, ötletek, tapasztalatok?
Előre is nagyon köszönöm.
■ Gyakorlott fejlesztők véleményét szeretném kérni a következő problémában.
Egy CMS-t fejlesztek és szeretnék permalink alapú oldal elérést. Az lenne a kérdésem, hogy ha a permalink-ből nem lehet egyedileg meghatározni a megjelenítendő tartalmat, ti milyen eljárást használtok. A problémám pl: http://siteom.hu/blog/majusi_kirandulas_bakony ami a http://siteom.hu/index.php?modul=blog&id=234. Az ID az adatbázisban tárolt oldal/tartalom kulcsa. A "majusi_kirandulas_bakony" string és a 234 között ugye nincs egyértelmű leképzés. Hogy a megfelelő tartalmat tudjam megjeleníteni az egyes permalinkekhez, vagy a táblában tárolom az egyes tartalmakhoz a hozzájuk tartozó permalinket vagy egy külön katalógust használok a permalink=>ID/kulcs megfeleltetésekhez. Az előbbit szeretném elkerülni, mert nem akarok egy ekkora mezőre indexet építeni, tekintve, hogy sokezer rekord lesz a táblában. És ha minden egyes oldalletöltésnél plusz egy lekérdezést le kell futtatni, már nem tartom annyira jó ötletnek.
A külön katalógusra a következőt találtam ki. Készítek egy PHP tömböt a permalink=>ID hozzárendelésekhez, amit a permalinkek kezdőbetűi alapján széttördelek és külön fájlokba teszem őket.
Például:
permalinkek:
a_sotet_ejszaka
az_elveszett_frigylada_fosztogatoi
Azur_kek_tenger
bachelor_of_arts
barbie_es_ken
barracuda
bukaresti_mese
A tömb:
<?php
$pl['a_']['a_sotet_ejszaka'] = 254;
$pl['az']['az_elveszett_frigylada_fosztogatoi'] = 563;
$pl['az']['azur_kek_tenger'] = 32;
$pl['ba']['bachelor_of_arts'] = 768;
$pl['ba']['barbie_es_ken'] = 31;
$pl['ba']['barracuda'] = 34;
$pl['bu']['bukaresti_mese'] = 3466;
?>
<?php
/**
* pl__a.inc.php
*/
$pl['a_']['a_sotet_ejszaka'] = 254;
?>
<?php
/**
* pl_az.inc.php
*/
$pl['az']['az_elveszett_frigylada_fosztogatoi'] = 563;
$pl['az']['azur_kek_tenger'] = 32;
?>
<?php
/**
* pl_ba.inc.php
*/
$pl['ba']['bachelor_of_arts'] = 768;
$pl['ba']['barbie_es_ken'] = 31;
$pl['ba']['barracuda'] = 34;
?>
<?php
/**
* pl_bu.inc.php
*/
$pl['bu']['bukaresti_mese'] = 3466;
?>
<?php
/**
* http://siteom.hu/blog/barbie_es_ken => http://siteom.hu/index.php?plink=barbie_es_ken
*/
$part = $_GET['plink'][0].$_GET['plink'][1];
include 'pl_' . $part . '.inc.php';
$ID = $pl[$part][$_GET['plink']];
/**
* További műveletek, lekérdezések stb.
*/
?>
Mennyire érdemes tehermentesíteni az adatbázist? Túlzás ez, túlreagálom a problémát? (Nagy (10 000 + / nap) látogatottsággal kell számolni)
Vélemények, ötletek, tapasztalatok?
Előre is nagyon köszönöm.
Adatbázis index
Lehet hogy a te megoldásoddal az adatbázist minimálisan tehermentesíted, de az összteljesítmény és a karbantarthatóság szinte biztos, hogy rosszabb lesz.
csatlakozom
Szerintem simán mehetne az id
+1
Megoldások
Az azonosítót tárolhatod a blogbejegyzés mellett (ami a címvől származik), ilyenkor viszont ki kell találj vlami mechanizmust ami garantálja az egyediséget (mi van ha 3 évvel ezelőtt volt már egy azonos című bejegyzés)?
Duplabe javaslata egyszerübben implementálható. Én hosszú ideje használom ezt a módszert. Nálam kb így nézne ki:
http://siteom.hu/b234-majusi-kirandulas-bakony
A "blog" szó nem hordoz információt, és így előbbre kerülnek az értékes kifejezések, a gugli szavak elválasztására a - karaktert ajánlja az aláhúzással szemben...
a gugli szavak elválasztására
Már az aláhúzás is egyenrangú szóelválasztó.
Rendben
Kösz!
duplabe: kösz, ez tűnik a legjobb megoldásnak!
Rici: tisztában vagyok az indexek szerepével, de azzal is hogy egy 5000 rekordos táblában egy varchar255 mező indexe mennyi erőforrást igényel. Pont ezért szeretném elkerülni.
thgab: igen, egyedi lehet nagy valószínűséggel, de mi van ha nem? ahogy vbence is rávilágított, lehet, hogy 3 év múlva lesz egy azonos nevű bejegyzés.
Még egyszer kösz mindenkinek! :)
- vs. _
Hol ajánlja?
Köszi a válaszod előre is.
rand
ps: Elbaltáztam ... nem választ nyomtam sorry