Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 копирование больших данных VarBinary (max) FileStream из таблицы в таблицу  [new]
WAPO
Member

Откуда:
Сообщений: 13
Постановка задачи.
Есть две таблицы с полями:
таблица1 source:
[ID] [uniqueidentifier] ROWGUIDCOL NOT NULL,
[content] [varbinary](max) FILESTREAM NOT NULL
таблица2 receiver
[ID] [uniqueidentifier] ROWGUIDCOL NOT NULL,
[content] [varbinary](max) FILESTREAM NOT NULL

В таблице1 есть файлы длиной больше максимального допустимой длины varbinary(max) 2147483647 байтов.
Как лучше копировать такие данные из таблицы1 в таблицу2?

прикрепляю сценарий создания этой тестовой базы

К сообщению приложен файл (dbtest.sql - 3Kb) cкачать
6 май 11, 12:26    [10616038]     Ответить | Цитировать Сообщить модератору
 Re: копирование больших данных VarBinary (max) FileStream из таблицы в таблицу  [new]
BlackEric
Member

Откуда:
Сообщений: 758
WAPO,

По кускам?
Using Large-Value Data Types
6 май 11, 13:20    [10616529]     Ответить | Цитировать Сообщить модератору
 Re: копирование больших данных VarBinary (max) FileStream из таблицы в таблицу  [new]
WAPO
Member

Откуда:
Сообщений: 13
BlackEric
WAPO,
По кускам?

Нет, меня интересует лишь скорость выполнения.

Я провел некие замеры, предварительно записав в таблицу1 5 одинаковых файлов длиной 5 060 493 312 байт
Выполнение команды:
insert into receiver
select top 5 newid(),content
from source
у меня заняло 10 минут 57 секунд.

Туже самую операцию в Windows 7 через проводник: 10 минут 20 секунд.

На этом вопрос снимается :-)
6 май 11, 14:06    [10616966]     Ответить | Цитировать Сообщить модератору
 Re: копирование больших данных VarBinary (max) FileStream из таблицы в таблицу  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
Вам реально надо сделать дублирование данных, а не просто перенести? (что делается мгновенно независимо от размера)
Интересно, а для какой задачи такое понадобилось?
6 май 11, 21:57    [10619607]     Ответить | Цитировать Сообщить модератору
 Re: копирование больших данных VarBinary (max) FileStream из таблицы в таблицу  [new]
WAPO
Member

Откуда:
Сообщений: 13
Mnior
Вам реально надо сделать дублирование данных, а не просто перенести? (что делается мгновенно независимо от размера)
Интересно, а для какой задачи такое понадобилось?

Да требуется именно дублирование.
А требуется мне это для ветвления версий. Данные могут редактироваться, а клиент будет видеть только зафиксированные версии.
Причем каждый пользователь видит именно ту версию файла, с которой он работает.

автор
не просто перенести

Задумался. А действительно, просто для интереса, как это можно реализовать?
6 май 11, 22:42    [10619755]     Ответить | Цитировать Сообщить модератору
 Re: копирование больших данных VarBinary (max) FileStream из таблицы в таблицу  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
WAPO
автор
не просто перенести
А действительно, просто для интереса, как это можно реализовать?
Мене такое не надо было, но сразу резануло глаза.
Фактически нужно переименовать файлик. А может даже тупо перенести GUID из одной таблы в другую. Но средства SQL (как я понимаю) не позволяют этого. Так?

Но нагуглил это: http://blogs.msdn.com/b/sriramg/archive/2010/06/03/moving-filestream-data-to-new-location.aspx (и пункт 4 наводит на мысль)

WAPO
Да требуется именно дублирование.
А требуется мне это для ветвления версий.
Т.е. делается копия а потом напрямую меняется файл? А то если пере-заливается сверху, то нет смысла.

Вы меня на ещё одну мысль наткнули - снапшоты. Как вы знаете, создав снапшот файлу он не копируется, а пишутся толко изменения. Т.о. вы могли бы сэкономить на сторадже при версионности.
Только уверен что не прокатит (хотя всё может быть), т.к. не уверен в поддержке move для снапшотов.
7 май 11, 00:06    [10619973]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить