Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PostgreSQL][PHP]Kilka baz danych dla jednej strony
Forum PHP.pl > Forum > Przedszkole
Xenom
Właśnie wykonuję serwis, gdzie do bazy danych postgresql będzie wrzucanych od groma danych(mogą być duże przeciążenia).
Boję się o stan takiej bazy i zastanawiam się nad podłączeniem różnych baz danych do różnych aspektów serwisu.
Czy ma to sens i tu zapytanie skierowane do doświadczonych programistów?
Niktoś
Cytat
Boję się o stan takiej bazy i zastanawiam się nad podłączeniem różnych baz danych do różnych aspektów serwisu.

Do różnych aspektów serwisu są różne rozwiązania.Może poczytaj o nierelacyjnych bazach danych,może to Ci przypasi.
Xenom
Cytat(Niktoś @ 17.04.2012, 11:22:48 ) *
Do różnych aspektów serwisu są różne rozwiązania.Może poczytaj o nierelacyjnych bazach danych,może to Ci przypasi.

Trochę źle zadałem pytanie. Myślę o rozwiązaniu, gdzie nie wprowadzam do jednej bazy danych wielu ogromnych tabel, tylko tworzę kilka baz postgresql, zeby zwiększyc ich wydajność.
Jestem raczej programistą cpp, a z php mam do czynienia od 3/4 dni może (tak jest prosty i fajnie ;-) ), ale ciężko mi podjąć decyzję co do rzeczy, gdzie nie mam kalifikacji, raczej kieruje się informacjami, które znajdę w necie.
Informacji na temat rozbicia jednej bazy danych na kilka oddzielnych w celu zwiększenia wydajności nie znalazłem na google, dlatego pytanie wrzuciłem tutaj.

Edit:
Tutaj przykładowo tworzę bazę danych produktów, firm, użytkowników.
teraz dynamicznie dla nowego użytkownika tworze tabele, gdzie umieszczone bądą w niej id produktów które zakupił - ten system automatycznego generowania nowych tabel chciałbym przenieść do oddzielnej bazy danych, żeby nie przeciążać głównej. podobnie z wystawianymi produktami, czyli docelowo 1 bazę chciałbym podzielić na min.3.
Jak to ma się do wydajności, czy ma sens?
mortus
Nijak ma się to do wydajności, wydajność będzie raczej mniejsza (najprostszy przykład to wydobycie wszystkich użytkowników i wszystkich produktów, które każdy użytkownik zakupił - trochę czasu i zasobów to zajmie). Takie rozproszone bazy danych stosuje się wtedy, gdy identyczne dane są potrzebne dla kilku różnych serwisów, np. masz dwa serwisy o różnej tematyce, w których każdy potrzebuje informacji o położeniu geograficznym określonych miast świata, wtedy dane dla obu serwisów pobierasz z jednej bazy danych. Architektura systemu oparta na rozproszonych bazach danych musi być bardzo dobrze przemyślana i raczej nikt nie buduje rozproszonej bazy danych dla jednego systemu, którego obsługa wbrew pozorom może być bardzo wydajna przy jednej dobrze zaprojektowanej bazie danych.

EDIT:
Oczywiście tworzy się aplikacje korzystające z wielu baz danych, ale przeważnie lub prawie zawsze wszystkie bazy danych nie mają ze sobą nic wspólnego, a zbudowanie odpowiednich relacji pomiędzy danymi to właśnie zadanie dla Ciebie.

W opisanym przez Ciebie przypadku jak najbardziej wystarczy jedna dobrze zaprojektowana baza danych.
Niktoś
Nie wydaje mi się, aby wyciąganie pewnych określonych danych jednocześnie z kilku baz danych było akurat optymalne.Nie wiem jak by wyglądały relacje pomiędzy dwoma tabelami różnych baz danych,ciężko powiedzieć.Dwie różne bazy ,raczej używałbym do dwóch całkowicie różnych od siebie elementów biznesowych aplikacji.
Jeśli zaś chcesz przetrzymywać jakieś dane tymczasowe/temporalne a zarazem odciążyć bazę danych,to idealnie nadają się nierelacyjne bazy danych.
Xenom
Cytat(Niktoś @ 17.04.2012, 12:24:27 ) *
Nie wydaje mi się, aby wyciąganie pewnych określonych danych jednocześnie z kilku baz danych było akurat optymalne.Nie wiem jak by wyglądały relacje pomiędzy dwoma tabelami różnych baz danych,ciężko powiedzieć.Dwie różne bazy ,raczej używałbym do dwóch całkowicie różnych od siebie elementów biznesowych aplikacji.
Jeśli zaś chcesz przetrzymywać jakieś dane tymczasowe/temporalne a zarazem odciążyć bazę danych,to idealnie nadają się nierelacyjne bazy danych.

Dzięki Panowie, to mi już coś mówi.
Co do tabel to tabele użytkowników i zarejestrowanych firm będą statyczne, czyli wprowadzanie danych i potem ich wyciąganie, bądź zmiana wartości dla jednej komórki (coś w tę deseń).
Tabele wystawianych produktów i zakupionych będą dynamiczne, czyli np. produkt po tygodniu może być usunięty.
W tym przypadku dałem postgresql, bo 1) jest darmowy 2)będzie wydajniejszy niż mysql(chyba że w necie są przestarzałe informacje).

Jeśli postrgresql tu się zbytnio nie nadaje, tylko nierelacyjne bazy danych, to jakie konkretnie z darmowych możecie polecić.
Szkoda, że najpierw się nie zapytałem tylko od razu rozpędziłem z kodzeniem, ale i tak lepiej będzie dokonać zmian na tym etapie niż potem żałować tongue.gif
Niktoś
Cytat
Jeśli postrgresql tu się zbytnio nie nadaje, tylko nierelacyjne bazy danych, to jakie konkretnie z darmowych możecie polecić.

Nie wiem jaki system OS Masz ,jak linux to REDS-no ale w kwestii przetrzymywania danych(zakupionych produktów przez 7 dni),byłbym ostrożny.Wszakże nierelacyjna baza danych jest znacznie szybsza od relacyjnej ze względu na bezpośredni dostęp do pamięci operacyjnej ,to jest nieodporna na reset komputera/stacji roboczej-jeśli te dane są mało ważne to,można sobie śmiało pozwolić,jeśli kluczowe absolutnie nie.
Na windows ja używam SqlSpace.
Xenom
Tak, dane będą bardzo ważne, a hosting zewnętrzny. Jestem trochę zmieszany, bo ciężko mi sobie wyobrazić jednak rozwiązanie jednej bazy danych, gdzie dla każdego nowego użytkownika będzie tworzona nowa tabela z rekordami jego zakupów. np 20 tys użytkowników i 20 tys.tabel to trochę masakrycznie brzmi. Poszukam w necie innych rozwiązań kodowych, jak nic nie znajde na forum. W każdym razie dzięki za pomoc ;-)
redeemer
Nie potrzebujesz tworzyć osobnych tabel dla każdego z użytkowników - wystarczy jedna tabela z rekordami wszystkich.
Xenom
Cytat(redeemer @ 17.04.2012, 13:49:20 ) *
Nie potrzebujesz tworzyć osobnych tabel dla każdego z użytkowników - wystarczy jedna tabela z rekordami wszystkich.

To tak, ale teraz jeśli użytkownik który już jest w rekordzie tabeli, ma jeszcze mieć listę zakupionych produktów, to nie zrobię rekordu listy zakupionych produktów, czy jest na to typ danych tabelarycznych np int[]?
Do tego musiałaby być to tablica wielowymiarowa z datą zakupienia.
redeemer
Źle do tego podchodzisz. Poczytaj o relacjach w bazach danych. W twoim przykładzie (lista zakupionych produktów) oprócz tabeli użytkownikow i produktów możesz stworzyć jeszcze jedną tabele, która będzie służyła do "wiązania" rekordów z wcześniej wymienionych tabel. Struktura takiej tabeli może być bardzo prosta - wystarczą dwie kolumny odpowiadające odpowiednio id użytkownika i id produktu, chociaż warto by ją rozszerzyć chociażby o datę.
Xenom
Cytat(redeemer @ 17.04.2012, 14:27:50 ) *
Źle do tego podchodzisz. Poczytaj o relacjach w bazach danych.

Kurcze, dzięki nawet nie zwróciłem większej uwagi to, że słowo relacyjne odnosi się do tego, że można faktyczne relacje tworzyć w bazie danych. Świetna sprawa, dzięki i biorę się za czytanie jak to zrobić.

Edit:
Jeszcze raz dzięki, jak widać nie trzeba tworzyć x tysięcy tabel, wystarczyło stworzyć jedną dodatkową, która spaja wszystko co potrzebne, czyli cała aplikacja będzie mi chodziła tylko na 4 tabelach.
Muszę poczytać jeszcze o kluczach i indexach, żeby właściwie zoptymalizować pracę bazy danych.
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.