Visual FoxPro FAQ  
   
 
 
[Strona główna]  [Artykuły]
 
Skąd się wzięło ograniczenie wielkości tabeli do 2GB

Autor: X


Ok, będzie może trochę długie, ale postaram się wyjaśnić skąd się bierze górna granica wielkosci dbf-a.

Otóż, w czasach DOSa 3.3 ktoś popełnił błąd, którego następstwa mamy do dziś. Mianowicie funkcja systemowa, która blokowała określony obszar pliku nie protestowała, gdy jako parametr dostała adresy nie mieszczące się w pliku !
Mało tego, jeśli się wywołało funkcję sprawdzającą, czy ten fikcyjny adres jest zablokowany to zwracała ona wartość zgodną z "prawdą" - czyli jeśli ktoś zablokował "lipę", to sprawdzenie czy "lipa" jest zablokowana rzeczywiscie wykazało, że blokada jest.

Natychmiast podchwycili to producenci baz danych.

Zakładając, że plik nie jest większy niż 1GB, założyli, za zablokowanie adresu od 1GB+1 do 1GB+dlugosc_rekordu - po prostu na niby zablokuje pierwszy rekord (upraszczam nieco). Jeżeli inny user-proces chce pisać do tego rekordu, sprawdza istnienie blokady - jak jest to nie pisze. Jak nie ma to blokuje. Co przez to zyskujemy ? Blokujac rzeczywisty rekord nie pozwalamy innym go czytać. A tak czytać każdy może. Każdy program operujący na danych miał (ma) taka górną wartość. Niestety różne miały różną i współpraca w sieci różnych aplikacji z tymi samymi danymi może przynieść dziwne efekty. Później, ze wzgledu kompatybilności "błąd" ten musiano "wdrażać" w kolejnych systemach i produktach. Kto nie wierzy niech sprawdzi: w sieci Novell otworzyć plik np. foksem, zablokować rekord a na konsoli serwera podejrzeć jaki jest obszar blokowany w tym pliku. W foksie 2.6 było tak, że plik otwarty w trybie exclusive mógł mieć długość 2GB a w trybie shared 1GB :)

 
[Strona główna]  [Artykuły]