Featured Post

[EN] International Workers’ Day in Poland, Europe

Today we are celebrating International Workers’ Day. In Poland we are celebrating also 10th anniversary of the joining Poland into the European Union in 2004. Polish presence in the European Union There are many concerts related to our presence in the EU, paid – of course from the money Poland...

Read More

[PL] Problem tysiąca i jednej kontrolki

Posted by evolic | Posted in Databases, Programming, Web development | Posted on 28-07-2014

Tags: , , , , , , , , , , , , , , , , , , , , , ,

0

Liczba tysiąc była przez wieki dla wielu osób liczbą magiczną. Łacina oznaczała ją literą M (łac. Millenium).

W roku 2000 wszyscy mieliśmy okazję doświadczyć tzw. pluskwy milenijnej lub problemu roku 2000, związanego z datowaniem. Otóż do roku 2000 w wielu systemach posługiwano się dwucyfrowym formatem określania daty np. rok 1992 zapisywano liczbą 92. Rok 2000 byłby w tym systemie zapisany jako 00, a obecny 2014 jako 14. Ale co w przypadku systemów obsługujących ludność? Ktoś mógł urodzić się zarówno w roku 1901 jak i 2001. W związku tym na masową skalę rozpoczął się proces aktualizacji oprogramowania na całym świecie.

Uważny Czytelnik zapytałby o związek liczby 2000 z obecnymi czasami, wszakże mamy rok 2014?

Otóż w tym wpisie chciałbym opisać dwa przypadki, jak najbardziej aktualne, a związane z liczbą 1000, będącą pewnym ograniczeniem, którego przekroczenie – osiągnięcie liczby 1001 lub większej… spowoduje błąd działania aplikacji internetowej.

Limit elementów wysyłanych w formularzach

W języku PHP istnieje ograniczenie na 1000 elementów formularza wysłanych do serwera. Jeśli na stronie mamy np. 2 pola typu text, 1050 checkbox’ów oraz 3 kolejne pola typu text, z których 2 przechowują datę – w przypadku zaznaczenie wszystkich checkbox’ów oraz wypełnienia pozostałych pól – tylko 1000 pierwszych elementów formularza odczyta skrypt przetwarzający przesłany formularz. A więc w przedstawionym przykładzie przesłane zostaną 2 pierwsze pola oraz 998 kolejnych checkbox’ów, kolejne 52 checkbox’y zostaną odznaczone, a 3 ostatnie pola zostaną wyczyszczone.

Rozwiązaniem tej sytuacji jest zwiększenie limitu

  • albo w pliku php.ini

  • albo w pliku .htaccess

Zmiana tego parametru może okazać się niewystarczająca w niektórych przypadkach, ze względu na ograniczenie wielkości przesyłanych danych, regulowane parametrem post_max_size.

Opcja ta domyślnie przyjmuje wartość 2MB i w niektórych przypadkach może okazać się niewystarczająca.

Podobnie jak w przypadku max_input_size wartość parametru możemy zmienić:

  • albo w pliku php.ini,
  • albo w pliku .htaccess

Ograniczenie bazy danych Oracle (ang. świątynia)

W minionym tygodniu miałem okazję natrafić również na drugi błąd związany z liczbą 1001, a był on związany z bazą danych Oracle.

Otóż okazuje się, że baza ta posiada ograniczenie na liczbę elementów w zapytaniu SQL, a dokładniej mówiąc w operatorze IN.

Na przykład:

Do momentu, gdy ilość elementów w IN jest mniejsza, bądź równa liczbie 1000 wszystko jest OK, ale po przekroczeniu tej liczby Oracle zwróci nam wyjątek.

Obejść problem możemy dzieląc np. 2050 elementów na trzy części:

  • dwie po 1000 elementów
  • oraz trzecią zawierającą 50 elementów.

Zapytanie SQL wyglądało by w tym przypadku następująco:

Drugim rozwiązaniem jest zmiana bazy Oracle na rzecz PostgreSQL, który pod wieloma względami nie ustępuje komercyjnemu konkurentowi i nie jest podatny (podobnie jak baza MySQL – obecnie będąca własnością firmy Oracle) na wspomnianą przypadłość.

Jednak migracja do open source’owego konkurenta wiąże się z wieloma zmianami technicznymi, choć zasadniczym jej plusem będzie redukcja kosztów, gdyż w przypadku bazy Oracle musimy ponosić dodatkowe koszty rozbudowując infrastrukturę firmy o nowe serwery, co dla niektórych firm może okazać się bardzo kosztowne.

Przydatne linki:

Write a comment