Wpis z mikrobloga

Mam tabelkę z danymi.
cashierid | cashiercompanyid | operationcode | eventticketid

Muszę wyciągnąć te dane z DB i stworzyć XML.
Struktura XML jest taka:


W jaki sposób wyciągnąć dane z bazy danych, aby później przy pomocy PHP mógłbym stworzyć taki XML? Teraz jeżeli zrobię zwykły SELECT (korzystam oczywiście z Active Record), to mogę wszystko zrobić "płaskie", a muszę zrobić zagnieżdżony XML.

#php #bazydanych #postgresql #mysql #yii #webdev
  • 25
@Jurigag: Pytałem jakiś czas temu czy lepiej zaprzęgnąć PostgreSQL do tworzenia XML, czy zrzucić to na PHP. Po dyskusji na wykopie doszedłem do wniosku, że w PHP będzie lepiej.

Tam jest cholernie dużo danych. Obawiam się, że korzystając z tego XML'a baza danych będzie padać, po 10 razy dziennie, ale klient nasz pan…
@edgar_k: no to zdolni są to gimnazjaliści, skoro przez 10 lat na tym wszystko trzyma się :)
Po prostu jutro mam ostatni dzień w tej pracy i nie chcę zostawić po sobie niezakończonych prac dla innych.
@edgar_k: Dlatego zmieniam pracę. Ostatnia zdolna osoba wyszła pół roku temu i teraz ja jestem najzdolniejszy. Nie chcę brnąć w to dalej, bo chcę poznać nowe narzędzia, trendy i uczyć się od lepszych, więc zmieniam pracę. O pół roku za późno, ale lepiej teraz niż wcale :)
Baza danych generuje XMLa znacznie szybciej niż jakikolwiek Twój kod, bo baza danych robi to kodem w C.


@Ginden: Obawiam się, że generacja XMLa (czyli de facto stringa) to może 10% procesu, reszta to wyciąganie danych i przechowywanie/transfer rezultatu
@edgar_k: Baza danych waży kilkadziesiąt GB. Co 15 min 500 użytkowników będzie zwracało się do systemu aby uzyskać najnowsze dane. Jeżeli dane będą wyciągane za krótki okres czasu - wszystko ok. Jeżeli wyciągną dane za maksymalny okres (czyli ostatnie 3 miesiące), to tylko jedna osoba może potrzebować kilkudziesięciu sekund, aby otrzymać dane, a co już mówić o kilkuset osobach…
Brakuje mi w pracy osoby, z którą mógłbym się poradzić, w jaki
Baza danych waży kilkadziesiąt GB


@mariecziek: czyli niewiele ( ͡° ͜ʖ ͡°)

Co 15 min 500 użytkowników będzie zwracało się do systemu aby uzyskać najnowsze dane.


@mariecziek: pytanie numer jeden - po co im te dane i co tak naprawde potrzebuja. Bo jeśli kazdy potrzebuje co 15 minute pelnego dumpa bazy w XMLu, to coś tu jest nie halo.
@edgar_k: Pełnego dumpa nie będzie. Po prostu w XML mają pojawić się wszystkie aktualne sprzedaże wg. firm, kas itd. Oprócz tego mają być wliczone w to opłaty itd. Na dev bazie danych mam niedużo danych do testowania, ale skrypt admina (pobranie wszystkich danych za ostatnie 3 miesiące), działał mi coś ponad minutę. Jeżeli takie coś uruchomić na produkcyjnej bazie danych, to strona może umrzeć.
Po prostu w XML mają pojawić się wszystkie aktualne sprzedaże wg. firm, kas itd. Oprócz tego mają być wliczone w to opłaty itd. Na dev bazie danych mam niedużo danych do testowania, ale skrypt admina (pobranie wszystkich danych za ostatnie 3 miesiące), działał mi coś ponad minutę. Jeżeli takie coś uruchomić na produkcyjnej bazie danych, to strona może umrzeć.


@mariecziek: bo jeśli ma być to na bieżąco, to najprościej przyrostowo pushować.
@edgar_k: Strona padała po optymizacji bazy danych :D To robił doświadczony programista i na dev bazie danych było spoko. Udało się skrócić działanie zapytania do DB z 60ms do 30ms. Na produkcji też wszystko działało ok. Do czasu. Czas zapytania skoczył do 6 sekund. A zapytanie jest uruchamiane 50 razy na jednej stronie. 50 * 30ms, jest ok, ale 50 * 6s zabijało stronę.
Na całe szczęście rozwiązać dało się to
@mariecziek: ale co ma generowanie plików do działania strony? W normalnych systemach strona to strona, a inne operacji robi się w osobnym wątku i działają ile potrzebuja ( ͡° ͜ʖ ͡°)