Kho giá trị 1c không có sẵn trong dữ liệu biểu mẫu. Tác động hiệu suất

Hầu hết mọi thông tin đều có thể được lưu trữ trong kho giá trị, ví dụ:

... hình ảnh (ảnh):

CurrentImage.Object = SprFabric.Link; CurrentImage.DataType = Enumerations.Types thông tin bổ sung của Objects.Image; Lưu trữ = NewValueStorage(NewPicture, NewDataCompression()); CurrentImage.Storage = Storage.Get();

// ở nơi này nó hiển thị mọi thứ... Form Elements.PictureField1.Picture = Storage.Get(); CurrentImage.Write();

...tài liệu bảng tính:

TabDoc=Tài liệu dạng bảng mới; TabDoc.Output(FormElements.TabularDocumentField1); Lưu trữ=NewValueStorage(TabDoc); Viết();

Kết thúc thủ tục

Thủ tục RestoreFromStoragePress(Element)

TabDoc=Storage.Get(); Nếu TabDoc<>Không xác định ThenFormElements.TabularDocumentField1.Output(TabDoc); endIf;

Kết thúc thủ tục

...tệp tùy ý (dữ liệu nhị phân):

XX = NewValueStorage(NewBinaryData(file));

Tám hỗ trợ nén dữ liệu được lưu trữ:

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

... xử lý và báo cáo bên ngoài:

Thủ tục LoadProcessingIntoStorage(PropsStorageType)

CompressionRate = NewDataCompression(9); //9 PropsStorageType tối đa = StorageValues ​​mới (Dữ liệu nhị phân mới ("c:\reports\report.epf", Tốc độ nén));

Kết thúc thủ tục

Thủ tục StartProcessingFromStorage(PropsStorageType)

TemporaryFileName = TemporaryFileDirectory()+"report.epf"; BinaryData = PropsStorageType.Get(); BinaryData.Write(Tên tệp tạm thời); Xử lý bên ngoài = InternalProcessing.Create(TemporaryFileName); Bên ngoàiProcessing.GetForm().Open();

Kết thúc thủ tục

Làm việc với bộ nhớ

Nếu đó là Dữ liệu nhị phân thì nó có thể được khôi phục từ kho lưu trữ giá trị bằng phương thức Get và ghi vào tệp bằng phương thức Write().

Nếu TypeValue(Storage)<>Nhập ("Dữ liệu nhị phân") Sau đó

Dữ liệu nhị phân = Storage.Get();

Dữ liệu nhị phân = Lưu trữ;

endIf; BinaryData.Write(Tên tệp);

Ví dụ: nếu đó là tài liệu Word (tệp doc hoặc loại tệp đã đăng ký khác), thì nó có thể được mở như sau:

LaunchApplication(Tên tệp);

Để xóa trường thuộc loại Lưu trữ giá trị, bạn cần gán nó Không xác định:

PropsStorage = Không xác định;

Làm việc với các tệp và hình ảnh bằng ngôn ngữ tích hợp 1C:Enterprise 8

Mục đích

Ứng dụng được quản lý triển khai cơ chế mới để làm việc với các tệp. Nó cung cấp trao đổi tập tin giữa cơ sở thông tin và ứng dụng khách. Điểm đặc biệt của cơ chế này là nó được thiết kế để sử dụng trong máy khách mỏng và máy khách Web và được thiết kế có tính đến các hạn chế khi làm việc với các tệp do trình duyệt Web áp đặt.

Cơ chế này là một tập hợp các phương pháp có thể được sử dụng để đặt dữ liệu được lưu trữ cục bộ trên máy tính của người dùng vào bộ lưu trữ tạm thời của cơ sở thông tin, chuyển thông tin này từ bộ lưu trữ tạm thời sang cơ sở dữ liệu và nhận lại vào máy tính của người dùng. Các vấn đề ứng dụng phổ biến nhất được giải quyết bằng cơ chế này là việc lưu trữ các thông tin đi kèm, ví dụ như hình ảnh hàng hóa, tài liệu liên quan đến hợp đồng, v.v.

Phạm vi phương pháp

Lưu trữ tạm thời

Lưu trữ tạm thời là một khu vực chuyên biệt của cơ sở thông tin, trong đó có thể đặt dữ liệu nhị phân. Mục đích chính là lưu trữ thông tin tạm thời trong quá trình tương tác giữa máy khách và máy chủ trước khi nó được chuyển đến cơ sở dữ liệu.

Nhu cầu lưu trữ tạm thời nảy sinh do mô hình hoạt động của trình duyệt web yêu cầu tệp do người dùng chọn phải được chuyển trực tiếp đến máy chủ mà không có khả năng lưu trữ nó trên máy khách. Khi một tệp được truyền, nó sẽ được đặt trong bộ lưu trữ tạm thời và sau đó có thể được sử dụng khi ghi một đối tượng vào cơ sở dữ liệu.

Nhiệm vụ ứng dụng điển hình nhất được giải quyết bằng lưu trữ tạm thời là cung cấp quyền truy cập vào các tệp hoặc hình ảnh trước khi đối tượng được ghi vào cơ sở thông tin, ví dụ, dưới dạng một phần tử.

Một tệp hoặc dữ liệu nhị phân được đặt trong bộ lưu trữ được xác định bằng một địa chỉ duy nhất, địa chỉ này sau này có thể được sử dụng trong các hoạt động ghi, đọc hoặc xóa. Địa chỉ này được cung cấp bởi các phương thức ghi tệp vào bộ lưu trữ tạm thời. Một phương thức riêng biệt bằng ngôn ngữ tích hợp cho phép bạn xác định xem địa chỉ được truyền có phải là địa chỉ trỏ đến dữ liệu trong bộ lưu trữ tạm thời hay không.

Cơ sở thông tin

Cơ chế này cho phép bạn truy cập dữ liệu nhị phân được lưu trữ trong các thuộc tính của loại Lưu trữ Giá trị.

Giống như trường hợp lưu trữ tạm thời, có thể truy cập thông tin thông qua một địa chỉ đặc biệt. Bạn có thể lấy nó thông qua một phương thức đặc biệt bằng cách chuyển một liên kết đến một đối tượng hoặc khóa nhập thanh ghi thông tin và tên của thuộc tính. Đối với phần dạng bảng thì phải chuyển thêm chỉ số hàng của phần dạng bảng.

Các phương pháp làm việc với tệp có những hạn chế khi làm việc với các chi tiết cơ sở thông tin. Đối với họ, không giống như việc lưu trữ tạm thời, chỉ có thể đọc thông tin chứ không thể viết hoặc xóa nó.

Mô tả các phương pháp làm việc với tập tin

Lưu dữ liệu vào bộ nhớ tạm thời

Kịch bản điển hình nhất để sử dụng cơ chế này liên quan đến việc ban đầu đặt dữ liệu người dùng vào bộ lưu trữ tạm thời. Có hai phương pháp cho việc này: PlaceFile() và PlaceFileInTemporaryStorage().

Phương thức đầu tiên, PlaceFile(), đặt một tệp từ hệ thống tệp cục bộ vào bộ lưu trữ tạm thời. Phương thức này có thể chấp nhận một địa chỉ đích trong bộ lưu trữ. Nếu nó không được xác định hoặc là một chuỗi trống thì một tệp mới sẽ được tạo và phương thức sẽ trả về địa chỉ của nó thông qua tham số tương ứng.

Nếu tham số xác định chế độ hoạt động tương tác là True thì phương thức sẽ hiển thị hộp thoại chọn tệp tiêu chuẩn trong đó bạn có thể chọn tệp để lưu trữ. Trong trường hợp này, phương thức cũng sẽ trả về địa chỉ của tệp đã chọn.

Kết quả là, phương thức này trả về Sai nếu người dùng tương tác từ chối thực hiện một thao tác trong hộp thoại chọn tệp. Phương pháp này chỉ có sẵn trên máy khách.

Phương thức thứ hai, PlaceFileInTemporaryStorage(), tương tự như phương thức trước, ngoại trừ việc nó có sẵn trên máy chủ và dữ liệu được ghi vào bộ lưu trữ tạm thời được biểu diễn không phải dưới dạng đường dẫn trong hệ thống tệp mà dưới dạng một biến kiểu Dữ liệu nhị phân. Tương tự, nếu không có địa chỉ đích nào được chỉ định thì một tệp mới sẽ được tạo trong bộ lưu trữ. Địa chỉ của nó được trả về là kết quả của hàm.

Lấy một tập tin từ bộ nhớ tạm thời

Khi ghi một đối tượng vào cơ sở thông tin, bạn có thể cần trích xuất dữ liệu từ bộ lưu trữ tạm thời và đặt nó vào một thuộc tính chẳng hạn. Có một phương thức máy chủ tương ứng cho việc này - GetFileFromTemporaryStorage(). Phương pháp này lấy dữ liệu từ bộ lưu trữ tạm thời và trả về kết quả. Để làm điều này, bạn cần chỉ định địa chỉ trong bộ nhớ tạm thời. Địa chỉ này được trả về bằng các phương thức được mô tả ở trên PlaceFile() và PlaceFileInTemporaryStorage() nếu chúng được thực thi thành công.

Xóa một tập tin khỏi bộ nhớ tạm thời

Sau khi dữ liệu được lưu chi tiết, tệp trong bộ lưu trữ tạm thời có thể bị xóa. Với mục đích này, có một phương thức DeleteFileFromTemporaryStorage() để xóa một tập tin khỏi bộ lưu trữ tạm thời. Phương thức này lấy tham số là địa chỉ của tệp trong bộ lưu trữ tạm thời. Có sẵn trên máy chủ.

Kiểm tra địa chỉ lưu trữ tạm thời

Địa chỉ tệp có thể cho biết cả bộ nhớ tạm thời và thông tin chi tiết trong cơ sở thông tin. Để kiểm tra loại của nó, có một phương thức This isTemporaryStorageAddress().

Nó kiểm tra xem địa chỉ được truyền có phải là địa chỉ trỏ đến cửa hàng hay không. Trả về True nếu địa chỉ trỏ tới nơi lưu trữ tạm thời. Phương pháp này có sẵn trên máy chủ.

Nhận địa chỉ đạo cụ

Sau khi dữ liệu được đặt vào chi tiết trong cơ sở thông tin, bạn có thể cần truy cập dữ liệu đó bằng các phương thức tệp.

Nhưng trước khi bạn nhận dữ liệu, chẳng hạn như từ một thuộc tính, bạn cần lấy địa chỉ của thuộc tính này. Với mục đích này, có một phương thức GetFileAddressInInInInformationBase().

Mục đích của nó là trả về địa chỉ tệp trong cơ sở thông tin theo các tham số ban đầu. Để thực hiện việc này, bạn cần chuyển khóa đối tượng (đây có thể là liên kết đến đối tượng hoặc khóa nhập thanh ghi thông tin) và tên của thuộc tính. Nếu cần lấy địa chỉ của file được lưu trong thuộc tính phần dạng bảng, trước tên thuộc tính trong tham số chỉ định tên thuộc tính, bạn cần thêm tên phần dạng bảng và dấu chấm “.”. Phương thức này có sẵn trên cả máy khách và máy chủ.

Lấy một tập tin từ cơ sở thông tin

Phương thức GetFile() nhận một tệp từ cơ sở thông tin và lưu nó vào hệ thống tệp cục bộ của người dùng. Tham số đầu tiên chỉ định địa chỉ của tệp trong props hoặc bộ lưu trữ tệp tạm thời. Tham số thứ hai chỉ định vị trí đích của tệp kết quả. Ở chế độ không tương tác, bạn phải chỉ định đường dẫn. Trong chế độ tương tác, tham số là tùy chọn.

Theo mặc định, phương thức được thực thi ở chế độ tương tác, nghĩa là tham số cuối cùng là True. Điều này có nghĩa là một hộp thoại được hiển thị trong đó bạn có thể chỉ định một hành động với tệp đã nhận: chạy tệp hoặc lưu tệp vào vị trí do người dùng chỉ định. Nếu chế độ tương tác đang hoạt động và tham số đường dẫn tệp đĩa đích không được chỉ định thì thao tác mở tệp sẽ không khả dụng. Trả về một giá trị boolean. Sai có nghĩa là người dùng đã chọn hủy thao tác trong hộp thoại lưu tệp tương tác.

Ví dụ về sử dụng phương thức tập tin

// Nhận tệp từ đĩa ở chế độ tương tác // và đặt nó vào bộ lưu trữ tạm thời &Trên quy trình máy khách SelectDiskFileAndWrite()

Tên biến được chọn; Biến địa chỉ lưu trữ tạm thời; Nếu PutFile(TemporaryStorageAddress, SelectedName, True) thì Object.FileName = SelectedName; PlaceObjectFile(Địa chỉ lưu trữ tạm thời); endIf;

Kết thúc thủ tục

// Sao chép tệp từ bộ lưu trữ tạm thời vào một thư mục // thuộc tính, ghi lại một đối tượng, xóa tệp khỏi bộ lưu trữ tạm thời &Trên quy trình máy chủ Đặt tệp đối tượng (Địa chỉ lưu trữ tạm thời)

Phần tử thư mục = Thuộc tính biểu mẫuValue("Object"); Dữ liệu nhị phân = GetFileFromTemporaryStorage(TemporaryStorageAddress); Thư mục Element.File Data = NewValueStorage(BinaryData); FilePathOnDisk = Tệp mới(DirectoryItem.FileName); Mục thư mục.FileName = FilePathOnDisk.Name; Phần tử thư mục.Write(); Đã sửa đổi = Sai; XóaFileFromTemporaryStorage(TemporaryStorageAddress); ValueВFormAttribut(Thành phần thư mục, "Đối tượng");

Kết thúc thủ tục

// Đọc một tập tin từ props và lưu nó // trên đĩa cục bộ ở chế độ tương tác &Trên thủ tục máy khách ReadFileAndSaveToDisk()

Địa chỉ = GetFileAddressInInInformationBase(Object.Link, "FileData"); GetFile(Địa chỉ, Object.FileName, True);

Kết thúc thủ tục

Hỗ trợ địa chỉ trong trường hình ảnh

Điều khiển Trường Ảnh hỗ trợ hiển thị ảnh được chỉ định theo địa chỉ của tệp trong bộ lưu trữ tạm thời hoặc trong cơ sở dữ liệu.

Để thực hiện việc này, bạn phải đặt thuộc tính loại chuỗi trong thuộc tính Dữ liệu của thành phần biểu mẫu. Giá trị của thuộc tính này sẽ được hiểu là địa chỉ của hình ảnh.

Ví dụ // Liên kết trường hình ảnh với địa chỉ hình ảnh trong bộ lưu trữ // tạm thời. Chi tiết biểu mẫu Địa chỉHình ảnh của loại chuỗi

PlaceFile(PictureAddress,True)

Picture.Data = Địa chỉHình ảnh

Hạn chế khi làm việc với Web client

Hoạt động của cơ chế được mô tả khi sử dụng máy khách Web có một số hạn chế. Những hạn chế này có liên quan đến mô hình bảo mật của trình duyệt. Vì vậy, ví dụ, máy khách không thể lưu tệp một cách độc lập vào hệ thống tệp cục bộ, nghĩa là chỉ có phiên bản tương tác của các phương thức máy khách PlaceFile() và GetFile() khả dụng. Một ngoại lệ được đưa ra khi cố gắng sử dụng chế độ không tương tác. Các hộp thoại xuất hiện tương tác dành riêng cho loại trình duyệt của bạn.

Các tính năng khi làm việc với Value Storage trên Client

Vấn đề:

Khi Tài liệu có thuộc tính thuộc loại Lưu trữ Giá trị trong phần dạng bảng, nó sẽ làm chậm việc mở biểu mẫu tài liệu nếu thuộc tính này chứa dữ liệu lớn.

Lý do giả định:

Có lẽ, khi mở một biểu mẫu, không phải liên kết đến dữ liệu nằm trong Kho lưu trữ giá trị được gửi đến khách hàng mà chính là dữ liệu đó.

Giải pháp

  • Trong thuộc tính của thuộc tính bảng của biểu mẫu có cờ "Luôn sử dụng". Nếu được đặt, nội dung của trường luôn được chuyển giữa máy chủ và máy khách - ví dụ: khi mở biểu mẫu. Cờ này phải bị tắt, nhưng điều này phải được tính đến trong mã, vì theo mặc định sẽ không có giá trị nào cho trường này trên máy khách. Một ví dụ có thể được tìm thấy trong 1C:Archive.

Nó thậm chí còn tốt hơn để sử dụng lưu trữ tạm thờiđể truyền tập tin giữa máy khách và máy chủ.

Nền tảng 1C:Doanh nghiệp cung cấp rất nhiều khả năng để lưu trữ các loại dữ liệu khác nhau.

Nhưng thường những cơ hội này là không đủ. Và sau đó một đối tượng đặc biệt đến trợ giúp chúng tôi - Giá trị lưu trữ. Đối tượng này cho phép bạn lưu trữ ở định dạng đặc biệt cả đối tượng 1C:Enterprise tiêu chuẩn, chẳng hạn như bảng giá trị và các đối tượng không chuẩn mà nền tảng không cung cấp loại. Các loại không chuẩn có thể bao gồm các tập tin. Ví dụ: bằng cách sử dụng kho lưu trữ giá trị trong cơ sở dữ liệu 1C, bạn có thể lưu trữ ảnh của nhân viên, bản quét tài liệu, xử lý bên ngoài, v.v. Ưu điểm ở đây là tất cả các đối tượng này đều được lưu trữ trong cơ sở dữ liệu. Theo đó, khi triển khai cơ sở dữ liệu mới từ bản sao lưu, tất cả các đối tượng này cũng sẽ có mặt trong cơ sở dữ liệu mới. Mặt khác, nếu bạn lưu trữ các tệp lớn trong cơ sở dữ liệu, điều này có thể làm tăng đáng kể dung lượng của nó và ảnh hưởng tiêu cực đến hiệu suất của nó. Vì vậy, sự cân bằng hợp lý phải được duy trì ở đây.

Hãy xem xét cách làm việc với kho lưu trữ giá trị bằng một ví dụ. Hãy tạo một thư mục đặc biệt trong bộ cấu hình - hãy gọi nó là Đối tượng bên ngoài, và lần lượt chúng ta sẽ tạo những thứ cần thiết cho thư mục Một đối tượng với loại Giá trị lưu trữ

Và bây giờ chúng ta có thể tạo các phần tử trong thư mục này và trong props Một đối tượng Mỗi phần tử được ghi vào một tập tin.

Làm việc với một cửa hàng giá trị rất đơn giản. Nếu nhìn vào trình trợ giúp cú pháp, chúng ta sẽ thấy đối tượng này chỉ có một phương thức và một hàm tạo.

Bây giờ, để minh họa, hãy viết đoạn mã đơn giản nhất để ghi một tập tin vào props Một đối tượng một thành phần thư mục đã được tạo trước đó, sau đó đọc tệp này từ props và ghi nó vào đĩa, nhưng dưới một tên khác.

&Trên quy trình máy chủ LoadUnloadFile(Thành phần thư mục)Đối tượng thư mục =Thành phần thư mục. GetObject() ; // Đặt hình ảnh vào kho giá trị LabelDownload = Hình ảnh mới("g:\musor\favicon.ico" ) NewValueStorage; //Viết một phần tử thư mụcĐối tượng thư mục. Đối tượng DirectoryObject. Viết() ; // Tải hình ảnh từ kho lưu trữ giá trị lên một tệp FileName = "g:\musor\favicon_1.ico" ; LabelUpload = Đối tượng thư mục. Một đối tượng. Lấy() ; Tải lên nhãn. Viết (Tên tệp) ; Kết thúc thủ tục

Và một vài lời giải thích cho mã.

  • Đối tượng được đặt trực tiếp vào cửa hàng khi cửa hàng được tạo bằng hàm tạo.

Để lưu trữ các loại tệp khác ngoài hình ảnh trong bộ lưu trữ, bạn có thể sử dụng đối tượng Dữ liệu nhị phân. Về mặt lý thuyết, bạn thậm chí có thể lưu trữ các phần tử thư mục, tài liệu, v.v. trong kho giá trị. Nhưng trong thực tế điều này không có ý nghĩa gì cả. Nhưng đôi khi có thể sử dụng kho giá trị để lưu trữ bảng giá trị, cây giá trị và các bộ sưu tập phổ quát khác.

Chúng tôi có một thư mục “Sản phẩm”, trong thuộc tính “Dữ liệu” trong đó thông tin được lưu trữ dưới dạng dữ liệu nhị phân. Bản thân thuộc tính có loại giá trị "Lưu trữ giá trị". Ảnh chụp màn hình sau đây hiển thị cấu trúc siêu dữ liệu thư mục.

Để đính kèm một tệp tùy ý từ đĩa dưới dạng một phần tử, lệnh "Đính kèm tệp" đã được triển khai. Mã chương trình của nó được trình bày trong danh sách sau:

& Trên Thủ tục Khách hàng AttachFile(Command) // Trình xử lý lệnh trên máy khách. Lựa chọn tập tin // Hộp thoại chọn file từ đĩa Chế độ = FileSelectionDialogMode. Khai mạc; OpenFileDialog = NewFileSelectDialog(Chế độ); Hộp thoại OpenFile. FullFileName = " " ; Hộp thoại OpenFile. MultipleSelect = Sai; Hộp thoại OpenFile. Tiêu đề = "Chọn tập tin"; Nếu FileOpenDialog. Select() Sau đó FilePath = FileOpenDialog. Tên tệp đầy đủ; // Nhận dữ liệu tệp nhị phân Dữ liệu nhị phân = Dữ liệu nhị phân mới (PathToFile); // Truyền dữ liệu nhị phân đến máy chủ AttachFileServer(BinaryData); Nếu không thì Text = "ru = " " Tài liệu (s) không được chọn!" " ; vi =" " Tài liệu (s) không được chọn!" " " ; Cảnh báo(NStr(Text) ) ; EndIf ; EndProcedure & Thủ tục OnServer AttachFileServer(BinaryData) // Trình xử lý trên máy chủ để ghi file trong bảo mật thông tin // Chuyển đổi đối tượng biểu mẫu thành đối tượng tham chiếu ObjectCurrent = FormAttributValue("Object" ); // Gán giá trị mới cho thuộc tính "Data"Đối tượng hiện tại. Dữ liệu = NewValueStorage(BinaryData) ; // Lưu thay đổiĐối tượng hiện tại. Viết() ; Kết thúc thủ tục

Nếu chúng ta mô tả thuật toán theo thuật ngữ chung thì trước tiên, một tệp sẽ được chọn từ đĩa trên máy khách. Dữ liệu tệp nhị phân kết quả được gửi đến máy chủ, nơi nó được ghi lại trong cơ sở thông tin, cụ thể là trong thuộc tính “Dữ liệu” của thành phần thư mục hiện tại.

Về nguyên tắc, mọi thứ đều hoạt động. Khi mở một phần tử, chúng ta có thể đọc dữ liệu này nếu cần. Ví dụ: nếu một hình ảnh được lưu trong props thì chúng ta có thể lấy nó và hiển thị nó trong trường biểu mẫu. Giải pháp này có chỗ đứng, nhưng trong hầu hết các tác vụ, việc sử dụng các thuộc tính có loại giá trị “Lưu trữ giá trị” trong các thư mục và tài liệu là không tối ưu. Và đó là lý do tại sao...

Tác động hiệu suất

Hãy chạy một số bài kiểm tra hiệu suất. Các thử nghiệm sẽ sử dụng hai thành phần của thư mục "Sản phẩm", có và không có tệp đính kèm. Kích thước của tệp đính kèm là 5 megabyte.

Tất cả các thử nghiệm đều được thực hiện bằng cách sử dụng quy trình xử lý "GetElement" trong cấu hình thử nghiệm. Bạn có thể tải xuống cấu hình này từ liên kết ở cuối bài viết.

Hãy đo thời gian cần thiết để mở các mục trong thư mục "Sản phẩm". Để mở một phần tử, phương thức ngữ cảnh chung "OpenValue()" được sử dụng, phương thức này được truyền tham chiếu đến phần tử dưới dạng tham số. Hãy đo thời gian mở cửa bằng công cụ đo hiệu suất tiêu chuẩn. Kết quả được trình bày trong ảnh chụp màn hình sau:

Như chúng ta có thể thấy, thời gian để mở một phần tử có file đính kèm lâu hơn gấp 10 lần! Hãy làm một bài kiểm tra khác. Hãy thực thi phương thức "GetObject()" để tham chiếu phần tử danh mục sản phẩm. Bạn có thể xem kết quả kiểm tra trong ảnh chụp màn hình sau.

Sự khác biệt là khá đáng kể. Nhận một phần tử không có tệp đính kèm nhanh hơn 194 lần!

Điều này xảy ra vì phương thức “GetObject()” nhận tất cả dữ liệu từ chi tiết của thành phần thư mục bằng cách tham chiếu. Theo đó, phương thức này không chỉ nhận các giá trị của thuộc tính “Code” và “Name” mà còn nhận được giá trị của thuộc tính “Data”. Nếu nó lưu trữ dữ liệu nhị phân có kích thước 5 megabyte (như trong ví dụ của chúng tôi), thì khi nhận được đối tượng, dữ liệu này sẽ được đặt trong RAM (giống như các chi tiết khác) và sau đó được chuyển sang phía máy khách. Việc nhận dữ liệu từ thuộc tính này sẽ làm tăng thời gian lấy đối tượng phần tử. Nếu sử dụng kênh liên lạc mỏng thì thời gian mở sẽ còn tăng đáng kể hơn do truyền một lượng lớn thông tin qua mạng.

Lưu ý: khi thực thi phương thức "OpenValue()", đối tượng phần tử thư mục trước tiên cũng được lấy, sau đó được chuyển đổi thành đối tượng biểu mẫu và được chuyển đến máy khách (đối với các biểu mẫu được quản lý). Tức là khi một phần tử được mở bằng tham chiếu thì đối tượng đó cũng được lấy ra.

Hãy tiến hành bài kiểm tra cuối cùng về thời gian cần thiết để mở và ghi một mục thư mục có và không có tệp đính kèm. Kết quả được hiển thị trong ảnh chụp màn hình sau.

Kết quả tự nhiên. Thời gian nhận và ghi cho một mục thư mục có tệp đính kèm hóa ra dài hơn ~ 19 lần. Như đã đề cập ở trên, khi nhận được một đối tượng, giá trị của tất cả các chi tiết của nó sẽ được lấy, bao gồm cả thuộc tính “Dữ liệu” trong đó 5 megabyte thông tin được lưu trữ. Khi một phần tử được ghi, lượng dữ liệu này lại được ghi vào cơ sở thông tin. Do đó, việc lưu trữ dữ liệu trong thuộc tính thư mục (hoặc tài liệu) với loại “Lưu trữ giá trị” sẽ ảnh hưởng tiêu cực đến hiệu suất cả khi truy xuất một đối tượng và khi đặt nó vào cơ sở thông tin.

Cách chính xác nhất để giải quyết vấn đề lưu trữ dữ liệu cho các đối tượng cơ sở thông tin là gì?

Giải pháp đúng

Nếu chúng ta xem xét việc triển khai cơ chế này trong các cấu hình điển hình, chúng ta sẽ thấy rằng đối với các đối tượng, thông tin bổ sung được lưu trữ trong một bảng đăng ký thông tin riêng biệt. Ví dụ: đây là cơ chế tệp đính kèm trông như thế nào trong cấu hình tiêu chuẩn của “Quản lý thương mại” phiên bản 11.

Thư mục "Nomenclature" là chủ sở hữu của thư mục "NomenclatureAttachedFiles". Ngược lại, điều này được liên kết với thanh ghi thông tin AttachedFiles, kích thước AttachedFile của nó đề cập đến phần tử của nó. Do đó, dữ liệu gắn liền với các đối tượng cơ sở thông tin thực sự được lưu trữ trong bảng thanh ghi thông tin, hoạt động của bảng này thực tế không bị ảnh hưởng bởi lượng dữ liệu được lưu trữ trong tài nguyên. Thư mục trung gian "Danh pháp các tệp đính kèm" là cần thiết để lưu trữ thông tin bổ sung cho tệp đính kèm, cũng như hỗ trợ truy cập vào tệp đính kèm bằng cách tham chiếu.

Tất cả những điều trên một lần nữa khẳng định tác động to lớn về hiệu suất của cấu trúc siêu dữ liệu cấu hình được thiết kế phù hợp.

Kiểm tra cấu hình với ví dụ từ bài viết: LIÊN KẾT .