Primjeri 1c spremišta vrijednosti 8.3. Pohranjivanje podataka u polja tipa skladišta vrijednosti. Ograničenja u radu sa Web klijentom

Platforma 1C: Enterprise pruža puno mogućnosti za pohranjivanje podataka različitih tipova.

Ali često ove prilike nisu dovoljne. A onda nam u pomoć dolazi poseban predmet - StorageValues. Ovaj objekt vam omogućava da u posebnom formatu pohranite i standardne objekte 1C:Enterprise, na primjer, tablicu vrijednosti, i one nestandardne za koje tip nije predviđen na platformi. Nestandardni tipovi mogu uključivati ​​datoteke. Na primjer, koristeći skladište vrijednosti u bazi podataka 1C, možete pohraniti fotografije zaposlenika, skenirane dokumente, eksternu obradu itd. Prednost je što su svi ovi objekti pohranjeni u samoj bazi podataka. Shodno tome, prilikom postavljanja nove baze podataka iz rezervne kopije, svi ovi objekti će također biti prisutni u novoj bazi podataka. S druge strane, ako skladištite velike datoteke u bazi podataka, to može značajno povećati njen volumen i negativno utjecati na njene performanse. Stoga se ovdje mora održati razumna ravnoteža.

Pogledajmo rad sa skladištem vrijednosti koristeći primjer. Napravimo poseban direktorij u konfiguratoru - nazovimo ga ExternalObjects, a mi ćemo zauzvrat kreirati rekvizite za direktorij Objekt sa tipom StorageValues

I sada možemo kreirati elemente u ovom direktoriju, iu rekvizitima Objekt Svaki element je upisan u datoteku.

Rad sa trgovinom vrijednosti je vrlo jednostavan. Ako pogledamo pomoćnik sintakse, vidjet ćemo da ovaj objekt ima samo jednu metodu i jedan konstruktor.

Sada, za demonstraciju, napišimo najjednostavniji kod koji će napisati datoteku u props Objekt prethodno kreirani element direktorija, a zatim pročitajte ovu datoteku iz props-a i zapišite je na disk, ali pod drugim imenom.

&Na serverskoj proceduri LoadUnloadFile(Directory Element)Directory Object =Directory Element. GetObject() ; //Postavite sliku u skladište vrijednosti LabelDownload = Nova slika("g:\musor\favicon.ico" ) NewValueStorage; //Pisanje elementa direktorija Objekt imenika. Objekt DirectoryObject. Pisati() ; //Prenesi sliku iz skladišta vrijednosti u datoteku FileName = "g:\musor\favicon_1.ico" ; LabelUpload = Objekt direktorija. Objekt. Get() ; LabelUpload. Napiši (Ime datoteke) ; Kraj procedure

I nekoliko objašnjenja za kod.

  • Objekat se stavlja u skladište direktno kada se prodavnica kreira pomoću konstruktora.

Za skladištenje drugih vrsta datoteka osim slika u skladištu, možete koristiti objekt BinarniData. Čisto teoretski, čak možete pohraniti elemente direktorija, dokumente itd. u skladište vrijednosti. Ali u praksi to nema nikakvog smisla. Ali ponekad je moguće koristiti skladište vrijednosti za pohranu tablice vrijednosti, stabla vrijednosti i drugih univerzalnih kolekcija.

U 1C:Enterprise 8 moguće je pohranjivati ​​različite podatke u polja tipa Pohrana vrijednosti. Ova polja mogu pohraniti vrijednosti tipa ValueStorage. Sam tip ValueStorage namijenjen je, prije svega, za pohranjivanje vrijednosti različitih tipova u serijaliziranom obliku, odnosno u obliku koji vam omogućava da upišete podatke, a zatim ih vratite. U dokumentaciji za ugrađeni jezik, u opisu objekata, mogućnost serijalizacije je označena oznakom “Serializable”. Ove vrijednosti, kao i vrijednosti primitivnih tipova, mogu se smjestiti u skladište vrijednosti i na taj način se upisati u polja baze podataka tipa ValueStorage. Važna karakteristika skladišta vrijednosti je mogućnost pohranjivanja podataka u komprimiranom obliku. Ovo vam omogućava da značajno smanjite količinu pohranjenih informacija za velike objekte.

Dakle, korištenjem polja tipa Value Storage, moguće je pohraniti u bazu podataka znatno širu listu tipova podataka u odnosu na ono što se eksplicitno može specificirati za polja. Međutim, treba uzeti u obzir da se ovaj način skladištenja i mogućnost manipulacije takvim podacima značajno razlikuje od uobičajenog skladištenja podataka u poljima baze podataka. Za takva polja, sistem ne podržava praktično nijednu funkcionalnost osim stvarnog pisanja i čitanja. Indeksiranje se ne može koristiti za takva polja, podaci se ne mogu poredati po njima u upitima i selekcijama, takva polja se ne mogu zbrajati itd. U ovom slučaju, može se smatrati da mehanizam baze podataka pohranjuje neke informacije, a da ne zna ništa o njegovoj prirodi.

Shodno tome, polja tipa Value Storage treba koristiti samo u slučajevima kada to odgovara njihovoj namjeni i tehnološkim karakteristikama.

Jedna od glavnih upotreba polja tipa Value Storage je pohranjivanje slika i slika datoteka. U tu svrhu koriste se tipovi Image i Binary Data. Ovo vam omogućava da u bazu podataka sačuvate fotografije zaposlenih, dokumente kreirane u različitim formatima itd. Prilikom implementacije skladištenja takvih informacija, može se preporučiti kreiranje struktura podataka koje će osigurati odvojeno skladištenje ovih polja od glavnih informacija. Na primjer, da biste pohranili fotografije zaposlenika, možete implementirati poseban direktorij ili registar informacija, umjesto da postavljate polja tipa Value Storage u same objekte koji pohranjuju listu pojedinaca. Treba uzeti u obzir da objekte (na primjer, elemente direktorija) uvijek čita sistem kao cjelina. Stoga, pohranjivanje velikih količina informacija direktno u objektna polja može značajno usporiti sistem.

U poljima tipa ValueStorage moguće je, na primjer, pohraniti tablice vrijednosti i struktura. U isto vrijeme, bilo koji tip podataka, uključujući referentne tipove, može biti pohranjen u tablicama vrijednosti i strukturama. Imajte na umu da se kolekcija može smjestiti u Skladište vrijednosti ako sadrži samo vrijednosti koje se mogu serijalizirati. Međutim, treba uzeti u obzir da se ova opcija za pohranjivanje podataka značajno razlikuje od eksplicitnog pohranjivanja vrijednosti u pojedinačna polja i od pohranjivanja informacija u tabelarne dijelove ili registre informacija. Sistem neće održavati referentni integritet za takva polja, neće omogućiti pretraživanje podataka u upitima itd. Stoga se pohranjivanje kolekcija u takvim poljima ne može koristiti za implementaciju bitnih dijelova aplikativnog rješenja odgovornog za poslovnu logiku. Takvo skladištenje može biti dozvoljeno samo za pomoćne podatke koji nisu bitni za poslovnu logiku aplikativnog rješenja, na primjer, za pohranjivanje bilo kakvih korisničkih postavki.

Iako sistem nema eksplicitno ograničenje veličine podataka pohranjenih u ValueStorage poljima, ipak biste trebali biti oprezni u pogledu količine pohranjenih informacija. Treba uzeti u obzir da stavljanje velikih količina u takva polja povećava ukupni volumen baze podataka, a to će negativno uticati na rad sistema prilikom obavljanja različitih administrativnih operacija, kao što je kreiranje sigurnosne kopije baze podataka. Na primjer, prilikom pohranjivanja slika datoteka, može se preporučiti da se u takva polja pohranjuju podaci koji su zaista potrebni u radu, ali da se ne koriste za pohranjivanje velikih količina datoteka koje se ne koriste u aplikacijskom problemu koji se rješava.

Gotovo sve informacije mogu se pohraniti u skladište vrijednosti, npr.

... slike (fotografije):

CurrentImage.Object = SprFabric.Link; CurrentImage.DataType = Enumerations.Types of Additional Information of Objects.Image; Skladište = NewValueStorage(NovaSlika, NewDataCompression()); CurrentImage.Storage = Storage.Get();

// na ovom mjestu prikazuje sve... Form Elements.PictureField1.Picture = Storage.Get(); CurrentImage.Write();

...proračunski dokument:

TabDoc=Novi tablični dokument; TabDoc.Output(FormElements.TabularDocumentField1); Storage=NewValueStorage(TabDoc); Pisati();

Kraj procedure

Procedura RestoreFromStoragePress(Element)

TabDoc=Storage.Get(); Ako TabDoc<>Undefined ThenFormElements.TabularDocumentField1.Output(TabDoc); endIf;

Kraj procedure

... proizvoljni fajlovi (binarni podaci):

XZ = NewValueStorage(NewBinaryData(file));

Osam podržava kompresiju podataka smještenih u pohranu:

XZ = NewValueStorage(NewBinaryData(file),NewDataCompression(9));

... eksterna obrada i izvještavanje:

Procedura LoadProcessingIntoStorage(PropsStorageType)

Stopa kompresije = NewDataCompression(9); //9 maksimalnih PropsStorageType = New StorageValues(New BinaryData("c:\reports\report.epf", Stopa kompresije));

Kraj procedure

Procedura StartProcessingFromStorage(PropsStorageType)

TemporaryFileName = TemporaryFileDirectory()+"report.epf"; BinarniData = PropsStorageType.Get(); BinaryData.Write(TemporaryFileName); ExternalProcessing = ExternalProcessing.Create(TemporaryFileName); ExternalProcessing.GetForm().Open();

Kraj procedure

Rad sa skladištem

Ako su to bili binarni podaci, onda se mogu vratiti iz skladišta vrijednosti pomoću Get metode i zapisati u datoteku pomoću Write() metode.

If TypeValue(Storage)<>Upišite ("BinaryData") Zatim

Binarni podaci = Storage.Get();

Binarni podaci = Skladištenje;

endIf; BinaryData.Write(FileName);

Ako je to bio, na primjer, Word dokument (doc datoteka ili druga registrovana vrsta datoteke), onda se može otvoriti na sljedeći način:

LaunchApplication(FileName);

Da obrišete polje tipa Pohrana vrijednosti, morate mu dodijeliti Nedefinirano:

PropsStorage = Nedefinisano;

Rad sa datotekama i slikama na ugrađenom jeziku 1C:Enterprise 8

Svrha

Upravljana aplikacija implementira novi mehanizam za rad sa datotekama. Omogućava razmjenu datoteka između baze podataka i klijentske aplikacije. Posebnost ovog mehanizma je u tome što je dizajniran za upotrebu u tankom klijentu i Web klijentu i dizajniran je uzimajući u obzir ograničenja rada sa datotekama koja nameću web pretraživači.

Mehanizam je skup metoda koji se mogu koristiti za postavljanje podataka pohranjenih lokalno na korisnikovom računaru u privremeno skladište baze podataka, prenošenje ovih informacija iz privremene memorije u bazu podataka i njihovo vraćanje na računar korisnika. Najčešći aplikativni problemi koji se rješavaju ovim mehanizmom su pohranjivanje pratećih informacija, na primjer, slike robe, dokumenta vezana za ugovore itd.

Obim metode

Privremeno skladište

Privremena pohrana je specijalizirana oblast informacijske baze u koju se mogu smjestiti binarni podaci. Glavna svrha je privremeno skladištenje informacija tokom interakcije klijent-server prije nego što se prenesu u bazu podataka.

Potreba za privremenim skladištenjem nastaje jer operativni model web pretraživača zahtijeva da se datoteka koju odabere korisnik prenese direktno na server bez mogućnosti pohranjivanja na klijentu. Kada se datoteka prenese, ona se stavlja u privremenu memoriju i može se koristiti prilikom pisanja objekta u bazu podataka.

Najtipičniji zadatak aplikacije koji se rješava privremenim skladištenjem je obezbjeđivanje pristupa datotekama ili slikama prije nego što se objekt zabilježi u informacijskoj bazi, na primjer, u obliku elementa.

Datoteka ili binarni podaci smješteni u memoriju identificiraju se jedinstvenom adresom, koja se kasnije može koristiti u operacijama pisanja, čitanja ili brisanja. Ova adresa je data metodama za pisanje datoteke u privremenu memoriju. Zasebna metoda u ugrađenom jeziku omogućava vam da odredite da li je proslijeđena adresa adresa koja upućuje na podatke u privremenoj memoriji.

Baza informacija

Mehanizam vam omogućava pristup binarnim podacima pohranjenim u atributima tipa Value Storage.

Kao iu slučaju privremenog skladištenja, pristup informacijama je moguć preko posebne adrese. Možete ga dobiti putem posebne metode prosljeđivanjem veze do objekta ili ključa za unos informacija u registar i imena atributa. U slučaju tabelarnog dijela, dodatno je potrebno prenijeti indeks reda tabelarnog dijela.

Metode za rad sa datotekama imaju ograničenja u radu sa detaljima baze podataka. Za njih, za razliku od privremenog skladištenja, dostupno je samo čitanje informacija, ali ne i njihovo pisanje ili brisanje.

Opis metoda za rad sa datotekama

Pohranjivanje podataka u privremenu memoriju

Najtipičniji scenario za korištenje ovog mehanizma uključuje početno stavljanje korisničkih podataka u privremenu memoriju. Za to postoje dvije metode: PlaceFile() i PlaceFileInTemporaryStorage().

Prva metoda, PlaceFile(), postavlja datoteku iz lokalnog sistema datoteka u privremenu memoriju. Metoda može prihvatiti ciljnu adresu u memoriji. Ako nije definiran ili je prazan niz, tada će se kreirati nova datoteka i metoda će vratiti svoju adresu kroz odgovarajući parametar.

Ako je parametar koji određuje interaktivni način rada True, tada će metoda prikazati standardni dijaloški okvir za odabir datoteke u kojem možete odabrati datoteku koju želite smjestiti u pohranu. U ovom slučaju, metoda će također vratiti adresu odabrane datoteke.

Kao rezultat, metoda vraća False ako je korisnik interaktivno odbio izvršiti operaciju u dijalogu za odabir datoteke. Metoda je dostupna samo na klijentu.

Druga metoda, PlaceFileInTemporaryStorage(), je slična prethodnoj, samo što je dostupna na serveru, a podaci koji se upisuju u privremenu memoriju nisu predstavljeni kao putanja u sistemu datoteka, već kao varijabla tipa BinarniData. Isto tako, ako nije navedena ciljna adresa, kreira se nova datoteka u memoriji. Njegova adresa se vraća kao rezultat funkcije.

Preuzimanje datoteke iz privremene memorije

Prilikom pisanja objekta u infobazu, možda ćete morati izdvojiti podatke iz privremene memorije i smjestiti ih, na primjer, u atribut. Za ovo postoji odgovarajuća serverska metoda - GetFileFromTemporaryStorage(). Ova metoda preuzima podatke iz privremene memorije i vraća ih kao rezultat. Da biste to učinili, morate navesti adresu u privremenoj memoriji. Ovu adresu vraćaju gore opisane metode PlaceFile() i PlaceFileInTemporaryStorage() ako se uspješno izvrše.

Brisanje fajla iz privremene memorije

Nakon što su podaci sačuvani u detaljima, datoteka u privremenoj memoriji može se izbrisati. U tu svrhu postoji metoda DeleteFileFromTemporaryStorage(), koja briše datoteku iz privremene memorije. Metoda uzima kao parametar adresu datoteke u privremenoj memoriji. Dostupno na serveru.

Provjera adrese za privremeno skladištenje

Adresa datoteke može ukazivati ​​i na privremenu memoriju i detalje u bazi podataka. Za provjeru njegovog tipa postoji metoda This isTemporaryStorageAddress().

Provjerava da li je proslijeđena adresa adresa koja upućuje na trgovinu. Vraća True ako adresa ukazuje na privremenu memoriju. Metoda je dostupna na serveru.

Primanje adrese rekvizita

Nakon što su podaci stavljeni u detalje u bazi podataka, možda ćete morati da im pristupite pomoću metoda datoteka.

Ali prije nego što primite podatke, na primjer od nekretnine, morate dobiti adresu ove nekretnine. U tu svrhu postoji metoda GetFileAddressInInformationBase().

Njegova svrha je da vrati adresu datoteke u infobazu prema originalnim parametrima. Da biste to učinili, trebate proslijediti ključ objekta (ovo može biti ili veza do objekta ili ključ za unos informacija u registar) i naziv atributa. Ako trebate dobiti adresu datoteke pohranjene u atributu tabelarnog dijela, prije naziva atributa u parametru koji specificira naziv atributa, potrebno je dodati naziv tabelarnog dijela i tačku “.”. Metoda je dostupna i na klijentu i na serveru.

Preuzimanje fajla iz infobaze

Metoda GetFile() prima datoteku iz baze podataka i sprema je u korisnički lokalni sistem datoteka. Prvi parametar specificira adresu datoteke u rekvizitima ili privremenoj memoriji datoteka. Drugi parametar specificira odredišnu lokaciju rezultirajuće datoteke. U neinteraktivnom načinu rada, morate navesti putanju. U interaktivnom načinu rada, parametar je opcionalan.

Po defaultu, metoda se izvršava u interaktivnom načinu, odnosno posljednji parametar je True. To znači da se prikazuje dijaloški okvir u kojem možete odrediti radnju s primljenom datotekom: pokrenite je ili spremite na lokaciju koju odredi korisnik. Ako je interaktivni način aktivan i parametar putanje datoteke ciljnog diska nije specificiran, operacija otvaranja datoteke nije dostupna. Vraća logičku vrijednost. Netačno znači da je korisnik izabrao da otkaže operaciju u interaktivnom dijaloškom okviru za spremanje datoteke.

Primjer korištenja metoda datoteka

// Primanje datoteke s diska u interaktivnom načinu // i postavljanje u privremenu memoriju &Na klijentskoj proceduri SelectDiskFileAndWrite()

Varijabla SelectedName; VariableTemporaryStorageAddress; Ako PutFile(TemporaryStorageAddress, SelectedName, True) onda Object.FileName = SelectedName; PlaceObjectFile(TemporaryStorageAddress); endIf;

Kraj procedure

// Kopiranje datoteke iz privremene memorije u // atribut direktorija, snimanje objekta, brisanje datoteke iz privremene // memorije &Na serveru Procedura Postavite objektnu datoteku (adresa privremene pohrane)

Element direktorija = Form AttributesValue("Object"); BinaryData = GetFileFromTemporaryStorage(TemporaryStorageAddress); Element direktorija. Podaci datoteke = NewValueStorage(BinaryData); FilePathOnDisk = Nova datoteka(DirectoryItem.FileName); Ime stavke direktorija = FilePathOnDisk.Name; Element direktorija.Write(); Modificirano = Netačno; DeleteFileFromTemporaryStorage(TemporaryStorageAddress); ValueVFormAttributes(Element direktorija, "Objekat");

Kraj procedure

// Čitanje datoteke iz rekvizita i spremanje // na lokalni disk u interaktivnom načinu &Na klijentskoj proceduri ReadFileAndSaveToDisk()

Adresa = GetFileAddressInInformationBase(Object.Link, "FileData"); GetFile(Adresa, Object.FileName, True);

Kraj procedure

Podrška za adrese u polju slike

Kontrola polja slike podržava prikazivanje slike određene adresom datoteke u privremenoj memoriji ili bazi podataka.

Da biste to učinili, morate postaviti atribut tipa niza u svojstvu Data elementa obrasca. Vrijednost ovog atributa će se tumačiti kao adresa slike.

Primjer // Vezivanje polja slike za adresu slike u privremenoj // memoriji. AddressPictures formiraju detalje tipa string

Datoteka mjesta (Adresa slike, Tačno)

Picture.Data = AddressPictures

Ograničenja u radu sa Web klijentom

Rad opisanog mehanizma pri korištenju Web klijenta ima neka ograničenja. Ova ograničenja se odnose na sigurnosni model pretraživača. Tako, na primjer, klijent ne može samostalno pohraniti datoteku u lokalni sistem datoteka, odnosno dostupna je samo interaktivna verzija klijentskih metoda PlaceFile() i GetFile(). Izuzetak se stvara kada se pokušava koristiti neinteraktivni način rada. Dijaloški okviri koji se pojavljuju interaktivno su specifični za tip vašeg pretraživača.

Funkcije pri radu sa Value Storage na klijentu

problem:

Kada dokument ima atribut tipa Skladište vrijednosti u tabličnom dijelu, to usporava otvaranje obrasca dokumenta ako ovaj atribut sadrži velike podatke.

Pretpostavljeni razlog:

Možda se prilikom otvaranja obrasca klijentu ne šalje veza do podataka koji se nalaze u Value Storeu, već sami podaci.

Rješenje

  • U svojstvima atributa tabele obrasca nalazi se zastavica "Uvek koristi". Ako je postavljeno, sadržaj polja se uvijek prenosi između servera i klijenta - na primjer, prilikom otvaranja obrasca. Ova zastavica mora biti onemogućena, ali to se mora uzeti u obzir u kodu, jer po defaultu neće biti vrijednosti za ovo polje na klijentu. Primjer se može naći u 1C: Arhiva.

Još je bolje koristiti privremeno skladište za prijenos datoteka između klijenta i servera.

Imamo direktorij “Proizvodi”, u atributu “Podaci” u kojem se informacije pohranjuju u obliku binarnih podataka. Sam atribut ima tip vrijednosti "Value Storage". Sljedeći snimak ekrana prikazuje strukturu metapodataka direktorija.

Za priključivanje proizvoljne datoteke sa diska u obliku elementa implementirana je komanda "AttachFile". Njegov programski kod je predstavljen na sljedećem popisu:

& Na klijentskoj proceduri AttachFile(Command) // Rukovalac komandom na klijentu. Izbor fajla // Dijalog za odabir datoteke s diska Mode = FileSelectionDialogMode. Otvaranje; OpenFileDialog = NewFileSelectDialog(Mode); OpenFile dijalog. FullFileName = " " ; OpenFile dijalog. MultipleSelect = False ; OpenFile dijalog. Title = "Odaberite fajlove"; Ako FileOpenDialog. Select() Zatim FilePath = FileOpenDialog. FullFileName; // Primanje podataka o binarnoj datoteci BinaryData = novi BinaryData(PathToFile) ; // Prijenos binarnih podataka na server AttachFileServer(BinaryData) ; Inače Text = "ru = " " Fajl (s) nije odabrano!" " ; en =" " Fajl (s) nije odabrano!" " " ; Upozorenje(NStr(Text) ); EndIf ; EndProcedure & OnServer Procedure AttachFileServer(BinaryData) // Rukovatelj na serveru za snimanje datoteke u informacijskoj sigurnosti // Transformirajte objekt obrasca u referentni objekt ObjectCurrent = FormAttributesValue("Object") ; // Dodijelite novu vrijednost atributu "Podaci". ObjectCurrent. Podaci = NewValueStorage(BinaryData) ; // Sačuvaj promjene ObjectCurrent. Pisati() ; Kraj procedure

Ako algoritam opišemo općenito, tada se prvo odabire datoteka s diska na klijentu. Rezultirajući binarni fajlovi se šalju na server, gdje se bilježe u informacijskoj bazi, odnosno u atributu „Podaci“ trenutnog elementa direktorija.

U principu, sve radi. Prilikom otvaranja elementa možemo čitati ove podatke po potrebi. Ako je, na primjer, slika spremljena u rekvizite, onda je možemo dobiti i prikazati u polju obrasca. Ovo rješenje ima svoje mjesto, ali u većini zadataka nije optimalno koristiti atribute s tipom vrijednosti “Value Storage” u direktorijima i dokumentima. I zato...

Performance Impact

Pokrenimo neke testove performansi. Testovi će koristiti dva elementa direktorija "Proizvodi", sa i bez priložene datoteke. Veličina priložene datoteke je 5 megabajta.

Svi testovi se izvode korištenjem "GetElement" obrade u test konfiguraciji. Ovu konfiguraciju možete preuzeti sa veze na kraju članka.

Izmjerimo vrijeme potrebno za otvaranje stavki u direktoriju "Proizvodi". Za otvaranje elementa koristi se globalna kontekstualna metoda "OpenValue()", kojoj se kao parametar prosljeđuje referenca na element. Izmjerimo vrijeme otvaranja koristeći standardni alat za mjerenje performansi. Rezultati su predstavljeni na sljedećem snimku ekrana:

Kao što vidimo, vrijeme potrebno za otvaranje elementa sa priloženom datotekom je 10 puta duže! Uradimo još jedan test. Hajde da izvršimo metodu "GetObject()" da referenciramo element kataloga proizvoda. Rezultat testa možete vidjeti na sljedećem snimku ekrana.

Razlika je prilično značajna. Primanje elementa bez priloženog fajla je 194 puta brže!

To se događa zato što metoda “GetObject()” prima sve podatke iz detalja elementa direktorija putem reference. U skladu s tim, metoda prima vrijednosti ne samo atributa "Kod" i "Ime", već i vrijednost atributa "Podaci". Ako pohranjuje binarne podatke veličine 5 megabajta (kao u našem primjeru), onda kada se objekt primi, ti podaci se stavljaju u RAM (kao i drugi detalji) i zatim se prenose na stranu klijenta. Prijem podataka iz ovog atributa povećava vrijeme za dobivanje objekta elementa. Ako se koristi tanak komunikacijski kanal, tada će se vrijeme otvaranja još više povećati zbog prijenosa velike količine informacija preko mreže.

Napomena: prilikom izvršavanja metode "OpenValue()", objekt elementa direktorija se također prvo dobiva, a zatim se transformira u objekt obrasca i prosljeđuje klijentu (za upravljane obrasce). Odnosno, kada se element otvori referencom, objekt se također preuzima.

Hajde da izvršimo završni test vremena potrebnog za otvaranje i pisanje stavke direktorijuma sa i bez priložene datoteke. Rezultat je prikazan na sljedećem snimku ekrana.

Prirodni rezultat. Ispostavilo se da je vrijeme za primanje i zatim pisanje za stavku direktorija s priloženom datotekom ~19 puta duže. Kao što je gore spomenuto, prilikom prijema objekta dobivaju se vrijednosti svih njegovih detalja, uključujući atribut "Podaci" u kojem je pohranjeno 5 megabajta informacija. Kada se element upiše, ova količina podataka se ponovo upisuje u infobazu. Shodno tome, pohranjivanje podataka u atribut direktorija (ili dokument) sa tipom “Value Storage” negativno utječe na performanse kako prilikom preuzimanja objekta tako i prilikom njegovog postavljanja u infobazu.

Koji je najispravniji način rješavanja problema pohranjivanja podataka za objekte baze podataka?

Ispravno rješenje

Ako pogledamo implementaciju ovog mehanizma u tipičnim konfiguracijama, vidjet ćemo da se za objekte dodatne informacije pohranjuju u posebnu tablicu registra informacija. Ovako, na primjer, izgleda mehanizam datoteke priloga u standardnoj konfiguraciji „Upravljanje trgovinom“ verzije 11.

Direktorij "Nomenclature" je vlasnik direktorija "NomenclatureAttachedFiles". Ovo je zauzvrat povezano sa registrom informacija AttachedFiles, čija dimenzija AttachedFile se odnosi na njegov element. Dakle, podaci priloženi objektima baze podataka zapravo se pohranjuju u tablicu registra informacija, na čiji rad praktički ne utiče količina podataka pohranjenih u resursu. Međudirektorijum "Nomenklatura priloženih datoteka" je neophodan za skladištenje dodatnih informacija za priloženu datoteku, kao i za podršku pristupa priloženoj datoteci putem reference.

Sve gore navedeno još jednom potvrđuje ogroman uticaj pravilno dizajnirane strukture metapodataka konfiguracije na performanse.

Testirajte konfiguraciju s primjerom iz članka: VEZA .