Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: NoteDb - klasa obsługi tekstowej bazy danych
Forum PHP.pl > Inne > Oceny
Blame
Przedstawiam wam stworzoną przeze mnie klasę do obsługi tekstowej bazy danych. Liczę na wasze porady dot. całego skryptu smile.gif

Aktualna wersja: 0.8.0 BETA

Klasę można pobrać ze strony projektu: NoteDb. Znajduje się tam również manual, który cały czas uzupełniam.
Dodaję ją już teraz, bo chciałbym poznać wasze opinie, propozycje przebudowy itp. jak najwcześniej, żeby poprawki były jak najmniej czasochłonne i bolesne wink.gif

Podstawowymi atutami tej klasy jest zastosowanie najszybszych dostępnych w PHP mechanizmów przechowywania danych w plikach,
włączając w to kompresję oraz wbudowany system cache. Podobnie jak w MySQL operuje ona na bazach danych i przypisanych do nich tabel.

Zastanawia mnie kwestia obsługiwanych rodzajów danych. Aktualnie mogą być przechowywane chyba wszystkie typy, oprócz tablic, przy których klasa się sypie(nie martwcie się, wiem czemu wink.gif).
Zostawić to tak jak jest, czy może ograniczyć je tylko i wyłącznie do typów numerycznych i ciągów?

Liczę na wasze oceny smile.gif
nospor
Czemu stworzyłeś coś takiego? Jako alternatywę do czegoś? np. do sqlite?

Przechowujesz całą tablicę jako zserializowany tekst w pliku php. Chcąc coś pobrać, jakiś rekord, trzeba wczytywać cały plik do pamięci. Nie można pobrać tylko i wyłącznie tego rekordu. Chcąc coś posortować, trzeba znowu wczytywać cały plik/tablicę potem normalnie sortować przy usort.

Moim zdaniem ta klasa nie ma żadnego praktycznego zastosowania. Nadaje się do trzymania tylko i wyłącznie małych tablic i na dobrą sprawę nie wiem czemu to miałoby służyć.

Może miałeś jakieś konkretne zamierzenie i będzie ciut jaśniej?

ps: Twoje nazewnictwo jest mi jakoś dziwnie znajome... wink.gif
Spawnm
BĹ‚Ä…d metody ... jakieś dziwne kodowanie.
$this->_mainDir=rtrim($mainDir, '\\/').'/'; - nie powinno tu być DIRECTORY_SEPARATOR ?
Blame
Nospor nie ukrywam że podglądałem twoją klasę ale tylko i wyłącznie jeśli chodzi o sposób w jaki komentujesz kod tongue.gif
Klasę stworzyłem jako alternatywa dla MySQL tak jak już wspomniałeś do jakiś lżejszych zastosowań. Niemniej starałem się, aby podczas działania klasy plik był przynajmniej wczytywany jak najmniej razy.
Szczerze mówiąc nie miałem do czynienia z sqlite wstydnis.gif i nie wiem w jaki sposób on działa, ale obiecuje, że się douczę wink.gif

EDIT: @Spawnm DS poprawione. Co do kodowania to to są chyba jakieś cyrki NetBeans'a, bo to nie pierwszy taki przypadek, kiedy ja wszystko widzę ok a inni mówią, że się sypie...
nospor
Cytat
Nospor nie ukrywam że podglądałem twoją klasę ale tylko i wyłącznie jeśli chodzi o sposób w jaki komentujesz kod
Komentowanie...tja.... nazewnictwo zmiennych - styl a nawet nazwy zmiennych przeznaczone do konkretnych celów. Przez moment miałem wrażenie, że czytam własny kod tongue.gif

Ale ja nic nie mówię, zauważyłem jedynie, że styl jest mi "znany" smile.gif

Cytat
Klasę stworzyłem jako alternatywa dla MySQL tak jak już wspomniałeś do jakiś lżejszych zastosowań.
Alternatywą do mysql do lżejszych zastosowań jest właśnie sqlite.
Jako zabawa/nauka to ta klasa dla Ciebie może być. Aczkolwiek wydaje mi się, że nic wiecej z tego nie będzie. Twoja baza nie posiada podstawowej cechy jaką posiadają bazy - indeks.
Blame
Posłucham mądrzejszego i nie będę się upierał przy swoim tongue.gif
Czasami napadają mnie takie pomysły na różne projekty i potem nie zważając na ich użyteczność je realizuje. Może i są mało przydatne, ale zawsze się przy nich czegoś nauczę wink.gif
Myślę, że pozostawię tą klasę na razie tak jak jest(a nóż widelec się komuś do czegoś przyda smile.gif) i w razie potrzeby będę ją poprawiał/rozwijał.
nospor
Cytat
Czasami napadają mnie takie pomysły na różne projekty i potem nie zważając na ich użyteczność je realizuje. Może i są mało przydatne, ale zawsze się przy nich czegoś nauczę
Eeee, żebyś Ty widział ile ja takich rzeczy natworzyłem gdy zaczynałem. Wtedy jeszcze w pascalu i c programowałem.
Crozin
Cytat
Podstawowymi atutami tej klasy jest zastosowanie najszybszych dostępnych w PHP mechanizmów przechowywania danych w plikach
Ten argument widząc wielokrotnie stosowanego evala jest nieco śmieszny. wink.gif
Blame
Wydawał mi się zwyczajnie szybszy niż if/switch dla każdego operatora wink.gif
Fifi209
Z ciekawości przeglądam kod, prócz uwag wyżej zapytam np. o ten twór:
  1. public function tableExists($tableName){
  2. return is_file($this->_dbDir.$tableName.'.php')?true:false;
  3. }

Nie można po prostu zwrócić wyniku is_file, o ile dobrze pamiętam zwraca bool, więc dalsza część jest raczej niepotrzebna.

Komentarz:
Cytat
// Zbrawdzam czy tablica jest wielopiętrowa(? tongue.gif)

Troszkę mnie rozbawił
Jak już to sprawdzasz czy jest wielowymiarowa

Co do błędów, zrobiłbym to na stałych i przy wyrzucaniu wyjątków pakował np. :
  1. throw new NoteException(NoteException::ERRCODE_NOTEXISTS)

ale to chyba taka moja wizja, lepsze to niż pisanie:
  1. $this->_errorMsg['notReadable']

Jakoś tak zaproponowane moje rozwiązanie "ładniej" wygląda


Poza tym jeżeli to ma być w ogóle baza danych to pomijając indeksy, pomijając to jak przetrzymujesz i odczytujesz dane chciałbym dodać, że to coś bardziej złożonego i powinno być zgodne z językiem SQL, wiadomo różne bazy mają jakby "odmiany" jak postrgre i mysql ale to raczej drobne sprawy.
Spawnm
Czemu powinno mieć sql? To jest bardziej klasa dataStorage.

Ostatnio wyskrobałem coś podobnego tylko lżejszego i działa tak:
  1. $data = new sf_data();
  2. $data->load('menu');
  3. $data->set('top', array('Home', 'Download'))
  4. ->set('left', array('Home', 'Download', 'Forum', 'IRC'))
  5. ->save();
  6.  
  7. $menuTop = $data->get('top');
Fifi209
Bo bazy danych mają to do siebie, że w większości przypadków odpytujemy je za pomocą języka.
Jeżeli to nie baza danych to niech nie używa, ale niech nikt nie pisze że jest to baza.
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-2024 Invision Power Services, Inc.