Как механизм управления версиями SharePoint сохраняет только изменения в файлах, а не весь файл?

Одна из многих вещей, с которыми SharePoint справляется очень хорошо, заключается в том, что, когда у вас включено управление версиями для файлов, загруженных в библиотеку документов, каждый раз, когда вы сохраняете изменения в файл, он сохраняет только разницу с предыдущей версией файла в базе данных контента, но НЕ весь файл снова.

Я пытаюсь воспроизвести то же поведение с помощью стандартного кода C # либо в папке файловой системы в Windows, либо в поле большого двоичного объекта базы данных SQL. Есть ли у кого-нибудь идеи или указания о том, как SharePoint выполняет это и как это можно сделать за пределами SharePoint?


person Pedram Soheil    schedule 13.02.2020    source источник


Ответы (1)


SharePoint использует технику, называемую «измельчением» данных, чтобы содержать каждое изменение в заданном файле. К сожалению, я не думаю, что вы найдете достаточно технических деталей, чтобы по-настоящему воспроизвести то, что они делают, но вы можете придумать разумное приближение, используя свой собственный дизайн.

При измельчении данные, связанные с файлом, таким как Document.docx, распределяются по набору больших двоичных объектов, связанных с файлом. Каждому независимому BLOB-объекту назначается уникальный идентификатор (смещение), позволяющий производить реконструкцию в правильном порядке по запросу пользователя.

Каждый «клочок» документа хранится в таблице базы данных SQL с именем DocStreams. Каждый BLOB-объект содержит числовой идентификатор, представляющий исходный BLOB-объект при объединении. Когда клиент обновляет файл, обновляется только измельченный большой двоичный объект, соответствующий изменению, причем обновление происходит на сервере базы данных, а не на веб-сервере.

Подробнее о измельчении см.

person willman    schedule 14.02.2020