Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Opcje użytkownika w SQLite z innych baz
Forum PHP.pl > Forum > PHP
Tomplus
Witam,

Jakoś nie jest zbyt dużo informacji na ten temat, ale czy warto korzystać SQLite na poziomie publicznej strony PHP. Chodzi mi o przypadek, gdzie użytkownik ma wiele opcji zapisane w bazie MySQL, PgSQL i zamiast odpytywać o każdą opcję bazę (czasem jest taka potrzeba) to czy nie lepiej odpytywać bazę SQLite, gdzie tabela jest zapisana w pamięci?

Mówię tutaj o połączeniu sqlite::memory:

tj. dalej..
mamy np. kilkadziesiąt różnych pozycji autoryzacji miejsc na stronie, można np. zrzucić do zmiennej, utworzyć obiekt który będzie przenoszony między klasami - jest to najpopularniejsza forma.
Jednak nic nie wiem o tej drugiej formie czyli tworzeniu w pamięci bazy SQL która do zakończeniu skryptu można ją odpytywać. Czytając dowiedziałem się że nie dość że odciążamy bazę od wielokrotnych "bzdurnych" zapytań to jeszcze są one szybsze.

Ale na ile w tym prawdy?

nospor
sqllite memory dziala w obrebie skryptu. Jak zamkniesz skrypt to to co wrzuciles do pamieci wyleci w kosmos.

Moze zamiast tak kombinowac moze poppraw strukture bazy? Opcje usera sa w mysql i pgsql jednoczesnie? No to cos nie tak ze struktura wink.gif
Tomplus
Nie, nie... mysql i pgsql to przykład. Albo ta baza, albo ta.

Doskonale wiem, że po zamknięciu skryptu dane idą jak to ująłeś w kosmos, albo chodzi o to czy warto korzystać z tej techniki? Korzystanie z bazy SQLite memory przez krótki czas.


Chociaż powiem, że mając pod opieką bazy danych zaprojektowane jeszcze w 2002 roku, to męczy czasem problematyczne odpytywanie bazy danych skomplikowanymi zapytaniami. A przeprojektowanie nie wchodzi w grę, zbyt dużo wysiłku i kosztów.
nospor
Po co? skoro sam wiesz ze to dziala tylko na czas skryptu to po grzyba chcesz tam cos pchac? Przeciez by najpierw wepchac i tak musisz wpierw pobrac to z mysql. Czyli pobierzesz z mysql, wrzucisz do memory, a potem pobierzesz ponownie z memory. Czemu wiec nie pobrac od razu tylko raz z mysql? Sztuka dla sztuki?
Tomplus
No dobrze, ale przykładowo.

Musisz pobrać z bazy dane dla użytkownika jest ich przykładowo 100.
Mają je już w pamięci jako tablica lub obiekt chcę szybko wyłuskać konkretne rekordy, a za chwilę jeszcze inne z pobranej puli informacji.
Mogę wykonać dwa zapytania do MySQL, ale mogę odwołać się zapytaniem SQL do pamięci, gdzie utworzyłem sobie tymczasową bazę.
Po zapisie do memory, pobrane dane z bazy MySQL usuwamy.


Innym przykładem jest przy tablicach wielowymiarowych, gdzie nie znamy klucza, a znamy jaką wartość z głębszych rejonów tablicy. Zwykle pomaga w takich przypadkach taka funkcja: array_search($needle, array_column($array, 'key')); ale ile razy nie trzeba było więcej napocić się aby uzyskać jakąś informację.

Oczywiście zgadzam się z tym że bez sensu jest stosować tą technikę w prostych przykładach/stronach.
nospor
Cytat
ale mogę odwołać się zapytaniem SQL do pamięci, gdzie utworzyłem sobie tymczasową bazę.
yhm... a powiedz mi prosze kiedy utworzyles sobie te tymczasowa baze oraz na podstawie czego?

Cytat
Po zapisie do memory, pobrane dane z bazy MySQL usuwamy.
A, a to juz w ogole odlot... przeciez ustalilismy juz, ze memory to tylko baza tymczasowa. Skasujesz z mysql, memory wyleci w kosmos i co? W magiczny sposob dane usera beda sobie pobierane z kosmosu? wink.gif
Tomplus
Czepiasz się słówek tongue.gif

Ale przykład:

  1. $lista = $dbMySQL->query("#zapytanie ogólne");
  2. $dbMem -> createTable($lista);
  3. unset($lista);
  4. print_r($dbMem->query("#zapytanie precyzyjne #1"));
  5. print_r($dbMem->query("#zapytanie precyzyjne #..."));
  6. print_r($dbMem->query("#zapytanie precyzyjne #n"));



Chodzi o to że za każdym wywołaniem skryptu, tworzysz znowu taką tymczasową bazę. Tu pytanie, czy jest to sensowne, czy lepiej odpytywać MySQL częściej w sprawie precyzyjnych odpowiedzi.
nospor
Nie czepiam sie slowek. Staram ci sie najdelikatniej jak tylko potrafie powiedziec, ze pleciesz bzdury tongue.gif

Cytat
Chodzi o to że za każdym wywołaniem skryptu, tworzysz znowu taką tymczasową bazę.
No i po raz kolejny sie pytam: no po jaka cholere? By otworzyc te baze za kazdym razem to musisz ja miec z czego utworzyc. W przypadku co opisales musisz pobrac wiec wpierw dane z mysql, utworzyc baze memory, pobrac dane z bazy memory. I to wg. ciebie ma byc szybsze niz pobranie tylko raz danych z mysql? No nie rozumiem.

Cytat
Innym przykładem jest przy tablicach wielowymiarowych, gdzie nie znamy klucza, a znamy jaką wartość z głębszych rejonów tablicy. Zwykle pomaga w takich przypadkach taka funkcja: array_search($needle, array_column($array, 'key')); ale ile razy nie trzeba było więcej napocić się aby uzyskać jakąś informację.
A to juz jest zupelnie inny przypadek, gdzie w pewien sposob musisz zindeksowac swoja tablice tak by w szczegolnym wyszukiwaniu bylo szybciej. Rownie dobrze mozesz utworzyc kolejna tablice ze swoimi indexami i co najsmieszniejsze ona tez bedzie w memory. Po co wiec zaprzegac do tego mysqli?
viking
Mysql też ma silnik memory więc po co tak przerzucać? Sam sqlite jest natomiast dużo szybszy dla połączenia i prostych operacji.
Tomplus
@viking
Swoją drogą zrobiłem test, i tworząc taką bazę na silniku memory pojawia się na listingu tabel tymczasowo taka tabela, tylko właśnie czy gdy inny użytkownik utworzy taką samą, to nie będzie konfliktu.

@nospor
Właśnie celem jest aby nie zaprzęgać bazy mySQL czy pgSQL zbyt często do pracy, tj. właśnie wtedy gdy wykonuje się dużo pojedynczych połączeń z bazą danych, szczególnie gdy są to skomplikowane zapytania.

Ogólnie szukam zastosowania tej techniki i prócz tego co tutaj przedstawiłem, nie mogę znaleźć innego zastosowania, a myślę że jest to użyteczne.


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.