Jakie są najlepsze praktyki dotyczące tworzenia płaskich struktur baz danych plików w PHP?
Wiele bardziej dojrzałych frameworków PHP z płaskim plikiem, które próbuję zaimplementować składnię zapytań podobną do SQL, która w większości przypadków jest przesadzona. (W tym momencie użyłbym tylko bazy danych).
Czy są jakieś eleganckie sztuczki, które pozwalają uzyskać dobrą wydajność i funkcje przy niewielkim narzucie kodu?
for loop
(chyba że używam wszystkich danych w folderze), dlatego działa o wiele szybciej niż baza danych. Poszedłbym szczegółowo i udzieliłbym bardzo dobrej odpowiedzi, ale niestety to pytanie jest zamknięte.Odpowiedzi:
Cóż, jaka jest natura płaskich baz danych. Czy są duże czy małe. Czy są to proste tablice zawierające tablice? jeśli jest to coś prostego, powiedzmy profile użytkowników zbudowane jako takie:
i zapisać lub zaktualizować rekord db dla tego użytkownika.
i załadować rekord dla użytkownika
ale znowu ta implementacja będzie się różnić w zależności od zastosowania i charakteru potrzebnej bazy danych.
źródło
Możesz rozważyć SQLite . To prawie tak proste, jak pliki płaskie, ale otrzymujesz silnik SQL do wykonywania zapytań. To działa dobrze z PHP zbyt.
źródło
Moim zdaniem używanie „Flat File Database” w sensie, który masz na myśli (i zaakceptowanej przez Ciebie odpowiedzi) nie jest koniecznie najlepszym sposobem na załatwienie sprawy. Po pierwsze, używanie
serialize()
iunserialize()
może powodować DUŻE bóle głowy, jeśli ktoś wejdzie i edytuje plik (w rzeczywistości może umieścić kod arbritrary w twojej "bazie danych", aby był uruchamiany za każdym razem).Osobiście powiedziałbym - dlaczego nie spojrzeć w przyszłość? Tak wiele razy miałem problemy, ponieważ tworzyłem własne „zastrzeżone” pliki, a projekt eksplodował do punktu, w którym potrzebna jest baza danych, i myślę „wiesz, chciałbym Napisałem to dla bazy danych, aby zacząć od „- ponieważ refaktoryzacja kodu wymaga zbyt wiele czasu i wysiłku.
Z tego dowiedziałem się, że zabezpieczanie mojej aplikacji w przyszłości, tak, że gdy się rozrośnie, nie będę musiał iść i spędzać dni na refaktoryzacji, jest dobrym rozwiązaniem. Jak mam to zrobic?
SQLite. Działa jako baza danych, używa SQL i jest dość łatwa do zmiany na mySQL (szczególnie jeśli używasz abstrakcyjnych klas do manipulacji bazą danych, tak jak ja!)
W rzeczywistości, szczególnie w przypadku metody „zaakceptowanej odpowiedzi”, może drastycznie zmniejszyć użycie pamięci przez aplikację (nie musisz ładować wszystkich „REKORDÓW” do PHP)
źródło
serialize()
również do tego może się przydać. Myślę, że trik do wymyślenia realnego systemu polega na znalezieniu sposobu na indeksowanie węzłów danych bez zabijania się ze złożonością.Jedną z platform, które rozważam, byłaby platforma blogowa. Ponieważ prawie każdy możliwy widok danych, który chcesz, byłby sortowany według daty, myślałem o tej strukturze:
Jeden katalog na węzeł treści:
Podkatalogi każdego węzła, w tym
Jak również proste pliki tekstowe w katalogu węzłów dla treści renderowanych przed i po renderowaniu i tym podobne.
Umożliwiłoby to proste
glob()
wywołanie PHP (i prawdopodobnie odwrócenie tablicy wyników) na zapytanie o prawie wszystko w strukturze treści:Zwróci ścieżki zawierające wszystkie artykuły oznaczone jako „śmieszne”.
źródło
Oto kod, którego używamy dla Liliny:
Przechowuje każdy wpis jako osobny plik, który, jak stwierdziliśmy, jest wystarczająco wydajny do użycia (żadne niepotrzebne dane nie są ładowane, a zapisywanie jest szybsze).
źródło
Jeśli zamierzasz używać płaskiego pliku do utrwalania danych, użyj XML do strukturyzowania danych. PHP ma wbudowany parser XML .
źródło
Jeśli chcesz uzyskać czytelny dla człowieka wynik, możesz również użyć tego typu pliku:
W ten sposób masz tylko jeden plik, możesz go łatwo debugować (i ręcznie naprawić), możesz dodać pola później (na końcu każdej linii), a kod PHP jest prosty (dla każdej linii podziel według |).
Jednak wadą jest to, że powinieneś przeanalizować cały plik, aby coś wyszukać (jeśli masz miliony wpisów, to nie jest w porządku) i powinieneś obsługiwać separator w danych (na przykład, jeśli nick to WaR | ordz).
źródło
Napisałem dwie proste funkcje przeznaczone do przechowywania danych w pliku. Możesz sam ocenić, czy jest to przydatne w tym przypadku. Chodzi o to, aby zapisać zmienną php (jeśli jest to tablica, łańcuch lub obiekt) do pliku.
źródło
To jest inspirujące jako praktyczne rozwiązanie:
https://github.com/mhgolkar/FlatFire
Wykorzystuje wiele strategii przetwarzania danych ...
[skopiowane z pliku Readme]
Bezpłatne lub Strukturalne lub Mieszane
źródło
IMHO, masz dwie opcje, jeśli chcesz uniknąć warzenia czegoś w domu:
SQLite
Jeśli znasz PDO, możesz zainstalować sterownik PDO, który obsługuje SQLite. Nigdy go nie używałem, ale używałem PDO mnóstwo z MySQL. Mam zamiar dać temu szansę na bieżący projekt.
XML
Zrobiono to wiele razy dla stosunkowo niewielkich ilości danych. XMLReader to lekka, odczytywana do przodu klasa w stylu kursora. SimpleXML ułatwia odczytanie dokumentu XML do obiektu, do którego można uzyskać dostęp, tak jak do każdej innej instancji klasy.
źródło
Zwracam tylko uwagę na potencjalny problem z płaską bazą danych w tego typu systemie:
...itp
Problem polega na tym, że dane komórki zawierają znak „|” lub "\ n" wtedy dane zostaną utracone. Czasami byłoby łatwiej podzielić kombinacje liter, których większość ludzi by nie używała.
Na przykład:
Rozdzielacz kolumnowy:
#$% (Shift+345)
Rozdzielacz rzędów:
^&* (Shift+678)
Plik tekstowy:
test data#$%blah blah#$%^&*new row#$%new row data 2
Następnie użyj:
explode("#$%", $data); use foreach, the explode again to separate columns
Albo cokolwiek podobnego. Mogę również dodać, że bazy danych o płaskich plikach są dobre dla systemów z małą ilością danych (tj. Mniej niż 20 wierszy), ale stają się olbrzymią ilością pamięci dla większych baz danych.
źródło