2009-02-21 9 views
5

Dzięki za przeczytanie tego.Dla zbioru danych SAS, jaki jest najlepszy sposób, aby zapobiec blokowaniu dla wielu użytkowników dostępu

Używam usługi udostępnionej (server = sharedLib) podczas konfigurowania mojego libref, aby umożliwić użytkownikom mojej aplikacji SAS/IntrNet modyfikowanie i aktualizowanie (dodawanie nowych) rekordów pojedynczego zestawu danych. Aplikacja zostanie również wykorzystana do wysłania zapytania do mojego zbioru danych. Aby zminimalizować blokowanie, używam tylko kroku danych do modyfikacji i aktualizacji zamiast Proc SQL (który blokuje cały element). Zastanawiam się jednak, czy blokowanie jest bardziej lub mniej prawdopodobne, jeśli tylko aktualizacja/modyfikacja dostępu do danych używa usługi udostępniania, ale zapytania nie.

%if &type=QUERY %then %do ; 
LIBNAME lib '/myServer/library' ; 
%end ; 
%else %do ; 
LIBNAME lib '/myServer/library' server=shareLib ; 
%end; 

to nie jest mój rzeczywisty kod, ale nie wiem, czy wniosek będzie tylko wysłać dane z powrotem lub modyfikacji istniejącego rekordu lub dodać nowy rekord (update);

Pierwotnie dokonałem tego rozróżnienia, ponieważ mieliśmy pewne niepowodzenia związane z usługą udostępniania (nie mamy pewności, czy jest to właściwa terminologia), ale odwołanie się do biblioteki w celu wysłania zapytania do danych nie zakończyło się niepowodzeniem. Od tego czasu myślę, że rozwiązałem ten problem, ale zastanawiam się, czy nie mam problemów.

Dzięki

Odpowiedz

7

Ponieważ pytanie jest bardziej podobny wniosek o ogólne informacje na temat dostępu do danych i współbieżności w SAS, moja odpowiedź zostanie utworzony jako ogólnych porad, więcej niż konkretnego rozwiązania.

Dostępne są doskonałe dokumentacje SAS online. Odwiedź stronę the index i znajdź informacje istotne dla dalszego czytania.

  1. Proszę zapoznać się z opcją "libname" pod nazwą "ACCESS=READONLY". Zasadniczo robi to, co mówi, a mianowicie ogranicza dostęp do elementów danych w bibliotece nazwa-do-odczytu tylko do odczytu. Ma to tę zaletę, że nie zmieniasz danych przez przypadek podczas niezmodyfikowanego zapytania. Umożliwia to także SASowi pozostawienie trochę miejsca na zapytania zmieniające dane, aby uzyskać wyższy poziom kontroli nad danymi.
  2. SAS/SHARE umożliwia równoczesny dostęp do danych, więc jeśli potrzebujesz zapewnić równoczesny dostęp (odczyt/zapis) do tych samych danych, SAS/SHARE to dobry wybór. Oznacza to, że możesz sobie pozwolić na jednoznaczne przypisywanie swojej nazwy do biblioteki, nadając swojej nazwie libname opcję "SERVER=SHARELIB", a SAS/SHARE zarządza równoczesnym dostępem do danych. Jeśli przypiszesz libname do procesu serwera SAS/SHARE, wszystkie kolejne procesy SAS wymagające dostępu do tej nazwy będą musiały jedynie przypisać nazwę libname taką jak "LIBNAME LIB SERVER=SHARELIB" (zauważ, że nie ma fizycznej ścieżki - zajmuje się tym proces serwera SAS/SHARE). Ta konfiguracja działa najlepiej, jeśli masz oddzielny proces SAS dla twojego serwera SAS/SHARE.
  3. Możesz również zablokować swoją nazwę pliku za pomocą instrukcji LOCK lub LOCK. Oznacza to, że twój program SAS może zapewnić sobie wyłączne prawa dostępu do nazwy libname, na wypadek, gdyby tego potrzebował. Inne procesy SAS mogą następnie użyć polecenia lock, aby wysłać zapytanie do konkretnej nazwy pliku i sprawdzić, czy może uzyskać (wyłączny) dostęp.
  4. Możesz także kontrolować dostęp na poziomie elementu danych. Odbywa się to za pomocą opcji zestawu danych CNTLLEV. Na przykład "DATA LIB.MYDATA(CNTLLEV=LIB);" określa, że ​​kontrola dostępu jest na poziomie biblioteki, ograniczając równoczesny dostęp tylko do jednego procesu aktualizacji do biblioteki. CNTLLEV=MEM i CNTLLEV=REC ogranicza dostęp równoczesny na poziomie członków i odpowiednio do poziomu rekordu.

Te opcje można łączyć na wiele różnych sposobów, dając dużo miejsca na dostęp tak drobiazgowy, jak potrzebujesz. Mam nadzieję, że te wybory ułatwią ci wykonanie zadania.

+0

Dzięki za odpowiedź –

Powiązane problemy