|
|
|
v8: Хранение больших объемов данных внутри базы данных. | ☑ | ||
|---|---|---|---|---|
|
0
Doomer
21.05.10
✎
11:23
|
Часто возникает такая задача: нужно хранить данные (файлы) привязанные к определенным объектам 1С:Предприятие. Например это обычная задача у алкогольных компаний. Нужно хранить сертификаты, удостоверения качества и т.д. Часто бывает, что нужно хранить фотографии товаров, копии договоров и т.д. Объем этих данных может быть достаточно большим. Возникает вопрос где их хранить. С одной стороны можно хранить внутри БД. Это позволяет делать восьмерка.
Мы сейчас в офисе обсуждаем этот вопрос. Прошу присоединяться. |
|||
|
1
Doomer
21.05.10
✎
11:24
|
Голосовалку не буду прикручивать т.к. нужна именно аргументированная дискуссия.
|
|||
|
2
МихаилМ
21.05.10
✎
11:25
|
подумайте про стратегию резервного копирования - восстановления.
|
|||
|
3
wPa
21.05.10
✎
11:26
|
(0) Сначала будете хранить БД, потом как справочник с ХранилищемЗначения выйдет в топ таблиц по размеру - начнете резать. Имхо - хранить в другой сиквельной базе с запросами из БД.
|
|||
|
4
Doomer
21.05.10
✎
11:27
|
(2) Это одна из проблем, но она легко решается.
Вопрос больше сводиться к тому, зачем нужна большая база где храниться все. |
|||
|
5
GedKo
21.05.10
✎
11:28
|
имхо, проще/надежнее/удобнее - просто хранить на файловом хранилище.
|
|||
|
6
Mitriy
21.05.10
✎
11:29
|
(0) мое имхо: лучше вне базы...
|
|||
|
7
shuhard
21.05.10
✎
11:29
|
(4) без объемов данных и специфики задач топик = пятничный трёп
|
|||
|
8
Doomer
21.05.10
✎
11:29
|
(5) Но возникает проблема обеспечения ссылочной целосности. Кто-то может просто удалить файл или переименовать его. Это тоже решаемо, но определенные трудности в этом есть.
|
|||
|
9
Doomer
21.05.10
✎
11:29
|
(6) Ну давайте возьмем для примера алкогольное предприятие.
|
|||
|
10
Denp
21.05.10
✎
11:31
|
(8) Каким образом?
хранилище файлов должно быть недосягаемо для всех. |
|||
|
11
Mitriy
21.05.10
✎
11:31
|
(7) если Большие объемы из сабжа подразумевают гигабайты всяких картинок и прочей ерунды...
|
|||
|
12
lxs
21.05.10
✎
11:31
|
Поддержу (6), хотя (7) дело говорит. Кто-то фильмы хранит и не жужжит.
|
|||
|
13
GedKo
21.05.10
✎
11:32
|
(8) права доступа чтение/изменение, добавлять - только через программу.
|
|||
|
14
IceSer1
21.05.10
✎
11:33
|
сканы могут быть и метровые, файловый вариант надежнее
|
|||
|
15
IronDemon
21.05.10
✎
11:33
|
Храню на FTP. Файлов сотни тысяч, объем примерно 15 гиг
|
|||
|
16
Doomer
21.05.10
✎
11:34
|
+9 За 2 года работы папка с картинками распухла до 40ГБ.
|
|||
|
17
shuhard
21.05.10
✎
11:35
|
(16) ответ очевиден
хранить 40 Гб внутри 1С нельзя |
|||
|
18
Doomer
21.05.10
✎
11:35
|
+16 Например сейчас столкнулись с такой проблемой. Периодически по сети не удается достучаться до нужной картинки и она не печатается. Удалили часть картинок - проблема пропала.
|
|||
|
19
lxs
21.05.10
✎
11:38
|
(15) по-моему, один из самых оптимальных вариантов
|
|||
|
20
Doomer
21.05.10
✎
11:40
|
А, чем плохо хранение файлов в СУБД?
|
|||
|
21
Doomer
21.05.10
✎
11:40
|
+20 Тем более восьмерка это легко позволяет сделать.
|
|||
|
22
Ахиллес
21.05.10
✎
11:41
|
(17) Почему? Естественно в скульной базе, а не в файловой.
|
|||
|
23
IronDemon
21.05.10
✎
11:42
|
Наврал. Файлов 282 932, размер 71,7 Гб :)
|
|||
|
24
Шляпентох
21.05.10
✎
11:42
|
(20) SQL Server'у, по идее, по фигу - будет хранить. Но вы увеличите на 40 Гб размер бэкапа, а значит и время восстановления, в случае сбоя, существенно увеличится.
|
|||
|
25
lxs
21.05.10
✎
11:42
|
(20) подумай хотя бы о том, сколько времени займет создание ежедневного бэкапа, или восстановление.. реиндекс.. нахера этот гемор?
|
|||
|
26
Mitriy
21.05.10
✎
11:42
|
(21) тяжко поддерживать + хранилище в 1С - вещь в себе...
|
|||
|
27
lxs
21.05.10
✎
11:43
|
+(25) потом эти бэкапы нужно где-то хранить.. у тебя достаточно ресурсов для такой задачи?
|
|||
|
28
Ахиллес
21.05.10
✎
11:43
|
(24) Проблемы индейцев шерифа не волнуют. Есть повод пойти к генералу и выбить новый сервак под это дело. Заодно и свой домашний комп обновить :-)
|
|||
|
29
Mitriy
21.05.10
✎
11:44
|
(28) звоню твоему шефу...
|
|||
|
30
H A D G E H O G s
21.05.10
✎
11:44
|
Хранить в БД.
80 гектаров на прошлой работе было, большинство - сканы сертификатов по алкоголю. Полет нормальнный. |
|||
|
31
GinGer
21.05.10
✎
11:45
|
Мы отдельную таблицу в SQL сделали (база SQLная), туда все запросами посылаем. А так было ХранилищеДанных (но уж очень большое стало).
|
|||
|
32
GedKo
21.05.10
✎
11:45
|
а смысл гонять туда-сюда через 1с/sql большие файлы?
|
|||
|
33
mikecool
21.05.10
✎
11:45
|
насколько помнится - работали под ораклом, там все хранилось в базе - и как то и бекапы создавались...
|
|||
|
34
Ахиллес
21.05.10
✎
11:46
|
(29) А куда он денется? У алкоголиков учет строгий. Можно налететь на куда большие санкции, чем стоимость нового сервака.
|
|||
|
35
Valerik0101
21.05.10
✎
11:46
|
Аналогичную задачу сейчас решаю.
В базе на данный момент более 4 Гб файлов. Решил выгрузить их в каталог, и очистить хранилище, а в базе ссылки хранить. Обработка вроде не сложная но пока не продумал как хранить. Наверное по УИДу... Вопрос по теме: можно-ли узнать объем конкретно файла в хранилище? |
|||
|
36
IronDemon
21.05.10
✎
11:47
|
(35) В http://www.kb.mista.ru/ статья есть
|
|||
|
37
Ахиллес
21.05.10
✎
11:48
|
Но идея хранить на фтп мне тоже нравится.
|
|||
|
38
IronDemon
21.05.10
✎
11:48
|
(35) У меня файлы имеют вид "00181625-4a2d-11dc-ab96-0004234739b4_#20080314181226.jpg"
|
|||
|
39
Valerik0101
21.05.10
✎
11:49
|
(36)Сейчас поищем. спасибо.
|
|||
|
40
Ахиллес
21.05.10
✎
11:50
|
(38) А новые файлы как на ФТП загружаешь? Через 1С? Какого рода файлы и к каким документам, справочникам привязаны?
|
|||
|
41
shuhard
21.05.10
✎
11:50
|
(20) [А, чем плохо хранение файлов в СУБД?]
деньгами для sql нужен быстрый рэйд и полный бэкап для картинок не нужен рэйд и достаточен инкрементный бэкап |
|||
|
42
Шляпентох
21.05.10
✎
11:52
|
(33) Дело не в том, что бэкапы не будут создаваться, а в том, что размер и время создания\восстановления существенно вырастут
|
|||
|
43
Valerik0101
21.05.10
✎
11:52
|
(38)Это существующие файлы могу сохранить так (но у меня необходимо чтоб открыть можно было только из 1С)
А с новыми, который пользователь добавляет в базу? |
|||
|
44
IronDemon
21.05.10
✎
11:54
|
(40) Через 1С. Каждый нужный объект метаданных имеет свою папку. В ХранилищеДополнительнойИнформации добавил ВнешнееИмяФайла-строка и ВнешнееХранение-булево
|
|||
|
45
IronDemon
21.05.10
✎
11:55
|
(43) Пару-пятерку процедур изменить
|
|||
|
46
Ахиллес
21.05.10
✎
11:55
|
(44) Загружаешь в 1С и тут же выгружаешь на фтп, а из 1С удаляешь?
|
|||
|
47
strange2007
21.05.10
✎
11:56
|
И я свои 5 копеек, т.к. пробовал много вариантов:
Если дв.данных много, тогда крайне не рекомендуется хранить совместно с 1Ц в одной базе. Причина - архивация. Проблема не в размерах, а в стратегии архивации. 1С надо делать 2-3 раза в день архив по изменениям с циклом, например месячным. Картинки надо архивировать только измененные и достаточно раз в пол.года (бумажные же копии то все равно есть). Если все делать раздельно, то можно разнести по разным серверам, по времени развести регламентные обработки и т.д. и т.п. Есть одна крайне неприятная черта - в распределёнке придется городить огород с репликациями SQL, но это уже другой вопрос В файловом варианте хранить нельзя! Из-за низкой надежности, низкой скорости доступа и низкой скорости поиска. Если бы это утверждение было бы не верным, то 1С-ку ни кто не переводил бы на SQL при больших объемах. В общем мое мнение хранить в отдельной MS SQL или PostgreSQL базе (у нас в МС-е сейчас хранится) |
|||
|
48
IronDemon
21.05.10
✎
11:56
|
(46) Нет. Выбранный пользователем файл сразу отправляется на ftp
|
|||
|
49
Ахиллес
21.05.10
✎
11:58
|
а такие "00181625-4a2d-11dc-ab96-0004234739b4_#20080314181226.jpg" имена файлов как получаются? Юзеры файлы обычно так не называют файлы.
|
|||
|
50
IronDemon
21.05.10
✎
11:58
|
// функция получает имя файла для хранения
Функция ПолучитьВнешнееИмяФайла(Ссылка, ПолноеИмяФайла) Экспорт ИмяФайла = ПолучитьТолькоИмяФайла(ПолноеИмяФайла); ВнешнееИмяФайла = Строка(Ссылка.УникальныйИдентификатор())+"_#"+Формат(ТекущаяДата(),"ДФ=ггггММддЧЧммсс")+"."+ПолучитьРасширениеФайла(ИмяФайла); Возврат ВнешнееИмяФайла; КонецФункции |
|||
|
51
lxs
21.05.10
✎
11:59
|
(49) ну че тупишь-то?
(Строка(Новый УникальныйИдентификатор) + "_#"+Формат(...)).. (50) ;) |
|||
|
52
IronDemon
21.05.10
✎
12:00
|
(51) Ты знал :D
|
|||
|
53
lxs
21.05.10
✎
12:03
|
(52) )) так же периодически извращаюсь с выгружаемыми файлами, думать приходится меньше над тем, как назвать))
|
|||
|
54
dervishsy
21.05.10
✎
12:23
|
Файловый вариант(или ftp) позволяет так же работать с теми же файлами сторонним приложениям. Я считаю что чем больше универсальность решения при одинаковой скорости работы тем лучше.
|
|||
|
55
strange2007
21.05.10
✎
12:29
|
(54) большими объемами труднее рулить. Скорость ниже. Надёжность ниже. Соответственно денег на поддержание больше. Проходили не раз.
Мои все хранилища поддерживают хранение минимум внутреннее, файловое и ФТП. Последнее самое медленное, время тратится на установку соединения! |
|||
|
56
IronDemon
21.05.10
✎
12:48
|
А мы не спешим. 150 миллисекунд или 40 миллисекунд, без разницы :)
|
|||
|
57
strange2007
21.05.10
✎
12:54
|
(56) Не знаю, некоторые сервера дольше отвечают. Мы пробовали по всякому и на SQL-е только плюсы. Если минусов нет, тогда зачем городить огород? Может я не знаю чего-то?
|
|||
|
58
wt
21.05.10
✎
12:58
|
Хранить в БД. Храним конструкторскую документацию, сканы. Немеряно.
|
|||
|
59
wt
21.05.10
✎
13:00
|
(47) Полностью согласен.
|
|||
|
60
Valerik0101
21.05.10
✎
13:11
|
(58) А обновляться? А архив сколько по времени делается?
Скорость не важна (редко файлы открывают), поиск не нужен, безопасность - просто каталог куда доступ только у 1С, конфигурация не типовая - часто меняется. Считаю что все же целесообразнее хранить не в базе файлы при таких требованиях. |
|||
|
61
strange2007
21.05.10
✎
13:25
|
(60) Так какие плюсы перед отдельной БД? Хорошо, можно и с другой стороны: В типовых конфах (особенно на 77) часто фаловый вариант и точка, доработчики и прочие последователи по накатанной используют сторонний опыт. Я прав? Или другая причина? Вообще, по трудозатратам и так и так одинаково получается. Хотя в файловом варианте немного больше, ведь надо предусмотреть то, что в БД уже есть (сохранность, контроль, распределёнка, расположение с точки зрения хранения и т.д.). Теперь давно мучавший меня вопрос, если файловый вариант сложнее и не выгоднее, тогда какой плюс?
... Зацепился я сейчас за тему только по тому, что надо внедрять клиенту хранение дв.данных. Сделал что-бы можно было хранить где угодно, настройки делаю под СКЛ, за что беру деньги. Так вот если я не прав, то может лучше остановиться сразу? |
|||
|
62
Valerik0101
21.05.10
✎
13:51
|
(61) Файловый вариант в каком смысле?
У меня так - база на сервере. Файлы будут отдельно хранятся в сети, ввиду не высоких требований и редкому к ним обращению, и желанию повысить скорость работы с БД (архивация, обновление...) Сейчас архив базы = 4,3 Гб. Архив базы без файлов = 50 Мб. Считаю что в моем случае целесообразно хранить отдельно |
|||
|
63
Sammo
21.05.10
✎
13:57
|
Имхо, есть неразбериха в понятии "хранить в базе" - хранить в значениях типа хранилище значений или в SQL базе, но не в таблицах 1с (отдельная SQL-таблица).
|
|||
|
64
strange2007
21.05.10
✎
14:01
|
(62) Да, наверное я не так выразился. Дв.данные предлагаю хранить именно в отдельной от 1С БД. Ни в коем случае не совместно! Если совместно, то в хранилище значений и на малых объёмах.
При чем мне понравилось, когда 1С в любом виде (файловая MC SQL или PostgreSQL) и дв. данные тоже в любом виде, в зависимости от настроек, условий и команд |
|||
|
65
Doomer
модератор
25.05.10
✎
09:24
|
Вопрос, тем кто использует отдельную СУБД или ftp для хранения картинок. Как у вас организован процесс извлечения файла для печати? По моему его нужно будет где-то на время сохранить, для печати?
|
|||
|
66
Doomer
25.05.10
✎
10:37
|
Поднимем ветку
|
|||
|
67
Speshuric
25.05.10
✎
13:02
|
Тезисно:
1. Если БД 1С фаловая или postgres (да и бесплатная DB2), то файлы однозначно отдельно. 2. Если файлы 2-3 МБ и более занимают не более 20-30% объёма, то стоит использовать регистры сведений (или справочники) с реквизитом - хранилищем значения. 3. Если объектов более 200000, то их имеет смысл хранить в БД - файлопомойки тут начинают грустить. Плюсы хранения в БД: 1. Транзакционность работы и целостность данных обеспечить на порядок проще. 2. Бэкапы (целостные) делать на порядок проще. Т.е. (55) неправ - надёжность выше. 3. Логи изменений автоматом формирует журнал регистрации (кто и когда правил объект). 4. Не нужно изобретать общедоступное хранилище по сети или специальный набор серверных функций для получения данных. Нет проблем с репликацией. 5. Обработка данных на сервере предприятия очень быстра (т.к. канал до СУБД обычно очень хороший). 6. Можно нарулить права на уровне конфигурации 1С (а не файлового доступа) Минусы: 1. Для файлов начиная с 3 МБ затраты сервера предприятия и СУБД на передачу данных и достаточно велики. 2. От 10-20 МБ возникает еще и вопрос прожорливости по памяти. 3. Невозможность потоковой работы с данными одного объекта (приходится целиком считать, потом записать, потом последовательно читать с локального диска - бр-р-р) 4. Для файлов сканированных документов (часто фармацевтика, алкоголь) проще организовать быструю и эффективную печать с сервера предприятия больших порций макулатуры, чем с СУБД передавать на сервер предприятия, потом на клиента, потом на диск (временный файл), потом с диска в память, потом на сетевой принтер. 5. Лог транзакций при больших объёмах записи файлов записывается гораздо интенсивнее. Если задача хранить кучу картинок 50-1000 КБ и показывать их юзерам, то однозначно в СУБД 1С. Если на каждую реализацию надо распечатать 20-50 сканов сертификатов, каждый по 10 МБ, то пожалуй придётся работать с файлами или создавать отдельную СУБД не 1С (в MS SQL 2008 есть специальный механизм - FILESTREAM: http://msdn.microsoft.com/ru-ru/library/bb933993(SQL.105).aspx ). Каждой задаче - своё решение. |
|||
|
68
Speshuric
25.05.10
✎
13:12
|
(55) - сорри неправильно понял. Надёжность хранения в ИБ - ВЫШЕ :)
|
|||
|
69
Stim
25.05.10
✎
13:14
|
Я бы завел вторую базы непосредственно для хранения данных больших объемов, с обращением по оле по внутреннему идентификатору. Как вариант просто
|
|||
|
70
Широкий
25.05.10
✎
13:19
|
У нас как раз алкогольная компания - соответственно вагон сканов сертификатов.. База скульная и храним в отдельном справочники.
Периодически делам подрезку образов - выгружаем устаревшие сертификаты в отдельную базу , при необходимости загружаем из нее в рабочую. Сейчас образов гигов на 60 |
|||
|
71
DEVIce
25.05.10
✎
13:25
|
(11). И че? Гигабайты - это какая-то существенная проблема для современной СУБД?
(0). Почему бы и не хранить в БД, в случае с v8 в хранилище? Сильно больше места чем при файловом варианте не будет занимать. Ссылочная целостность и удобный быстрый поиск нужных данных обеспечивается. Картинки на самом деле занимают не так уж много места, особенно если не фотографировать товар с полным разрешением камеры (такое качество нафиг не нужно). |
|||
|
72
DEVIce
25.05.10
✎
13:28
|
(41). Точно для картинок не нужен бэкап, а если пропадут на файловом хранилище, как восстанавливать будут? Заново сканить и фотографировать?
|
|||
|
73
Сисой
25.05.10
✎
13:31
|
В 7.7 я хранил счета, договоры в файлах, в 8-ке - внутри базы 1С.
Доработка типовой была минимальной - поставил ограничитель (константу) на максимальный размер загружаемого файла (чтобы мультики в БД не заливали). В принципе, удобно. Более того, я знаю конфы, где в БД сохраняются pdf всех ранее распечатанных клиентам документов (чтобы изменения в НСИ не влияли на документы). Тоже работает при разумном анализе места. Но наиболее разумный способ, безусловно - хранение картинок во внешней БД. |
|||
|
74
Doomer
25.05.10
✎
13:32
|
(70) ну а промежуточные файлы создаете перед печатью?
|
|||
|
75
vde69
25.05.10
✎
13:37
|
я сейчас реализую следующую технологию
делаю узел "архив", в него по обработке "сдать в архив" перемещаются файлы, в регистре ставится пометрка ID узла и данные удаляются. при запросе пользователя создается рег задание на получение из архива и в течении часа пользователь получает закрытые файлы |
|||
|
76
Широкий
25.05.10
✎
13:42
|
(74) Зачем? Картинки хранятся же в базе.
Вторая база это архив - в ней только старые изображения |
|||
|
77
Doomer
25.05.10
✎
13:45
|
(75) Я имею в виду когда данные хранятся в СУБД. Файл нужно извлечь из СУБД сохранить в файл, а потом напечатать.
|
|||
|
78
Широкий
25.05.10
✎
13:48
|
(77) Нафига? Достаем из хранилища картинку и пихаем ее в макет
|
|||
|
79
Doomer
25.05.10
✎
13:52
|
(78) Я про 7.7 сейчас говорю. Пардон, забыл указать.
|
|||
|
80
Широкий
25.05.10
✎
13:56
|
аа.. 7.7 намного проще в файлах хранить.. не в субд
|
|||
|
81
Doomer
25.05.10
✎
14:13
|
(80) Что проще это понятно. Я сейчас модернизирую существующию систему. Хочу перевести ее на работу с СУБД.
|
|||
|
82
H A D G E H O G s
25.05.10
✎
14:15
|
(41) Чем плох инкрементный бэкап для базы?
|
|||
|
83
notton
28.05.10
✎
12:38
|
(0) лучше файловый на ssd, печать, если возможно, сразу без предварительного просмотра
|
|||
|
84
notton
28.05.10
✎
12:40
|
(83) это если все в терминале сидят
|
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |