Mateusz Pięta

Mateusz Pięta matinet.pl |
wyrusze.pl |
polskimechanik.pl

Temat: Cachowanie, includowanie, kodowanie, pytania amatora

Jest to mój pierwsze post na tej grupie dlatego Witam wszystkich...


Pomału przymierzam się do rozpoczęcia prac nad nową odsłoną wortalu http://www.wyrusze.pl , którą chciałbym programować sam.
Nie będę ukrywał. Moja wiedza nie jest porównywalna z zawodowcami, jednak mam nadzieję że sobie poradzę.

Od pewnego czasu nurtuje mnie kilka pytań, dlatego postanowiłem rozpocząć nowy temat.

1. Dobre serwisu mają regularnie cachowane dane z bazy SQL. I tu pojawia się moje pytanie, dlaczego bazy danych są aż tak popularne i często używane, skoro pobieranie z nich danych jest wolniejsze niż np. z plików tekstowych?
Programując serwis, artykuły będę umieszczał w plikach tekstowych, lub oddzielnych .php na serwerze i includował je, bądź zapisywał jako tabele i wyświetlał. Dobrze myślę? Wg mnie wiele rzeczy można zrobić be użycia bazy.
Na pewno będzie to szybsze rozwiązanie i czy nie praktyczniejsze?


2. Nie wiem czy jest do dobre pytanie na tą grupę, ale spróbujmy.
Chodzi o kodowanie pociętego już layoutu. Wiemy, że gdy na pociętym elemencie chcemy umieścić tekst, ustawiamy jego pozycję/atrybut na background, czyli warstwę pod spodem. Czy należy to robić tylko na elementach, na których chcemy umieścić czcionkę, czy można to zrobić na wszystkich slice'ach?


3. Swój portal planuję oprzeć o szablon CSS i autorskich skryptach. Czy jest lepszy sposób, niż umieszczanie ich w kodzie szablonu, np. w ten sposób: <div> <?php include('menu.php'); ?> ?


Przepraszam za mój brak profesjonalnego języka, jednakże proszę o odpowiedzi.

Z góry dziękuje i pozdrawiam,
Mateusz Pięta

konto usunięte

Temat: Cachowanie, includowanie, kodowanie, pytania amatora

1. Przy bazie danych kosztowne jest tylko wykonanie połączenia z bazą danych, natomiast same operacje (nawet na wielotysięcznych tabelach) są bardzo szybkie, o wiele szybsze niż operacje na plikach.

Dlatego w aplikacjach stosuje się wzorzec Singleton do wykonywania połączenia - tylko przy pierwszym odwołaniu do bazy wykonujemy połączenie, a przy każdym kolejnym korzystamy z otwartego już połączenia, zwracając tylko pożądane dane.

2. Nie wiem czy dobrze rozumiem pytanie. Tak, możesz na każdym elemencie stosować background-image i w większości jest to lepsze rozwiązanie niż zapełnianie DIV-ów niepotrzebnymi IMG-ami - chyba nawet bardziej semantycznie.

3. Poczytaj o MVC i innych wzorcach architektonicznych. Dobrze, by w Twojej aplikacji było jedno echo na samym końcu aplikacji - wypluło gotowy już kod i po kłopocie.

W przypadku większych serwisów możesz dać kilka echo, porcjować wypluwane dane i wysyłać pakietami przy pomocy funkcji ob_ - spowoduje to "przyjemniejsze" wczytywanie się strony - np. najpierw treść, potem menu/logo/inne pierdoły.

Temat: Cachowanie, includowanie, kodowanie, pytania amatora

Mateusz Pięta:
1. Dobre serwisu mają regularnie cachowane dane z bazy SQL. I tu pojawia się moje pytanie, dlaczego bazy danych są aż tak popularne i często używane, skoro pobieranie z nich danych jest wolniejsze niż np. z plików tekstowych?
Programując serwis, artykuły będę umieszczał w plikach tekstowych, lub oddzielnych .php na serwerze i includował je, bądź zapisywał jako tabele i wyświetlał. Dobrze myślę? Wg mnie wiele rzeczy można zrobić be użycia bazy.
Na pewno będzie to szybsze rozwiązanie i czy nie praktyczniejsze?

Nie chodzi o szybkość tylko sposób dostępu do danych. Jeśli chciałbyś każdy artykuł zapisać w oddzielnym pliku php który byś includował - to owszem - możesz, ale łatwiej będzie zapisać dane w BD. Poza tym z danymi z bazy danych możesz robić rozmaite rzeczy - jeśli np. w portalu będziesz chciał wyświetlić listę artykułów (tytułów), to jak zamierzasz zrobić to, gdy artykuł będziesz miał pliku php?
Poza tym w Twoim przypadku szybkość będzie i tak niezauważalna.
2. Nie wiem czy jest do dobre pytanie na tą grupę, ale spróbujmy.
Chodzi o kodowanie pociętego już layoutu. Wiemy, że gdy na pociętym elemencie chcemy umieścić tekst, ustawiamy jego pozycję/atrybut na background, czyli warstwę pod spodem. Czy należy to robić tylko na elementach, na których chcemy umieścić czcionkę, czy można to zrobić na wszystkich slice'ach?
Można na wszystkich, nie ma to znaczenia. Najlepiej powycinaj elementy graficzne samodzielnie i z nich złóż html, bo photoshop tworzy kiepskiej jakości kod.

3. Swój portal planuję oprzeć o szablon CSS i autorskich skryptach. Czy jest lepszy sposób, niż umieszczanie ich w kodzie szablonu, np. w ten sposób: <div> <?php
> include('menu.php'); ?> ?
Poczytaj o szablonach smarty, to będziesz miał też rozwiązany pierwszy problem.
Możesz też dość łątwo tworzyć własne - proste - szablony.
Np. plik o_nas.php możę wyglądać tak:
<?
// KOD PHP, w którym przygotowujesz treść i przypisujesz ją (assign w
// szablonach smarty) do zmiennych. Potem na końcu:
include('tpl_o_nas.php');
?>

a tpl_o_nas.php może być szablonem wyświetlającym przygotowane w pliku o_nas.php dane. Może być to też szablon wspólny dla wielu stron, lub szablon includujący również inne szablony (elementy) strony. (np. header, footer, menu..)

Powyższe w dużym uproszczeniu;)
Powodzenia.

Temat: Cachowanie, includowanie, kodowanie, pytania amatora

Kamil Brenk:
1. Przy bazie danych kosztowne jest tylko wykonanie połączenia z bazą danych, natomiast same operacje (nawet na wielotysięcznych tabelach) są bardzo szybkie, o wiele szybsze niż operacje na plikach.

huh? - nie, takie zapytania nie sa szybkie, a szczegolnie joiny i inne tego typu operacje i dlatego je sie cachuje + 100 innych powodow

cachowanie danych z bazy ma kilka podstaw, nawiazanie polaczenia jest jedynym z nich, drugi to operacje na wielu tabelach, skomplikowane zapytania lub operacje na duzych zbiorach danych, to wszystko przeklada sie na pozeranie zasobow serwera i czas odpowiedzi, jelsi jest on duzy to stosujesz cachowanie, z reguly na roznych poziomach, czy to mysql czy php, czy widokow, czy kolekcji obiektow czy calego output'u

porownaj sobie skrypt z 1 prostym selctem na persistent connection z odczytem z pliku, roznica nie bedzie juz az taka duza, a pozniej porownaj zlozony CMS z kilkunastoma zapytaniami z includem 1 pliku z cache, zobaczysz roznice

wez rowniez pod uwage ze bazy danych sluza nie tylko do skladowania danych ale i do roznych operacji na tych danych, tego juz bez sql tak skutecznie nie zrobisz

konto usunięte

Temat: Cachowanie, includowanie, kodowanie, pytania amatora

1. Przy malutkich maluchach - może. Przy większych ilościach danych - nie. Praca z DB jest przyjemniejsza, w przypadku plików - masę mechanizmów będziesz musiał pisać od początku - a tam, już ktoś to zrobił.

2. Tam gdzie obrazek jest częścią layoutu - niech będzie tłem, jest tylko wizualnym dodatkiem. Obrazki będące częścią treści - jako <img>.

3. MVC nie jest konieczny, dobrze go mieć - ale nie jest istotny (ostatnio jest modny). Ważnym jest byś wyraźnie wydzielił warstwę prezentacji, warstwę logiki i warstwę obsługi DB (choć brzmi jak MVC, to nie jest).

Czy będziesz używał systemu szablonów, czy mieszał HTML z PHP'em - zależy tylko od twojego widzimisię. Ważne byś nie mieszał logiki ze sposobem wyświetlania - to dwie różne rzeczy.

---
Kamil Brenk:
Dlatego w aplikacjach stosuje się wzorzec Singleton do wykonywania połączenia - tylko przy pierwszym odwołaniu do bazy wykonujemy połączenie, a przy każdym kolejnym korzystamy z otwartego już połączenia, zwracając tylko pożądane dane.

Oj tam, nie przesadza, można to realizować na inne sposoby.
Ważne by co chwilę nie otwierać nowego połączenia do DB a korzystać z otwartego.

Temat: Cachowanie, includowanie, kodowanie, pytania amatora

Kamil Brenk:
same operacje (nawet na wielotysięcznych tabelach) są bardzo szybkie, o wiele szybsze niż operacje na plikach.

zależy jaka baza danych.. zależy jakie dane masz w plikach.
Samo includowanie plików zdecydowanie szybsze, tylko trudniej zarządzać danymi przechowywanymi w plikach.
3. Poczytaj o MVC i innych wzorcach architektonicznych. Dobrze, by w Twojej aplikacji było jedno echo na samym końcu aplikacji - wypluło gotowy już kod i po kłopocie.
?? ale chyba w logice, bo w szablonach to już co innego.

konto usunięte

Temat: Cachowanie, includowanie, kodowanie, pytania amatora

Chciałbym zobaczyć sensowny system tagowania, kategoryzowania i przypisywania autorstwa artykułów oparty o pliki tekstowe. Podejrzewam, że w ekstremalnym tempie zaczęłoby to przypominać relacyjną bazę danych, tylko wyglądającą jak zrobiona przez radzieckich naukowców z drutu i betonu.
Mateusz Pięta

Mateusz Pięta matinet.pl |
wyrusze.pl |
polskimechanik.pl

Temat: Cachowanie, includowanie, kodowanie, pytania amatora

Rafał Krawczyk:
>
Poza tym z danymi z bazy danych możesz robić rozmaite rzeczy - jeśli np. w portalu będziesz chciał wyświetlić listę artykułów (tytułów), to jak zamierzasz zrobić to, gdy artykuł będziesz miał pliku php?

Wczytywanie tego z pliku php będzie trudne, skupiłbym się na txt i takim oto rozwiązaniu:

<?
$artykul = file('artykul.txt');
echo $artykul[1];
?>

Wyżej przytoczony skrypt dzieli kolejno wiersze pliku tekstowego i zapisuje go w tablicy. Tak mogę wywoływać tytułu artykułów.

Dziękuję za konkretne wypowiedzi, aż takich się nie spodziewałem :)

Myślałem także o oparciu całości o jakiś framework, np. Kohana, ale serwis nie będzie aż tak skomplikowany. Poza tym programując sam, będę wiedział co gdzie jest.
Czy będziesz używał systemu szablonów, czy mieszał HTML z PHP'em - zależy
tylko od twojego widzimisię. Ważne byś nie mieszał logiki ze sposobem
wyświetlania - to dwie różne rzeczy.

Co nazywamy mieszaniem logiki ze sposobem wyświetlania?
PHP będzie mieszany z HTML, tak już założyłem od początku...

Jeszcze raz dziękuję za odpowiedzi i zapraszam do dalszej dyskusji.
Mateusz Pięta

Mateusz Pięta matinet.pl |
wyrusze.pl |
polskimechanik.pl

Temat: Cachowanie, includowanie, kodowanie, pytania amatora

Mateusz Jaworski:
Chciałbym zobaczyć sensowny system tagowania, kategoryzowania i przypisywania autorstwa artykułów oparty o pliki tekstowe. Podejrzewam, że w ekstremalnym tempie zaczęłoby to przypominać relacyjną bazę danych, tylko wyglądającą jak zrobiona przez radzieckich naukowców z drutu i betonu.


Kiedyś strony były tylko statyczne i ludzie dawali sobie jakoś radę.
Dane znajdujące się w pikach tekstowych można zastąpić za pomocą skryptów, nadpisać, dopisać usunąć itp. Z wyświetleniem nawet pojedynczych elementów też nie ma problemu.

Po prostu myślałem, że bazy danych są powolne a opcja wczytywanie z plików tekstowych jest używana podczas cachowania, więc chciałem od razu wczytywać z pliku.

konto usunięte

Temat: Cachowanie, includowanie, kodowanie, pytania amatora

Logika (warstwa logiki) decyduje na podstawie otrzymanego żądania co zrobić z otrzymanymi danymi, czy i jakie dane pobrać, jak je obrobić, gdzie wysłać, jaki szablon wczytać.

Szablon (warstwa prezentacji) - odpowiada za wyświetlanie danych w określony sposób, ich sformatowanie - w uproszczeniu - odpowiada za prezentację tego co zrobiła logika.

Zaś warstwa danych odpowiada za odczyt, zapis, mapowanie danych i co tam jeszcze można z nimi zrobić.

---

Czy będziesz wiedział gdzie co jest? Z czasem - zapomnisz, poprawisz i pozmieniasz i nie będzie nikt tego wiedział. :)

Nie zabieraj się na razie za frameworka, po pytaniach jakie zadajesz - mógłby cię przerosnąć. Lepiej pisz sam i wraz z pisaniem zdobywaj wiedzę - tej nigdy za dużo.Michał Wachowski edytował(a) ten post dnia 16.10.10 o godzinie 00:36

konto usunięte

Temat: Cachowanie, includowanie, kodowanie, pytania amatora

Mateusz Pięta:
Mateusz Jaworski:
Chciałbym zobaczyć sensowny system tagowania, kategoryzowania i przypisywania autorstwa artykułów oparty o pliki tekstowe. Podejrzewam, że w ekstremalnym tempie zaczęłoby to przypominać relacyjną bazę danych, tylko wyglądającą jak zrobiona przez radzieckich naukowców z drutu i betonu.


Kiedyś strony były tylko statyczne i ludzie dawali sobie jakoś radę.
Dane znajdujące się w pikach tekstowych można zastąpić za pomocą skryptów, nadpisać, dopisać usunąć itp. Z wyświetleniem nawet pojedynczych elementów też nie ma problemu.

Po prostu myślałem, że bazy danych są powolne a opcja wczytywanie z plików tekstowych jest używana podczas cachowania, więc chciałem od razu wczytywać z pliku.są
bazy są powolne przy kiepskim wykorzystaniu -> nieoptymalna struktura, brak optymalizacji zapytań, brak indeksów itp

pliki pą proste jak drut, ale też są do zadań prostych jak drut, zero finezji, bo jak zrobić subselect na plikach?

konto usunięte

Temat: Cachowanie, includowanie, kodowanie, pytania amatora

Jeżeli serwis jest mały to nawet najgorzej zaprojektowana baza danych go nie zarżnie.

Jeżeli serwis jest duży, to oparcie go na plikach to samobójstwo.

konto usunięte

Temat: Cachowanie, includowanie, kodowanie, pytania amatora

Mateusz Pięta:
Kiedyś strony były tylko statyczne i ludzie dawali sobie jakoś radę.

To było jakoś 20 lat temu. Jeszcze przed powstaniem PHP i podobnych ludzie rzeźbili w C i Perlu strony dynamiczne właśnie dlatego, że sam HTML ssie.

Naszła mnie właśnie ciekawa myśl: jak miałem pięć lat, moje miejsce pracy (webdeveloper) jeszcze nie istniało ;)Mateusz Jaworski edytował(a) ten post dnia 16.10.10 o godzinie 00:44

konto usunięte

Temat: Cachowanie, includowanie, kodowanie, pytania amatora

Mateusz Jaworski:
Podejrzewam, że w ekstremalnym tempie zaczęłoby to przypominać relacyjną bazę danych, tylko wyglądającą jak zrobiona przez radzieckich naukowców z drutu i betonu.

No jasne :) A baza danych to co to niby jest? ;) Przecież to pliki... tylko takie lepszejsze właśnie...
Mateusz Pięta:
Kiedyś strony były tylko statyczne i ludzie dawali sobie jakoś radę.

Bo kiedyś o hosting z bazą było ciężko :) A wogle, to kiedyś kiedyś wcale nie było stron, nawet statycznych i też ludzie sobie dawali radę. A jeden to nawet odważnie stwierdził, że 640kb ramu w zupełności każdemu wystarczy...

Temat: Cachowanie, includowanie, kodowanie, pytania amatora

Peter K.:
No jasne :) A baza danych to co to niby jest? ;) Przecież to pliki... tylko takie lepszejsze właśnie...

Jup. Tylko funkcje do jej obsługi są napisane w języku o niebo szybszym niż PHP.

Wracając do ograniczeń zwykłych plików tekstowych. Skoro na stronie mają być artykuły to przyda się wyszukiwarka. Jaka będzie wydajność wczytywania i przeszukiwania wszystkich plików tekstowych?

konto usunięte

Temat: Cachowanie, includowanie, kodowanie, pytania amatora

Andrzej K.:
Jaka będzie wydajność wczytywania i przeszukiwania wszystkich plików tekstowych?

O(n^wch*j)

konto usunięte

Temat: Cachowanie, includowanie, kodowanie, pytania amatora

Andrzej K.:

Jup. Tylko funkcje do jej obsługi są napisane w języku o niebo szybszym niż PHP.

Wracając do ograniczeń zwykłych plików tekstowych. Skoro na stronie mają być artykuły to przyda się wyszukiwarka. Jaka będzie wydajność wczytywania i przeszukiwania wszystkich plików tekstowych?

No, ja nie neguję bazy :) Zgadzam się z Mateuszem, że prędzej czy później wyjdzie z tych plików ruska konstrukcja z betonodrutu :)
A bo newsy by się chciało mieć, a bo komentarze, a bo polecane oferty...
Po co się więc pie***lić z plikami? :)Peter K. edytował(a) ten post dnia 16.10.10 o godzinie 11:02
Tomasz Zadora

Tomasz Zadora programuję

Temat: Cachowanie, includowanie, kodowanie, pytania amatora

A'propos tematu "baz plikowych" - jest jeszcze coś takiego jak bazy "NoSQL" - z MongoDB na czele jeżeli chodzi o wsparcie w PHP.

Bazy takie z jednej strony łączą pewne zalety tradycyjnych, relacyjnych baz danych (ale relacyjnymi nie są), z drugiej strony są łatwiejsze w używaniu (schemaless etc.).

Łatwość może być zaletą szczególnie dla początkujących - jak autor tego wątku - nie trzeba się uczyć SQLa i wielu innych rzeczy, prosty i szybki start :)
Jakub L.

Jakub L. Programista

Temat: Cachowanie, includowanie, kodowanie, pytania amatora

Arkadiusz K.:
Kamil Brenk:
1. Przy bazie danych kosztowne jest tylko wykonanie połączenia z bazą danych, natomiast same operacje (nawet na wielotysięcznych tabelach) są bardzo szybkie, o wiele szybsze niż operacje na plikach.

huh? - nie, takie zapytania nie sa szybkie, a szczegolnie joiny i inne tego typu operacje i dlatego je sie cachuje + 100 innych powodow

Takie zapytania są szybkie.
porownaj sobie skrypt z 1 prostym selctem na persistent connection z odczytem z pliku, roznica nie bedzie juz az taka duza, a pozniej porownaj zlozony CMS z kilkunastoma zapytaniami z includem 1 pliku z cache, zobaczysz roznice

Ja bym doprecyzował test: jest sobie GUS - Główny Urząd Statystyczny.
On ma taką bazę - bazę miejscowości w Polsce, około 100k rekordów.
Każda miejscowość ma swój własny kod GUSu.

Zrób sobie test - wywal ją do pliku tekstowego i zrób formularz z prostym selectem - dla podanego miasta znajdź jego kod.

Później zrób sobie test - zaimportuj tę bazę do jakiegoś silnika i zrób to samo.

A na koniec załóż indeks na nazwy miejscowości i zrób to samo.

A to jest tylko jeden głupi select.

Jako bonus - ciekawe jak to władujesz do cache.
Jakub L.

Jakub L. Programista

Temat: Cachowanie, includowanie, kodowanie, pytania amatora

Przemysław R.:
Mateusz Pięta:

Po prostu myślałem, że bazy danych są powolne a opcja wczytywanie z plików tekstowych jest używana podczas cachowania, więc chciałem od razu wczytywać z pliku.są
bazy są powolne przy kiepskim wykorzystaniu -> nieoptymalna struktura, brak optymalizacji zapytań, brak indeksów itp

pliki pą proste jak drut, ale też są do zadań prostych jak drut, zero finezji, bo jak zrobić subselect na plikach?

Bierzesz ORM, za każdym wykonaniem skryptu zaczytujesz pliki, opakowujesz to wszystko w obiekty i ładujesz do pamięci, a potem już jedziesz :).
Da się, tylko z optymalnością czasu i zasobów nie ma to wiele wspólnego.



Wyślij zaproszenie do