Piotr Ziemian

Starszy Projektant, Zatrudnienie w jednej firmie [1997-obecnie Asseco Poland S.A.]

Wypowiedzi

  • Piotr Ziemian
    Wpis na grupie Bazy Danych w temacie PostgreSQL - automatyzacja tabeli
    17.11.2008, 19:40

    Krzysztof P.:
    Piotr Ziemian:
    Nad wydajnością rozwiązania pomyślałbym dopiero jak powyższe okazałoby się wąskim gardłem.

    Bardzo szybko zacząłbyś o tym myśleć, bo wydajność będzie spadać niemal wykładniczo :)
    Dlaczego wykładniczo ? Według mnie obciążenie będzie stałe. Wystarczy zauważyć, że zapytanie zwracające ostatni zapis dla cudaka praktycznie wyciąga dane z indeksu, który pilnuje spójności tablicy. Używałem kilku motorów bazy danych (INFORMIX, ORACLE, SQLServer), i w takich przypadkach motor bardzo sprawnie wybiera dane. Niestety nie potrafię powiedzieć jak powyższe zachowuje się w POSTGRESQL, bo nie znam tego silnika. Po za tym nie wiemy jaką wydajność docelową ma przyjąć rozwiązanie. Jeśli powyższych INSERT'ów jest niewiele, to rozwiązanie które wskazałem może być wystarczające dla pytającego.

  • Piotr Ziemian
    Wpis na grupie Bazy Danych w temacie PostgreSQL - automatyzacja tabeli
    16.11.2008, 16:59

    Ja zrobiłbym to tak (to nie jest język programowania, tylko zarys rozwiązania):
    a) na początek dodałbym indeks co by baza się "pilnowała":
    CREATE UNIQUE INDEX i00server_commands ON server_commands(idcudaka,idpolecenia)

    b) w procedurze wykonałbym sekwencję poleceń (najlepiej w transakcji)
    1. SELECT MAX(idpolecenia) INTO <IDPOLECENIA> FROM server_commands WHERE idcudaka = <IDCUDAKA>
    2. <IDPOLECENIA> += 1
    3. INSERT INTO server_commands (idpolecenia,idcudaka) VALUES (<IDPOLECENIA>, <IDCUDAKA>)
    Jeśli powyższe wykonałoby się z błędem (szczególnie INSERT), to prawdopodobnie trzeba powtórzyć procedurę, bo ktoś inny (w procesie równoległym) "zajął" nam pracowicie określony numer idpolecenia.

    c) jeśli postgress ma możliwość tworzenia procedur/funkcji, to może zadziała coś takiego:
    INSERT INTO server_commands (idpolecenia,idcudaka) VALUES (getNextIdCudaka(<IDCUDAKA>), <IDCUDAKA>)
    gdzie, getNextIdCudaka(a_idcudaka) jest procedurą/funkcją SPL realizującą pierwsze dwa punkty.

    Nad wydajnością rozwiązania pomyślałbym dopiero jak powyższe okazałoby się wąskim gardłem.

    Pozdrawiam,
    Piotr

  • Piotr Ziemian
    Wpis na grupie Bazy Danych w temacie Archaiczne pliki DBF do bazy SQL SERVER 2005 Express
    23.09.2008, 21:24

    Dariusz Szyc:
    szczerze to myślałem o jakimś darmowym rozwiązaniu :)
    komercyjnych wiele znalazłem, ale że ta migracja ma być jednorazowa na cały lifetime to uważam, że w jakiś sposób da się uniknąć kosztów.
    To może da się znaleźć coś w stylu TRIAL i tę akcje jednorazową wykonać...

Dołącz do GoldenLine

Oferty pracy

Sprawdź aktualne oferty pracy

Aplikuj w łatwy sposób

Aplikuj jednym kliknięciem

Wyślij zaproszenie do