Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> czy taka baza będzie smigać?
dyziekwik
post
Post #1





Grupa: Zarejestrowani
Postów: 18
Pomógł: 0
Dołączył: 7.12.2009

Ostrzeżenie: (0%)
-----


witam, chciałbym się dowiedzieć a może bardziej upewnić czy projekt króry właśnie szykuje ma rację bytu. Będzie to baza danych w MySQL. w tej bazie będzie ok 15 tabel o wymiarze 3000wierszyx500kolumn więc w moim mniemaniu całkiem dużo. Taki wymar jest chyba najlepszą opcją dla mojego serwisu.
czyli:

_________nazwa1__nazwa2__nazwa3__nazwa4......
element1______0______1______0______1
element2______1______1______0______0
element3______1______0______0______1
element4______1______0______1______0
:
:
:
wiec tak wygląda idea jednej z 15 tablic. nazw bedzie ok 500, elementów ok 3000. W wartościach będzie true or false, czyli 0 i 1.
Cały bajer polega na tym, że użytkownik wybierze sobie powiedzmy ok 15 nazw i zadaniem serwera będzie zwrócić wszystkie elementy które zawierają się w zadanym zbiorze, czyli mają jedynki w odpowiedniej kolumnie. czyli np. zadaje mu, że ma szukać po nazwach 1,3 i 4 i powinien zwrócić elementy 3 i 4. Jeden element będzie miał ok 10 jedynek w wierszu, czyli ok 490 pól będzie zerami. Sposób szukania mam juz opracowany i będzie to szukanie nie po "jedynkach" czyli tam gdzie element występuje, ale po "zerach", dzięki czemu wyeliminuje rekordy niespełniające założenia. Nie wiem czy to aby dobry pomysł... czy nie zamuli serwera... wielkość całej bazy (to znaczy jej zawartości) szacuje na jakies 8-10Mb czyli relatywnie nie dużo, za to będzie masa szukania.
Proszę powiedzcie czy MySQL pociągnie takie szukanie. przewiduję może i optymistycznie, że odwiedzin stron będzie ok 10000 dziennie (przynajmniej na tyle chciałbym, aby strona była przygotowana)
Czy MySQL to dobra opcja? Z góry dziękuję za odpowiedz.
Pozdrawiam!
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Mchl
post
Post #2





Grupa: Zarejestrowani
Postów: 855
Pomógł: 145
Dołączył: 17.07.2008
Skąd: High Memory Area

Ostrzeżenie: (0%)
-----


Robisz tabelę na słowa kluczowa (odpowiednik zbioru X)

  1. CREATE TABLE `slowakluczowe` (
  2. `ID` int(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  3. `slowo` varchar(45) NOT NULL,
  4. PRIMARY KEY (`ID`)
  5. );
  6.  
  7. INSERT INTO `slowakluczowe` (`slowo`) VALUES
  8. ('a'),('b'),('c'),('d'),('e'),('f'),('g'),('h'),('i');



Tabelę na podzbiory A,B,C itd

  1. CREATE TABLE `podzbiory` (
  2. `ID` int(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  3. `nazwa` varchar(45) NOT NULL,
  4. PRIMARY KEY (`ID`)
  5. );
  6.  
  7. INSERT INTO `podzbiory` (`nazwa`) VALUES
  8. ('A'),('B'),('C'),('D');


Tabelę z zawartością podzbiorów

  1. CREATE TABLE `podzbiory_zawartosc` (
  2. `podzbiorID` int(10) UNSIGNED NOT NULL,
  3. `slowoID` int(10) UNSIGNED NOT NULL,
  4. PRIMARY KEY (`podzbiorID`,`slowoID`) USING BTREE
  5. );
  6.  
  7. INSERT INTO `podzbiory_zawartosc` (`podzbiorID`, `slowoID`) VALUES
  8. (1, 1),(1, 3),(1, 6),(1, 7), /* A = {a,c,f,g} */
  9. (2, 3),(2, 5),(2, 6), /* B = {c,e,f} */
  10. (3, 3),(3, 6), /* C = {c,f} */
  11. (4, 2),(4, 3),(4, 7),(4, 9); /* D = {b,c,g,i} */


No i zapytanie.
  1. SELECT
  2. p.nazwa
  3. FROM
  4. podzbiory AS p
  5. INNER JOIN (
  6. SELECT
  7. pz.podzbiorID AS ID
  8. FROM
  9. slowakluczowe AS s
  10. INNER JOIN
  11. podzbiory_zawartosc AS pz
  12. ON
  13. s.ID = pz.slowoID
  14. WHERE
  15. s.slowo IN ('b','c','e','f','h')
  16. ) AS s
  17. USING (ID)
  18. LEFT JOIN (
  19. SELECT
  20. pz.podzbiorID AS ID
  21. FROM
  22. slowakluczowe AS s
  23. INNER JOIN
  24. podzbiory_zawartosc AS pz
  25. ON
  26. s.ID = pz.slowoID
  27. WHERE
  28. s.slowo NOT IN ('b','c','e','f','h')
  29. ) AS sw
  30. USING (ID)
  31. WHERE sw.ID IS NULL
  32. GROUP BY
  33. p.nazwa



Ten post edytował Mchl 8.12.2009, 13:35:48
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 3.10.2025 - 12:30