ďťż
 
[pgsql] Funkcja w C =?ISO-8859-2?Q?pami=EAtaj=B1ca_stan?= ďťż
 
[pgsql] Funkcja w C =?ISO-8859-2?Q?pami=EAtaj=B1ca_stan?=
Zobacz wiadomości
 
Cytat
A gdyby tak się wedrzeć na umysłów górę, / Gdyby stanąć na ludzkich myśli piramidzie, / I przebić czołem przesądów chmurę, / I być najwyższą myślą wcieloną. . . Juliusz Słowacki, Kordian
Indeks BCB i MySQL subiekt gt fototapeta
 
  Witamy

[pgsql] Funkcja w C =?ISO-8859-2?Q?pami=EAtaj=B1ca_stan?=



ethanak - 03-07-2006 00:02
[pgsql] Funkcja w C =?ISO-8859-2?Q?pami=EAtaj=B1ca_stan?=
  Witam.

Wiem że takie rzeczy są najczęstszym źródłem błędów, ale próbuję
wyobrazić sobie pewne usprawnienie jednego z moich malutkich projekcików.

Od razu mówię że jestem na etapie projektu wstępnego, do kodu mam
jeszcze parę kilometrów :)

Mam sobie aplikację (Linux), która wykonuje zapytanie w stylu:

select word, cnt from wrdstat where (kilka ograniczeń) order by cnt desc;

Zapytanie zwraca średnio kilkanaście tysięcy słów, z których aplikacja
wybiera jedno (które jej się najbardziej podoba).

Naturalnym by było stworzenie jakiejś funkcji w C i wykonanie czegośw
stylu:

select word, cnt,funkcja(word,p1,p2) as a from wrdstat where (te same
ograniczenia) and a < ileśtam oder by cnt desc;

(albo czegoś podobnego, w każdym razie chodzi o znalezienie
listy słów dla których wartość zwracana przez funkcję będzie się
zawierać w określonym przedziale).

Wiadomo że ta funkcja (analogiczna do funkcji z aplikacji) będzie
również wykonana ileśtam tysięcy razy, natomiast oszczędzę (mam
nadzieję) nieco czasu zmarnowanego na przesłanie wyniku z serwwera
Postgresa do serwera aplikacji, a także nieco pamięci na serwerze
aplikacji, jako że tych wyników będzie kilkadziesiąt (z obserwacji na
doświadczalnej bazie danych warunek maksymalnej odległości edycyjnej
spełnia jedno na kilkaset słów).

Jaki jest problem?

Otóż funkcja musi:

a) na podstawie trzeciego parametru wczytać sobie (z pliku lub jakiejś
tabeli, to akurat nieistotne) zasady transformacji tekstu. Wczytanie nie
jest specjalnie szybkie, a trzeci parametr nie ma prawa zmienić się w
czasie jednej sesji (tzn. w każdym następnym wywołaniu funkcji powinien
zostać zignorowany lub - w zależności od moich przyszłych upodobań -
zmiana tego parametru powinna spowodować błąd).

b) według tych zasad przekształcić pierwszy i drugi parametr.
O ile przekształcenie pierwszego parametru musi być wykonane za każdym
razem, o tyle przekształcenie drugiego powinno być wykonane tylko wtedy,
gdy parametr został zmieniony (tzn. gdy wywołuję zapytanie dla następnej
wartości p1).

c) zwrócić średnią odległości edycyjnej przekształconych i
nieprzekształconych parametrów word,p1

I teraz pytanie zasadnicze (bo w żadnym manualu tego nie znalazłem, ana
razie jak wspomniałem jestem na etapie teorii):

Czy mogę w jakiś bezpieczny sposób zachować w funkcji informacjęo
poprzednim wywołaniu, czy mam to sobie darować i jednak zwalić wszystko
na aplikację?

ethanak
PS. Że też człowiek nie ma co robić w niedzielę rano...
--
mailto=window.atob('ZXRoYW5ha0Bwb2xpcC5jb20=');





Bartek Siebab - 03-07-2006 00:03

  > ethanak w dniu 2006-07-02 11:13 pisze:
-<>-
> I teraz pytanie zasadnicze (bo w żadnym manualu tego nie znalazłem, a na
> razie jak wspomniałem jestem na etapie teorii):
>
> Czy mogę w jakiś bezpieczny sposób zachować w funkcji informację o
> poprzednim wywołaniu, czy mam to sobie darować i jednak zwalić wszystko
> na aplikację?

przecież możesz założyć sobie tabelę parametry i w niej ta funkcja może
select'nąć/update'nąć sobie rekord zawierający parametry wywołania

--
..---------- -------- ------ ---- ---- --- - -- -
| Bartek `saphire` Siebab http://bartek.siebab.net




ethanak - 03-07-2006 00:03

  On 2006-07-02 15:32, Bartek Siebab wrote:
>> ethanak w dniu 2006-07-02 11:13 pisze:
> -<>-
>> I teraz pytanie zasadnicze (bo w żadnym manualu tego nie znalazłem, a na
>> razie jak wspomniałem jestem na etapie teorii):
>>
>> Czy mogę w jakiś bezpieczny sposób zachować w funkcji informację o
>> poprzednim wywołaniu, czy mam to sobie darować i jednak zwalić wszystko
>> na aplikację?
>
> przecież możesz założyć sobie tabelę parametry i w niej ta funkcja może
> select'nąć/update'nąć sobie rekord zawierający parametry wywołania
>
No wiem że mogę - chodzi mi o zupełnie co innego (ja nie chcę czytać z
jakiejkolwiek tabeli fafnaście tysięcy razy za jednym requestem!).

Poza tym mogą być różne sesje, w każdej sesji inny parametr. Gdyby nie
to - po prostu wkompilowałbym zasady transformacji tekstu w funkcję.

Przy okazji - zauważ słowo: tysięcy.

Szczerze mówiąc chodzi mi o informację od kogoś kto to stosował- czy
zastosowanie w tej sytuacji zmiennych statycznych jest bezpieczne.

ethanak
--
mailto=window.atob('ZXRoYW5ha0Bwb2xpcC5jb20=');




Adam Buraczewski - 03-07-2006 00:03

  ethanak <sweethanak@buziaczek.pl> wrote:
> Szczerze mówiąc chodzi mi o informację od kogoś kto to stosował - czy
> zastosowanie w tej sytuacji zmiennych statycznych jest bezpieczne.

Raczej tak, dopóki nie stosujesz connection pooling. Postgres odpala
osobny proces dla każdego połączenia i go kończy (zwalniając pamięć)
jak sesja bazodanowa się kończy. Ewentualnie, bardziej elegancko,
byłoby skorzystać z Memory Contexts -- pamięć zaalokowana w ramach
odpowieedniego kontekstu może być zwalniana np. po zakończeniu
bieżącej transakcji. Zobacz np. contrib/dblink, tam jest tak że
pierwsze wywołanie funkcji zapamiętuje coś w pamięci, a potem kolejne
wykorzytstują to.

Pozdrawiam!

--
Adam Buraczewski <adamb (at) nor (dot) pl> * Linux user #165585
GCS/TW d- s-:+>+:- a C+++(++++) UL++++$ P++ L++++ E++ W+ N++ o? K w--
O M- V- PS+ !PE Y PGP+ t+ 5 X+ R tv- b+ DI D G++ e+++>++++ h r+>++ y?
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • effulla.pev.pl
  • comp
    Wydajność baz danych w zależności od poziomu izolacji ANSI/ISO Czy zna (obsługuje) ktoś program Iso Draw ? MYSQL - kodowanie w ISO-PL strona plus baza w iso do utf-8 Kodowanie: z iso na utf Konwesja znaków w dump'ie bazy danych - ISO -> utf-8 -> ISO -> utf-8 =?iso-8859-2?q?Co_oznacza_b=B3=B1d_Warning:_mysql=5Fconnect() _[function.mysql-connect]:_Can't_connect_to_local_MySQL_server_through_sock et_'/var/run/mysqld/mysqld.sock'_(2)_in?= =?iso-8859-2?q?Informatyka,_Java,_EJB,_Ajax,_Spring=2E_Czy=BF by_to_koniec_=B6wiata,_czy_te=BF_nasze_uczelnie_b= EAd=B1_uczy=B3y_w_ko=F1cu!_czego_praktycznego_=2E= 2E=2E=2E?= =?iso-8859-2?q?Ati_Mobility_Radeon_X300_W_Notebooku_Jak_Zwi=E Akszy=E6_Ilo=B6=E6_Grafiki_Poprzez_Wsp=F3=B3dziele nie_Z_Ramu=3F=3F=3F?= =?ISO-8859-2?Q?=AFegnam_si=EA=2E=2E=2E?=
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • autwywalczyl.opx.pl
  • Cytat

    Decede mihi sole - nie zasłaniaj mi słonca.
    Gdy kogoś kochasz, jesteś jak stworzyciel świata - na cokolwiek spojrzysz, nabiera to kształtu, wypełnia się barwą, światłem. Powietrze przytula się do ciebie, choćby był mróz, a ty masz w sobie tyle radości, że musisz ją rozdawać wokoło, bo się w tobie nie mieści
    Hoc fac - tak czyń.
    A tergo - od tyłu; z tyłu.
    I czarne włosy posiwieją. Safona

    Valid HTML 4.01 Transitional

    Free website template provided by freeweblooks.com