18 VALUE SZ_HDROBJ
: W_NULLBLK -1 OLS -1 OLS 0 OLS 0 OLS ;
[Описание системных объектов]
ACT VAR DATWR
LONG VAR OIDV
LONG VAR VALINT
[**** ROOT ****]
SZ_HDROBJ HSIZE+ HSIZE+ 4+ VALUE SIZE_ROOT
:: : CLONE_ROOT '' DATWRROOT ! DATWR NEWOBJ1 ;
:: : CLONE_INT ! VALINT '' DATWRINT ! DATWR NEWOBJ1 ;
:: : CLONE_SET 4 CLONE_INT ;
:: : CLONE_SEQ 4 CLONE_INT ;
:: : CLONE_AGG 0C CLONE_INT ;
:: : CLONE_STR [A L] ! LENSTR ! ADRSTR '' DATWRSTR ! DATWR
LENSTR SIZE_ROOT + 4- ! SIZE_X NEWOBJ3 ;
:: : SET_BHR [OID_BHR OID] N_BHR E2 SET_X1 ;
:: : SET_KH [OID_KH OID] N_KH E2 SET_X1 ;
: SET_X1 [ADR OID] C2C2 N_TRSC E2 NEWJREC
C LOADOBJ FINDOID C BR- DD SET_X11 ;
: SET_X11 PrioQueNUM 2 Channels !NCHAN GOTO OLS ;
:: : SET_INT [int oid] C HIPRIO PUSH ! VALINT 4 '' OLSI POP NEWDREC ;
: OLSI VALINT OLS ;
:: : GET_INT [OID] TODATA ILS ;
:: : TODATA [OID] C LOADOBJ C HIPRIO FINDOID PrioQueNUM
3 Channels !NCHAN 0 GOTO ;
:: : SET_STR [A L OID] C HIPRIO
PUSH ! LENSTR ! ADRSTR LENSTR '' OLSS POP NEWDREC ;
: OLSS ADRSTR LENSTR DO DWS1 D ;
ACT VAR BYTE_STR
:: : PRINT_STR '' PRIS ! BYTE_STR ACCESS_STR ;
:: : COPY2BUF_STR '' C2BUF ! BYTE_STR ACCESS_STR ;
:: : ACCESS_STR [OID] TODATA LENVMEM 0 GOTO DO BYTE_STR ;
: PRIS IBS TOB ;
: C2BUF IBS ABUF !TB !1+ ABUF ;
: DD_ROOT
OIDV OLS 0 OLS 0 OLS 0 OLS SZ_HDROBJ HSIZE+ OLS [val]
SZ_HDROBJ OLS [his]
W_NULLBLK [W_NULLBLK] DATWR ;
LONG VAR SIZE_X
: DATWRROOT -1 OLS -1 OLS 0 OLS 4 OLS 0 OLS ;
: DATWRINT -1 OLS -1 OLS 4 OLS 4 OLS VALINT OLS ;
: DATWRSTR -1 OLS -1 OLS LENSTR OLS LENSTR OLS ADRSTR LENSTR DO DWS1 D ;
: DWS1 [A] C @B OBS 1+ ;
: NEWOBJ1 [] SIZE_ROOT ! SIZE_X NEWOBJ3 ;
: NEWOBJ3 '' DD_ROOT ! WRI_DATA
NEWID C ! OIDV SIZE_X C2 D.NEWOBJ [OID] ;
9 VALUE LCH
LCH LONG VCTR CLONEHDR VAR DATCH LONG VAR LENVMEM1
:: : CLONE [OID] C HIPRIO
C LOADOBJ FINDOID PrioQueNUM C PUSH 2 Channels !NCHAN 0 GOTO
CLONE1 []
'' CC_ROOT ! WRI_DATA NEWID C 0 ! CLONEHDR SZ_HDROBJ HSIZE+ C2 D.NEWOBJ
[OID] POP 3 Channels C ! DATCH !NCHAN LENVMEM C ! LENVMEM1
C2 [OID_NEW LEN OID_NEW] CLONE_DATA [OID_NEW] ;
: CLONE1
ILS 1 ! CLONEHDR [BHR] ILS 2 ! CLONEHDR [KH]
ILS 3 ! CLONEHDR [TRC] 0 4 ! CLONEHDR
SZ_HDROBJ 5 ! CLONEHDR -1 6 ! CLONEHDR
-1 7 ! CLONEHDR 0 8 ! CLONEHDR
0 9 ! CLONEHDR ;
: CCR1 [N] C CLONEHDR OLS 1+ ;
: CC_ROOT 0 LCH 1+ DO CCR1 D ;
: CLONE_DATA [LEN OID] '' COPY_DATA E2 NEWDREC [] ;
: COPY_DATA [] DATCH NCHAN LENVMEM1 DO_IOBSCC DD ;
:: 0 VALUE N_TRSC
[Запись новых данных, запись в журнал]
: NEWDREC [SIZED PROC OID] N_VAL N_TRSC C3 NEWJREC FINDOID
PrioQueNUM [SIZE PROC N] C PUSH
2 Channels !NCHAN
[SIZED PROC] ! WRI_DATA NEWVM1 G_VAL C OLS [ADR_DATA]
[перечитать канал данных]
GOTO POP 3 Channels LCTX [] ;
[новая запись в журнал. На вх: номер транз. и адрес из заголовка]
: NEWJREC [addr_hdr TRANS OID] C LOADOBJ FINDOID PrioQueNUM
[. TRANS N] C PUSH 4 Channels
!NCHAN JRECLEN UPSIZE OLS POP NCHAN PUSH 2 Channels !NCHAN
C GOTO ILS POP !NCHAN
E2 OWS OLS W_DATIME [] ;
B10
[Запись текущего времени]
: W_DATIME 1979 OWS 12 OBS 31 OBS TMGET TMS ;
: TMS [num] N2T GBR E2 GBR E2 GBR E2 OBS OBS OBS 100 * OWS ;
B16
[просмотр журнала объекта]
[Переключиться на журнал]
: OBJ.J [OID]
C LOADOBJ FINDOID PrioQueNUM 4 Channels !NCHAN ;
: JVIEW [oid] CR ."Updated data:"
OBJ.J LENVMEM JRECLEN / D 0 GOTO DO JVIEW1 ;
: JVIEW1 CR ."Trans= " ILS .D SP
IWS BR N_BHR ."Behav.=" N_VAL ."AddrVal=" N_KH ."Knowhow="
ELSE ."?????? =" ILS SP .D SP JDATAV1 ;
: JDATAV1 S( BASE@ ) B10 IWS IBS IBS 2 TON #. TOB 2 TON #. TOB 4 TON
SP SP #: POS2 #: POS2 #. POS2 # IWS 4 TON TOB ;
: POS2 [B] IBS 2 TON TOB ;
[Определить размер объекта в памяти = заголовок + данные]
: SIZEMEMOBJ [N] C PrioQueOID BR0 T0 SMEMO1 [0/size] ;
: SMEMO1 3 Channels !NCHAN LENVMEM HSIZE+ HSIZE+ SZ_HDROBJ + [size] ;
7.7 Выполнение действийPROGRAM $M3
[Выполнение действий (knowhow)]
FIX 1000 BYTE VCTR BUFTXT [Буфер для текста действий]
FIX LONG VAR ABUF
: BEGABUF 0 ' BUFTXT ! ABUF ;
: RUNCMD [OID_KH] BEGABUF "KH$" S2BUF N2BUF ABUF BEGABUF ABUF E2 C2 -
TEXEC ;
: MAKECMD [OID_KH] BEGABUF ": KH$" S2BUF C N2BUF # ABUF !TB !1+ ABUF
COPY2BUF_STR " ; " S2BUF
ABUF BEGABUF ABUF E2 C2 - TEXEC ;
: S2BUF [A L] DO S2BUF1 D ;
: S2BUF1 C @B ABUF !TB !1+ ABUF 1+ ;
: N2BUF [N] 8 DO CTN-SB D 8 [C1 .. Cn n] DO CTB ;
: CTN-SB [N] C 0F & #0 + E2 -4 SHT [C N'] ;
: CTB ABUF !TB !1+ ABUF ;
LONG VAR OIDK
: NEW_VOC "PROGRAM $KH_VOC" TEXEC ;
: RUN_KH [OID_KH] NEW_VOC C MAKECMD RUNCMD ;
7.8 Кэширование объектовPROGRAM $LS_CASH
[ Каналы: 1 - Header M.Obj 2 - Header D.Obj 3 - M.Data 4 - D.History ]
[Считаем, что все объекты -- стабильные]
: LOADOBJ [OID] C FINDOID [искали в кэше] C BR- LOADOBJ-1 DD ;
: LOADOBJ-1 D [OID] [Ищем в каталоге БД объект] [C] LOADOBJ1 [LOADOBJ2]
LenPrioQue 1- HIPRIO1 [] ;
: LOADOBJ1 6 LOADOBJ3 ;
[открыть дисковый объект в кэше]
: LOADOBJ3 [OID NDIRCH] EL_FIND [OID 1/0] IF0 O_NOTFND [Нет такого объекта]
C LenPrioQue 1- ! PrioQueOID [Занесли в кэш идентификатор объекта]
ILS [OID ADDR_MEM] [получили адрес размещения в дисковой памяти]
LenPrioQue 1- PrioQueNUM
[получили номер отведенной для работы с объектом группы каналов]
[OID ADDR_MEM NUM]
C 2 Channels [OID ADDR_MEM NUM CHANOBJ]
NCHAN NBASECH - !NCHAN [получили номер базового канала]
C3 GOTO LCTX [OID ADDR_MEM NUM] [загрузили заголовок дискового объекта]
E2D [O N]
C 4 Channels [OID NUM CHANHIST] [получили канал для истории]
G_HIS ILS
[O N C HISTORY] [HISTORY д.б. <>0]
GOTO NCHAN E2 LCTX [Открыли историю в канале] !NCHAN [O N]
C 3 Channels G_VAL ILS GOTO LCTX [временно открыли канал данных
напрямую с жесткого диска]
[LOADDM]
NOP [Здесь нужно установиться на объект в памяти и канал данных перекл. на него]
DD [] ;
VAR NCHANDAT
VAR NCHANOBJ LONG VAR LENDAT
: COPY_DAT1 [] NCHANOBJ 0 GOTOC [NCHANOBJ] NCHAN 0 GOTO 8 DO_IOBSCC D 14 OLS
... ); Pisa в университетах Глазго и Св. Эндрю (Universities of Glasgo and St. Andrew). Среди исследовательских институтов, в которых существовали мощные группы, ориентированные на исследования в области объектно-ориентированных баз данных, входили OGI (Oregon Graduate Institute ), MCC (Microelectronics and Computer Technology Corporation ) и французский исследовательский центр INRIA . На базе ...
... ООП. Сейчас язык С++ является языком публикаций по вопросам ООП. Практикум на С/С++:Фактически С++ содержит 2 языка: Полностью включает низкоуровневый Си, поддерживающий конструкции СП, и, собственно, С++ (Си с классами) – язык объектно-ориентированного программирования (ООП). Мы находимся сейчас на технологической ступени структурного программирования, поэтому начинаем с Си: Знакомство с С, ...
... СУБД; можно управлять распределением областей внешней памяти, контролировать доступ пользователей к БД и т.д. в масштабах индивидуальной системы, масштабах ограниченного предприятия или масштабах реальной корпоративной сети. В целом, набор серверных продуктов одиннадцатого выпуска компании Sybase представляет собой основательный, хорошо продуманный комплект инструментов, которые можно ...
... , а иногда и невозможным. Недостатки MOLAP-модели: · Многомерные СУБД не позволяют работать с большими базами данных. · Многомерные СУБД по сравнению с реляционными очень неэффективно используют внешнюю память. В подавляющем большинстве случаев информационный гиперкуб является сильно разреженным, а поскольку данные хранятся в упорядоченном виде, неопределенные значения ...
0 комментариев