Pliki konfiguracyjne tabeli bazy 

Wprowadzenie

W programie utworzenie tabeli odbywa się za pomocą narzędzia o nazwie valfil. To narzędzie jest wywoływane bezpośrednio przez środowisko programowania zintegrowane z ADONIX w różnych przypadkach: tworzenie tabeli z poziomu edytora tabel, modyfikacja tabeli z poziomu tej samej funkcji, wyodrębniane lub integracja danych, integracja poprawki prowadząca do zmiany struktury tabeli bazy.

W bazie tabela jest definiowana przez fizyczne pliki znajdujące się w katalogu FIL folderu i przez tabelę bazy danych. Fizyczne pliki to:

  • plik XXX.srf, zawierający opis struktury pliku (w formacie „ASCII” opisanym poniżej),
  • plik XXX.fde, zawierający opis struktury pliku (w formie skompilowanej, używanej bezpośrednio przez silnik adonix).

Jeśli tabela nie jest przechowywana w bazie, ale jest ładowana w formie możliwego do przeniesienia pliku, to jej dane znajdują się również w formie dwóch lub trzech dodatkowych plików:

  • plik XXX.dat, zawierający dane w formie pliku składającego się z rekordów o stałej długości,
  • plik XXX.seq, zawierający następny numer sekwencji powiązany z tabelą. Ta informacja ma znaczenie w sytuacji, gdy każda tabela jest powiązana z numerem sekwencji, co umożliwia utworzenie unikalnych numerów (odpowiada to funkcji adonix uniqid([skrót]), gdzie skrót to skrót odpowiadającej tabeli),
  • plik XXX.blb, zawierający długie dane (blob i clob), jeśli istnieją w tabeli.

Informacje zawarte w tych różnych plikach umożliwiają utworzenie tabeli z następującymi, „minimalnymi” opcjami:

  • Wymiarowanie tabeli (przewidywany rozmiar, w tym przypadku – dla Oracle – w formie początkowego segmentu i rozmiar ekstentów) jest definiowany w pliku o rozszerzeniu *.srf (obliczenia odbywają się na podstawie przewidywanej liczby wierszy tabeli, zdefiniowanej przez zmienne i formuły wymiarowania).
  • Wymiarowanie indeksów jest definiowane proporcjonalnie na podstawie rozmiaru tabeli (rozmiar początkowego segmentu jest mnożony przez stosunek między długością klucza, a długością wiersza tabeli. Następnie nakładany jest kolejny extent o tej samej długości, co początkowy).
  • Grupy plików (na SQL Serverze) są definiowane w pliku *.adxodbc, jeśli istnieje. Jeśli plik nie istnieje używane są grupy plików FOLDER_DAT i FOLDER_IDX, jeśli istnieją, gdzie FOLDER to nazwa folderu. Jeśli brak, używana jest domyślna grupa zdefiniowana dla bazy.
  • Przestrzenie tabel przechowywania (dla Oracle) to te zdefiniowane w pliku *.adxora, jeśli istnieje. Jeśli plik nie istnieje używana jest przestrzeń tabel powiązana domyślnie z użytkownikiem FOLDER dla danych oraz przestrzeń tabel FOLDER_IDX dla indeksów.

Interesujące może być zdefiniowanie dodatkowych informacji używanych podczas tworzenia tabeli oraz każdej jej aktualizacji, w celu zmodyfikowania tych reguł wymiarowania lub lokalizacji, uwzględniając cechy różnych baz danych oraz otrzymanie w ten sposób najlepszej wydajności. Jednakże oznacza to przechowywanie tych elementów poza bazą tak, aby narzędzie valfil mogło je zastosować za każdym razem, gdy dochodzi do zatwierdzenia lub ponownego zatwierdzenia tabeli. Z tego powodu można utworzyć plik o rozszerzeniu *.cfg w katalogu FIL. Ten plik umożliwia zapisanie wszystkich opcjonalnych poleceń, które uzupełnią polecenie SQL Create table lub Create index, które zostanie wykonane przez valfil. Tak, jak pliki o rozszerzeniu *.srf, jest on w formacie „ASCII” (opisanym poniżej).

Zawartość tego pliku konfiguracyjnego wyświetla się na dole karty definicji indeksów, w zarządzaniu tabelami. Dalsza część tego dokumentu opisuje syntaks zapisu pliku konfiguracyjnego.

Syntaks zapisu

Ten plik składa się z wierszy tekstowych stanowiących sekcje. Każda sekcja rozpoczyna się sekcją prefiksowaną znakiem $, a następnie znajduje się kod wskazujący, dla której bazy danych tworzona jest dana sekcja (a więc albo ORACLE, albo MSSQL), następnie podkreślnik i nazwa tabeli lub indeksu.

Dalej znajdują się klauzule zawarte między znakami {" (otwierający nawias klamrowy z cudzysłowem) i "} (zamykający nawias klamrowy poprzedzony cudzysłowem). Te klauzule są przekazywane takimi, jakie są do bazy danych podczas tworzenia lub modyfikacji tabeli bądź indeksu. Jeśli istnieje ich wiele, są one przekazywane jedna po drugiej, oddzielone przez koniec wiersza. Liczba znaków klauzuli ogranicza się do 256.

Następnie znajduje się w niej słowo kluczowe End, które kończy sekcję.

W pliku konfiguracyjnym można dodać komentarze w formie dowolnego tekstu poprzedzonego znakiem # (hash). Komentarz może się znajdować wyłącznie na początku wiersza.

Jeśli sekcja nie jest pusta (zawiera przynajmniej jedną klauzulę) to ignorowane są wszystkie opisane, domyślne reguły wymiarowania i przechowywania elementu (tabeli lub indeksu) na rzecz utworzonych klauzul.

Sekcja odpowiadająca nieistniejącemu elementowi lub dotycząca bazy danych, która nie jest bieżącą bazą danych jest ignorowana.

Przykłady składni Oracle

Klauzule przechowywania to np.

Nałożona przestrzeń tabel

{" Tablespace ts1 "}

Wymiarowanie ekstentów tabeli

{" Storage (Initial 100K Next 50K Maxextents 10 Pctincrease 20) "}

Podział tabeli na wiele przestrzeni tabel w zależności od wartości pola

{" partition by range (DHIDAT_0) (partition p1 values less than ('01-APR-1999') tablespace ts1, "}
{" partition p2 values less than ('01-APR-2001') tablespace ts2, "}
{" partition p3 values less than (maxvalue) tablespace ts4) "}

Przykłady syntaksu SQL Servera

Jedyna możliwa klauzula to:

Nałożony wolumen

{" On volume1 "}

Od wersji 6.4 można również zdefiniować wyłącznie pierwszy indeks (i tylko on) jest „klastrowany”, tzn. dane tabeli są fizycznie umiejscawiane w porządku tego klucza. Może to być przydatne w celu optymalizacji. Regułą jest więc dodanie kolejnej sekcji (XXXX to nazwa danego indeksu):

$CLUSTERED
{ "XXXX" }
End

Aby ta klauzula została uwzględniona konieczne jest ponowne, wymuszone zatwierdzenie tabeli po zmodyfikowaniu pliku konfiguracyjnego.

Uwaga: syntaks w celu zdefiniowania „klastrowanego” indeksu jest tymczasowy. W kolejnej wersji głównej definicja indeksów tego typu zostanie zdefiniowana w naturalny sposób w słowniku.

Przykładowy plik

Poniżej znajduje się przykładowy plik konfiguracyjny. Należy zauważyć, że używana jest tylko część poleceń (w zależności od użytej bazy, ponieważ wdrażane są tylko te, które są rzeczywiście używane w bazie danych).

Należy zauważyć, że standardowo dostarczone oprogramowanie nie zawiera żadnego pliku konfiguracyjnego, a aktualizacja przestrzega istniejących plików konfiguracyjnych. Pliki konfiguracyjne są uznawane za elementy wdrożenia i są koniecznie powiązane z daną instalacją, a nie z dowolnym standardem.

 

#--- Reguła dla Oracle: Plik faktur
$ORACLE_SINVOICE
#--- Nakłada się inną przestrzeń tabel
{" Tablespace DEMO_DAT2 "}
#--- Reguły wymiarowania obowiązkowe od momentu dowolnego założenia
{" Storage (Initial 100M  Next 50M Pctincrease 20) "}
End

#--- Reguła dla SQL Servera
$MSSQL_SINVOICE
{" On DEMO_DAT2 "}
End

#--- Pierwszy indeks dla Oracle (Brak reguły dla innych indeksów)
$ORACLE_SIH0
{" Tablespace DEMO_IDX2 "}
{" Storage (Initial 5M Next 2M Pctincrease 30) "}
End

Aneks: pliki ASCII używane z silnikiem ADONIX

Silnik ADONIX używa plików ASCII typu „Unix”, tzn. separator pozycji to Nowy wiersz (znak o kodzie 10), a nie Powrót karetki, Nowy wierszy (znak 13, a następnie 10), jak dla plików tekstowych Windows™. Konieczne jest więc nieedytowanie takich tekstów w notatniku (lub przynajmniej ich zapisywanie w notatniku), gdyż w innym razie mogą wystąpić trudności w ich ponownym użyciu przez silnik adonix. Natomiast w UNIX można użyć edytora vi. Edytor adonix zarządza plikami prawidłowo.

Należy zauważyć, że format używany przez te pliki to w rzeczywistości UTF8 (który jest formatem umożliwiającym przetwarzanie znaków UNICODE, np. chińskich, w całkowicie przejrzysty sposób). Jest to więc w rzeczywistości kodowanie od 1 do 4 bajtów dla pojedynczego znaku. Format UTF8 odpowiada ASCII dla wszystkich znaków nieakcentowanych, ale jeśli bit największego ciężaru to 1, znak jest kodowany jako więcej niż jeden bajt. Oznacza to, że francuskie znaki akcentowanie nie wyświetlają się prawidłowo w „klasycznych” edytorach (ale edytory adonix prawidłowo przetwarzają to transkodowanie).

Aneks: domyślne reguły wymiarowania tabel

W związku z brakiem pliku konfiguracyjnego algorytm wymiarowania używany do wymiarowania tabel Oracle jest następujący:

  • Określa się najpierw liczbę wierszy, które mają być przechowywane w tabeli. Ta liczba jest obliczana za pomocą formuł wymiarowania, a one same są obliczane na podstawie elementów wymiarowania. Ta liczba wierszy jest porównywana z liczbą wierszy podanych w kolumnie Liczba rekordów umiejscowionych na pierwszej karcie słownika tabel. Zachowywana jest większa liczba spośród tych dwóch.
  • Następnie obliczany jest rozmiar wiersza tabeli w liczbie bajtów. W tym celu uwzględnia się wewnętrzny typ powiązany z każdym typem danych pól tabeli. Pole typu etykieta przyjmuje 1 bajt, pole typu liczba całkowita – 2 bajty, pole typu długa liczba całkowita – 4 bajty, pole typu liczba dziesiętna – 8 bajtów. Pola typu alfanumerycznego i o maksymalnej długości L przyjmują L+1 bajtów pomnożonych przez mnożnik wynoszący 1, jeśli baza jest w ASCII lub, którego wartość to zmienna środowiskowa STUSIZE, jeśli baza jest w UNICODE (w razie braku wartości przyjmuje 2). Należy zauważyć, że rozmiar można otrzymać za pomocą funkcji Opcja / Informacje dostępnej w zarządzaniu tabelami.
  • W ten sam sposób oblicza się długość (w bajtach) każdego indeksu, używając tych samych reguł wymiarowania dla pól, które się na nie składają.
  • Oblicza się ogólny rozmiar tabeli mnożąc liczbę wierszy przez rozmiar wiersza i stosując współczynnik w celu uwzględnienia, że uzupełnienie nie jest nigdy maksymalne (ten współczynnik wynosi domyślnie 0,5).
  • W przypadku bazy danych Oracle definiuje się rozmiar początkowego segmentu używając rozmiaru tabeli, jeśli jest on mniejszy niż 10 MB. W przeciwnym razie ogranicza się początkowy segment do wartości podanej przez zmienną środowiskową ADXEXTSIZE (wyrażoną w kilobajtach). Ta wartość nie może w żadnym przypadku być większa niż 1,5 GB.