Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Wczytywanie konfiguracji z mySQL
Forum PHP.pl > Forum > Bazy danych > MySQL
k0nrad
Witam.

Piszę system logowania (rejestracja, logowanie, autoryzacja, prywatne wiadomości, wraz z panelem administracyjnym) i właśnie wzięłem się za konfigurację. Chcę, aby system był jak najbardziej konfigurowalny, więc dane będę przechowywał w jednej tabeli MySQL wg. wzoru:

nazwa wartości (klucz), wartość

Wartości będzie kilkadziesiąt.

Chciałem poprosić o radę dotyczącą wczytywania wartości z tego configu - czy napisać funkcję która zwróci wszystko w tablicy asocjacyjnej $config, czy też napisać funkcję, która jako parametr przyjmie nazwę wymaganej wartości a zwróci jej zawartość? Chodzi mi tylko i wyłącznie o prędkość działania skryptu. Zaznaczam, że każda funkcja wczytuje średnio 4-7 wartości z configa.
Niestety, przetestowanie obydwu rozwiązań i porówanie prędkości nie jest za bardzo możliwe, ponieważ mam już napisane około 1600 linijek kodu, a podmienianie wartości "na próbę" zajęłoby mnóstwo czasu.

Krótki schemat funkcji o których mówiłem:

1 - wczytanie wszystkiego na raz i następnie wywoływanie poszczególnych elementów tablicy
  1. <?php
  2. function wczytajConfig() {
  3. $config=array();
  4.  
  5. // wczytanie każdej wartości z MySQL do tablicy config wg wzoru:
  6. $config['nazwa_wartosci'] = 'wartosc pola';
  7.  
  8.  return $config;
  9. }
  10.  
  11. // nastepnie uzycie tego w kazdej funkcji po kilka razy:
  12.  
  13. function jakas_funkcja() {
  14.  global $config;
  15. if ($config['jakas_zmienna'] == 'tak') {
  16.  // wykonanie odpowiednich
  17.  // czynnosci, gdy jakas_zmienna = "tak"
  18. }
  19.  
  20. // dalsza część funkcji....
  21.  
  22. // kolejne wczytywania zmiennych z $config
  23. }
  24. ?>




i sposób drugi (wczytywanie wartości tylko w chwili, gdy jest potrzebna)
  1. <?php
  2. function wczytajDanaWartosc ($nazwa_wartosci) {
  3. // zapytanie do MySQL i przypisanie zmiennej $wartosc wartosci danego pola
  4.  
  5.  return ($wartosc)
  6. }
  7.  
  8. // i kiedy w kodzie potrzebna jest wartość danego pola...
  9.  
  10.  if (wczytajDanaWartosc ($jakas_wartosc) == "tak") {
  11. // wykonanie odpowiednich
  12. // czynnosci, gdy jakas_zmienna = "tak"
  13.  }
  14.  
  15.  // dalsza częśc kodu....
  16.  
  17.  // kolejne wywołania wartości wg. powyższego wzoru
  18. ?>


Będę bardzo wdzięczny za rady i sugestie.
dr_bonzo
Skoro wartosci jest tylko kilkadziesiat (moze w porywach kilka kilobajtow) to lepiej wszystkie wrzucic do jednej tablicy asocjacyjnej.

Cytat
Niestety, przetestowanie obydwu rozwiązań i porówanie prędkości nie jest za bardzo możliwe, ponieważ mam już napisane około 1600 linijek kodu, a podmienianie wartości "na próbę" zajęłoby mnóstwo czasu.

Klania sie OOP.

Bubujesz klase z metoda (podajesz nazwe ustawienia, zwraca jego wartosc) do pobierania wartosci tych ustawien, gdy pierwszy raz pobierasz ustawienie, to wczytujesz je z bazy danych do tablicy i zwracasz wartosc, nastepnym razem zwracasz wartosc z tablicy, bez odwolywania sie do bazy.
k0nrad
Cytat
Klania sie OOP.


Na klasach jeszcze za bardzo się nie znam, więc obecnie piszę strukturalnie, a obiektowo planuję w przyszłości... Póki co - zadowolę się wczytywaniem całego configa na raz funkcją. Dzięki za radę
dr_bonzo
Co do OOP:
Masz klase odpowiedzialna za przechowywanie konfigu i pobieraniu jego wartosci -- a to jak to dziala (czy osobne zapytania, czy jedno zapytanie + cache) jest ukryte wewnatrz klasy, dzieki czemu mozesz SZYBKO wymieniac te moduly i je testowac smile.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.