|
Хранение документов в отдельной базе | ☑ | ||
---|---|---|---|---|
0
Falex
14.04.17
✎
21:10
|
Здравствуйте.
Есть задача хранить документы по каждому контрагенту в отдельных базах данных. В рабочей базе где проводится работа с контрагентами файлы к контрагенту могут добавляться, а также открываться для изменения из базы данных, соответствующей контрагенту, и повторно перезаписывать в базу данных. Как лучше организовать такое хранение и сопоставление? Через внешние источники данных? ЗЫ: пользователю на выбор для каждого контрагента будет даваться право где хранить данные: в отдельной базе данных или на компьютере (в папке). |
|||
1
Волшебник
модератор
14.04.17
✎
21:13
|
Беги оттуда
|
|||
2
Falex
14.04.17
✎
21:20
|
Почему? Объем документов большой, поэтому, есть такая идея.
|
|||
3
vfire1000
14.04.17
✎
22:12
|
Делай вьюшку на другую базу. Только с точки зрения лицензионной политики 1С это айяйяй )
|
|||
4
vde69
14.04.17
✎
22:14
|
читай про интеграцию документооборота...
например в УХ это реализовано... |
|||
5
RomanYS
14.04.17
✎
23:43
|
Речь я так понимаю про файловое хранилище. Тут два варианта: хранить в базе или на диске сервера. У этих вариантов свои плюсы и минусы, но разница только в части администрирования. Смысл хранить файлы в другой базе(особенно если это 1с) не понимаю. Если мы конечно не говорим про системы типа ДО со своим самостоятельным функционалом.
(0)Зачем всё это? |
|||
6
Волшебник
модератор
15.04.17
✎
00:11
|
Зачем всё это? Кто платит за весь этот банкет?
|
|||
7
Лефмихалыч
15.04.17
✎
08:20
|
(0) В этой отдельной базе делаешь вебсервис, к которому будет обращаться твоя основная база. Вебсервис принимает файлы на хранение и выдает файлы по запросу. В основной базе на некий период лучше кешировать.
(6) Да мало ли. Например, чтобы обновление конфигурации основной базы не зависело от количество картинок в базе. Требования к резерезвному копированию данных и картинок этих могут быть разными. Много вариантов. |
|||
8
Лефмихалыч
15.04.17
✎
08:24
|
Да еще лучше так.
Пользователь прикрепляет файлы к объектам БД и они хранятся, как принято, в справочнике. Потом регламентное раз в Х часов проходит по справочнику и: 1. Передает через вебсервис в отдельную базу всё, чего в отдельной базе нет, и то, что изменилось с последней передачи 2. Удаляет все файлы, срок хранения которых во временном кэше истек. 3. Когда польователь обращается к файлу, сначала поиск производится в локальном кэше и, если там пусто, делается запрос к вебсервису. |
|||
9
Jump
15.04.17
✎
09:47
|
(0) Документы проще, удобнее и дешевле хранить на файловой системе.
Файловая система - самая лучшая БД для документов. |
|||
10
Falex
15.04.17
✎
10:05
|
Файловая это конечно проще всех. Но как производить поиск в нем? Например, файлы будут прикрепляться не к договору,а документам. Как тогда найти на сервере файлы именно этого документа?
|
|||
11
Falex
15.04.17
✎
10:07
|
УХ в интеграции документоборота - это что?
|
|||
12
RomanYS
15.04.17
✎
11:23
|
(10) с точки зрения пользователя отличий никаких, просто вместо реквизита с типом ХЗ у тебя строка с адресом файла на диске.
(8) Клёвый мопед, приведи хоть один плюс по сравнению с хранением на диске. Интеграцию с третьими системами не рассматриваем. |
|||
13
Jump
15.04.17
✎
18:49
|
(10) Точно так же как и в базе.
У вас же в базе будет хранится путь к этому документу. Допустим они хранятся у вас в базе - вы каким то образом найдете тот документ который вам нужен и прочитаете его из базы. Если они будут храниться в ФС - вы точно так же найдете документ который вам нужен и прочитаете из базы, только не сам документ, а путь к нему. Вот и вся разница в поиске. |
|||
14
Jump
15.04.17
✎
18:58
|
Фишка в том что документ по своей сути это файл.
А файловая система это как раз самая удобная и продуманная база данных для хранения файлов. А вот база 1с, и база SQL не самые оптимальные вещи для этого. В итоге если вы храните файлы в ФС у вас не распухает база, меньше требования к железу, удобней все это дело бэкапить. |
|||
15
mehfk
15.04.17
✎
19:03
|
(14) А еще MS SQL начиная с определенной версии умеет FileStream.
|
|||
16
mehfk
15.04.17
✎
19:03
|
(14) А еще MS SQL начиная с определенной версии умеет File Stream.
|
|||
17
vcv
15.04.17
✎
19:14
|
> А файловая система это как раз самая удобная и продуманная база данных для хранения файлов.
Смотря какие файлы, размеры и количества. По крайней мере на винде разница в скорости обращения к каталогу с <1000 файлов и >100000 файлов просто драматическая. А для SQL что тысяча, что миллион - нормально тянет. |
|||
18
Jump
16.04.17
✎
06:15
|
(17) А в чем драматизм папки с 100000файлов?
Не замечал. Раньше да, было такое - такую папку проводник мог час открывать, особенно когда оперативки мало. Сейчас проводник открывает папку моментально. Если прямой доступ к файлу из скрипта - разницы нет что 1 файл в папке, что 100000. Ну по крайней мере в ntfs так. |
|||
19
Falex
16.04.17
✎
09:18
|
Если брать по масштабам, то для каждого ключа "Контрагент-Проект" может быть до 10Гб файлов.
Если же все же использовать SQL базы для хранения этих файлов, то как лучше быть на платформе 8.3 если для каждого ключа "Контрагент-Проект" создавать свою базу? Пользоваться внешними источниками данных или без них? Будет ли преимущество? |
|||
20
Jump
16.04.17
✎
09:20
|
(19) Что за файлы? Тип, размер? Общий объем который планируется?
|
|||
21
vcv
16.04.17
✎
09:33
|
(18) Проводник?!? :) Вы, наверное, из тех айтишников, которые замеряют скорость дисковой подсистемы на сервере пару раз скопировав файл в ФАРе?
Проводник не показатель, нужно измерять реальные процессы. У меня когда-то на сервере с рэйдом и приличными дисками с нагрузкой порядка 150 пользователей чтение папки ~60000 файлов с помощью rsync для синхронизации занимало несколько минут. |
|||
22
Лефмихалыч
16.04.17
✎
09:45
|
(12) с какой радости я тебе должен какие-то примеры приводить? Я ответил на вопрос автора, как сабж лучше сделать. Зачем он автору, я понятия не имею. Но имею в опыте ситуацию, когда такой велосипед был необходим. И нет, ни какой скорости он, естественно, не добавляет и пользовательский экспириенс не улучшает. Это делается для технических или безопасных целей чаще всего.
|
|||
23
Jump
16.04.17
✎
11:58
|
(21) Поясню для непонятливых - вы говорите что скорость обращения к файлам в папке с множеством файлов низкая.
Так вот - нихрена подобного. Она высокая. Низкая она была раньше - в проводнике, ибо проводник прожевать не мог такой вывод. А прямой доступ - высокий всегда. Сейчас даже проводник моментально прожеввывает такие папки. |
|||
24
Jump
16.04.17
✎
12:03
|
Вот сейчас проверял - создал папку с миллионом файлов размером 4к и попробовал скопировать из нее сотню файлов
Потом попробовал скопировать сотню файлов из папки где всего сто файлов - скорость копирования такая же (в пределах погрешности) |
|||
25
marvak
16.04.17
✎
12:07
|
(0)
Хранение документов на диске - используется многими и давно и успешно. Единственный момент, чтобы в случае работы с копией базы, том, где хранятся документы, не уничтожили и не испортили документы. То есть нужен какой-то предохранитель Я недавно допиливал одну базу, пользовался как основой вот этой статьей. http://catalog.mista.ru/public/529067/ Там правда для обычных форм. |
|||
26
Jump
16.04.17
✎
12:17
|
(25) Ну обычно на сервере где продакшен крутится с тестовыми не работают.
Если работают - монтировать папку симлинком с ID базы например. |
|||
27
vde69
16.04.17
✎
12:17
|
(11)
УХ - 1с:Управление холдингом в нем предусмотрена интеграция с 1с:Документооборот в плане хранения файлов |
|||
28
Falex
16.04.17
✎
12:44
|
"Что за файлы? Тип, размер? Общий объем который планируется?": word, excel, отсканированные документы.
Проектов в год порядка 200 штук. На каждый проект порядка 10 Гб файлов - файлов очень много может быть. Еще такой момент: если каждый проект нужно сопоставлять с данными файла (название, идентификатор, еще какие-нибудь параметры), то лучше хранить эту информацию в подчиненном справочнике или связывать через регистр сведений? Однако, если в проекте планируется хранение файлов в виде иерархической структуры (т.к. файлом может быть много, то лучше папки под них создавать), то получится ли хранить через регистр сведений? |
|||
29
vcv
16.04.17
✎
12:59
|
(23)
>> Поясню для непонятливых - вы говорите что скорость обращения к файлам в папке с множеством файлов низкая. Я говорю "разница в скорости обращения к каталогу...". Где вы видите слово "файлы"? И описываю рабочий кейс: синхронизация каталогов с помощью rsync. Такой сценарий работы подразумевает большое количество чтений содержимого каталога и малое - файлов. >> Низкая она была раньше - в проводнике А раньше, это когда? А где ТС описал свою инфраструктуру? Может быть у него легаси на NT4. >> А прямой доступ - высокий всегда. У вас есть информация о том, как у ТС организован доступ к файлам? Может быть по сети, тогда ваш "прямой доступ" мимо кассы. |
|||
30
Beuenj
16.04.17
✎
13:01
|
(21)Не обязательно все хранить в одном. Раскидывай по подпапкам разделяя их по количеству, дате или любому другому признаку, который позволит +- равномерно размазать файлы по подпапкам. И нет проблемы.
|
|||
31
Jump
16.04.17
✎
14:09
|
(29) А зачем к каталогу обращаться?
Обычное хранение - к документу в базе 1с привязываются например сканы первички в pdf. Потом их нужно будет выдергивать оттуда. Просто запись файла в каталог, и чтение файла из каталога. Выполняется одинаково быстро вне зависимости от количества файлов в каталоге. (ну по крайней мере до миллиона точно никаких проблем) Предполагается что инфраструктура современная от winserv2008 и выше, музейные экспонаты двадцатилетней давности не рассматриваю. По сети или не по сети - пофиг. |
|||
32
Jump
16.04.17
✎
14:13
|
(30) Ну по дате не лучший способ.
Самое удобное - при сохранении файла считается его хэш. Имя файла - хэш файла. Т.е в базе хранится путь к каталогу где хранятся файлы, и хэши файлов. Если надо по папкам то делается один-два уровня иерархии по первым символам хэша. |
|||
33
vde69
16.04.17
✎
14:47
|
(31) если запись в ОДНОМ каталоге - то лям файлов завалят любой сервак...
уже поле 20 тысяч файлов заметны проблемы, 100 тыс файлов валят вполне приличный сервер... по этому по любому нужно делать каталоги... я в свое время писал ТЗ на подобную систему, в кратце 1. каталоги по годам 2. внутри каталогов по годам каталоги по функциональным направлениям (например юридические, и бух хранятся отдельно) 3. при большом количестве файлов нужно дробить еще глубже... |
|||
34
vde69
16.04.17
✎
14:49
|
ну и еще замечание - ОБЯЗАТЕЛЬНО нужно ограничивать размер файлов...
стандартный скан А4 влезает в 300кб, по этому я ставлю ограничение 500кб на картинки и файлы, а на зипы 5 мегов... |
|||
35
Jump
16.04.17
✎
15:17
|
(33)Завалит в каком смысле?
Случайное чтение будет медленно идти, при множественных запросах к файлам? Так обычно прикрепленные файлы это статика - они больше хранятся чем используются. |
|||
36
Лефмихалыч
16.04.17
✎
15:45
|
По поводу максимального количества файлов в каталоге и его влияния на производительность.
Проще применить решение, автоматически распределяющее файлы по разным каталогам, чем сидеть и ждать подтверждения, что в 21м веке может случиться то же самое, что случалось в 20м. Это как руки мыть после туалета. Если этого не делать, то в большинстве случаев ни чего тебе не будет. Но, когда будет, ты сразу поймешь, что риск был бессмысленный, однако будет уже поздно. |
|||
37
Лефмихалыч
16.04.17
✎
15:47
|
Это все равно, что говорить: "Best practices - гогно потому, что я не встречал случаев, когда не следование им приводило к негативным последствиям". Когда встретишь, поздно будет что-то менять
|
|||
38
Jump
16.04.17
✎
15:55
|
(36) Дык потестить можно какая там предполагаемая нагрузка будет.
$array = New-Object -TypeName Byte[] -ArgumentList 4kb $obj = New-Object -TypeName System.Random $obj.NextBytes($array) for ($i=1; $i -le 1000000; $i++) { Set-Content -Path F:\test\File$i.txt -Value $array -Encoding Byte } Ну и потом выборку нужную сделать и замерить время. |
|||
39
Лефмихалыч
16.04.17
✎
15:59
|
(38) к (37) надо что-то еще добавлять разве?
все эти твои тесты не будут стоить ни черта, когда продуктивная инфраструктура изменится относительно тестовой. Переедет в дудущем вся эта халабуда на другую какую-то СДХ или/и ОС и выяснится, что количество таки имеет значение. Что ты будешь с тестами своими делать? Вопрос риторический. |
|||
40
Лефмихалыч
16.04.17
✎
15:59
|
СХД, а не СДХ
|
|||
41
Fragster
гуру
16.04.17
✎
16:48
|
что, про стандартный функционал БСП действительно никто не знает?
|
|||
42
Jump
16.04.17
✎
17:18
|
(39) Ну разбивку по папкам как я уже говорил сделать не трудно.
Делается по первым буквам хэша. И распределяется равномерно и поиск шустрее, и по дискам раскидать можно, ежели объем большой. |
|||
43
Falex
16.04.17
✎
18:50
|
"что, про стандартный функционал БСП действительно никто не знает?" - а что в ней относительно данной задачи есть? Подскажите пожалуйста.
И Так все таки лучше хранить связь с объектом 1С в регистре сведений или справочнике с учетом огромного количества файлов? И при рассмотрении хранения файлов в другой базе (хотя для проекта будет предусмотрен вариант хранения) пользоваться ли объектом внешние источники данных? |
|||
44
RomanYS
16.04.17
✎
18:53
|
(43) тут вроде очевидно: если тебе надо на файл ссылаться, то справочник. Если достаточно к чему-либо прикрепить - РС. В типовых как правило делают справочник или справочники.
|
|||
45
Falex
16.04.17
✎
20:12
|
Мне фактически надо что:
1) Возможность сохранения файла, прикрепленного к объекту. 2) Открытие/редактирование файла, прикрепленного к объекту. И тут выбор почему между справочником и регистром сведений: при большом массиве данные какое обращение будет быстрее и объем хранения данных? В типовых и в частности БСП используют "Присоединенные файлы". |
|||
46
Falex
16.04.17
✎
20:28
|
Читал про "Веб-сервис работы с файлами" в Документообороте. но если у каждого проекта будет своя база, то поднимать для каждой базы веб-сервис это затратно...
|
|||
47
Fish
16.04.17
✎
20:28
|
(45) В БСП всё, что тебе надо, уже реализовано.
|
|||
48
Falex
16.04.17
✎
20:35
|
"В БСП всё, что тебе надо, уже реализовано." - и даже хранение файлов в другой базе данных?
|
|||
49
Йохохо
16.04.17
✎
21:21
|
(48) посмотрели бы документооборот просто, если права сильно не развешивать и хранить в томах, вероятно не станет тяжелой и получите в довесок извлечение текстов и полнотектовый поиск. мб еще какие плюшки понравятся
|
|||
50
Fragster
гуру
17.04.17
✎
12:28
|
(43) все - хранение на диске, в облаке, индексирование и поиск по текстовому содержимому файлов, прикрепление к объектам, версионирование файлов, раскладывание файлов по папкам....
|
|||
51
Fragster
гуру
17.04.17
✎
12:29
|
(48) зачем "в базе"?
|
|||
52
Falex
17.04.17
✎
21:32
|
То есть все-таки большинство к хранению файлов на диске с использованием томов хранения файлов (как в БСП)?
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |