Имя: Пароль:
1C
1С v8
Пухнет файловая база. Что делать?
,
0 AlexxJ
 
02.09.14
10:34
Доброго времени суток. Кароче такая ситуация... база можно сказать самописная, ну т.е совсем не от 1с и много перепилена. есть справочник у которого есть реквизит тип - Хранилище. В хранилище запихивается Структура, которая собирается их XML(хз важно или нет). Вот этих элементов прибавляется в день 2к-3к и следовательно табличка распухает до 4гб за пару месяцев. Можно ли как то это оптимизировать? Пока обхожусь удалением не нужного, но чувствую пора что то менять ))
1 break
 
02.09.14
10:36
sql
2 PR
 
02.09.14
10:36
(0) Сжимай хранилище
3 shuhard
 
02.09.14
10:36
(0)[Можно ли как то это оптимизировать?]
ну да, можно
- удалять не актуальные
- хранить порнуху во внешних файликах/СУБД
4 PR
 
02.09.14
10:37
(1) Причем здесь sql?
5 PR
 
02.09.14
10:38
(3) Буквосочетание xml из (0) видимо не привлекло твоего внимания :))
6 Jump
 
02.09.14
10:40
Храни XML в папке.
В хранилище пихай ссылки.
7 AlexxJ
 
02.09.14
10:42
(6) или так или SQL
у SQL насколько я знаю подобных проблем нет.
Думал может еще варианты есть...
8 Jump
 
02.09.14
10:43
Т.е возможность хранения различной информации в 1с это конечно хорошо, но не стоит этим злоупотреблять, и пихать туда тяжеловесный мусор без оптимизации.
Ежели все таки хочется в базе - ну хотя бы допиши функционал который будет жать хмл в архив, и уже архив в хранилище.  Жмется хмл достаточно хорошо.
9 AlexxJ
 
02.09.14
10:44
(2) Думаю что количество создаваемых элементов будет расти, на сколько сжатие эффективно?
10 Jump
 
02.09.14
10:45
Т.е конкретная реализация зависит от того насколько часто эта информация востребована, и насколько быстро ее можно извлекать.
11 AlexxJ
 
02.09.14
10:47
(10) теоретически эта инфа не нужна. Это типа бекапа отправленных в ГРКЦ электронных сообщений. т.е. храниться по принципу "а вдруг"
12 Jump
 
02.09.14
10:47
(9)Смотря какое - любой текст жмется очень хорошо, а учитывая то что в хмл очень много однотипных наименований то вообще отлично.
Просто возьми файл с одной из хмл и попробуй сжать архиватором.

По идее можно хранить все хмл в одном архиве, тогда сжатие будет просто супер эффективным, хотя скорость доступа возможно несколько упадет.
С другой стороны это всяко лучше чем в базе хранить.
13 _fvadim
 
02.09.14
10:47
(11) нафик их вообще в базе хранить тогда?
14 _fvadim
 
02.09.14
10:48
папочки по датам и вообще к базе не вязать
15 shuhard
 
02.09.14
10:48
(11) тогда установи срок годности и удаляй через квартал
16 AlexxJ
 
02.09.14
10:48
теоретически ЦБ может запросить копию сообщения. Видимо по этому и хранят, а в базе что бы не потерялась... я так думаю.
17 Jump
 
02.09.14
10:48
(11)Ну тогда я бы сделал так - пихаешь все в архив, в один архив. Он получиться довольно небольшим.
А уж сам архив можешь запихать в базу ежели уж есть такое желание.
18 Maxus43
 
02.09.14
10:50
я так и не понял, xml то архивируешь? они сжимаются на ура, Гиги в сотню метров обычно (от содержимого зависит конечно)...
19 AlexxJ
 
02.09.14
10:50
для начала попробую сжатие(9), минимум правки кода, а дальше посмотрим по обстоятельствам
20 _fvadim
 
02.09.14
10:50
(16) чтоб не потерялось бэкапы делать
а хранить в базе, тем паче файловой, и иметь головняк с чисткой данных, которые могут понадобиться - мазохизм
21 Jump
 
02.09.14
10:53
Файл xml размером 6 мегабайт сжимается до 200килобайт.
Т.е в 30 раз.
Если все эти хмл хранить в одном архиве то думаю тысяча хмл размером 5мб займет не более 50мб.
22 AlexxJ
 
02.09.14
10:53
(18) ну там не совсем XML, на основе xml создается структура с помощью рекурсивной функции. Зачем так - тайна!!! для меня. и вот эта структура и засовывается в хранилище
23 Адинэснег
 
02.09.14
10:56
xml в хранилище, хранилище в ЗаписьZipФайла()
24 Адинэснег
 
02.09.14
10:57
вернее xml в zip, zip в хранилище
25 Мимохожий Однако
 
02.09.14
10:57
Если данных удаляются через некоторое время,то логично писать в регистр сведений и регламентными заданиями удалять по мере потери актуальности.
26 Долбежник
 
02.09.14
10:58
(1)
+100500
27 Jump
 
02.09.14
10:58
(22)Ну значит эффективность архивации посчитай сам, выгрузи и попробуй вручную сжать.
28 Jump
 
02.09.14
11:00
(26)А чем поможет скуль в данном случае?
Пухнуть будет нисколько не меньше.
29 Йохохо
 
02.09.14
11:20
(28) у файловой есть ограничение на размер таблицы
30 Jump
 
02.09.14
12:22
(29)Ну насколько я понял из сабжа в ограничение топикстартер не упирается, просто заблаговременная забота о размере базы.
Так что в данном случае гораздо лучше устранить причину распухания, чем забить на причину и перейти на скуль.
31 AlexxJ
 
02.09.14
12:30
(28) у скуля помоему подобных ограничений нет
32 AlexxJ
 
02.09.14
12:31
в общем и целом понятно, оригинальных и необычных решений нет... чудес не бывает (
33 Garykom
 
гуру
02.09.14
12:31
Сделай обработку чистки этой таблички с удалением/переносом в файл бэкапа всего старого и по расписанию ее запускай...
34 Garykom
 
гуру
02.09.14
12:32
Еще можно раз это архив то и храни это в архиве, т.е. не просто xml-структура туда а сначала в zip запакуй и тока потом в хранилище...
35 Garykom
 
гуру
02.09.14
12:33
(34) и индексов надеюсь нет по этой табличке? ))
36 AlexxJ
 
02.09.14
12:35
(35) нет. тип хранилище не индексируется.
37 РенеДекарт
 
02.09.14
12:35
(30)> я понял из сабжа в ограничение топикстартер не упирается
>следовательно табличка распухает до 4гб за пару месяцев
- не, совсем не упирается ))
38 AlexxJ
 
02.09.14
12:36
(37) упирается. просто сейчас ручками мониторим и лишнее убиваем
39 РенеДекарт
 
02.09.14
12:36
(34) наиболее оптимально и правильно - удалять через месяц записи с XML.
Все остальное будет в бэкапах.
40 AlexxJ
 
02.09.14
12:38
(37) после первой ошибки "Превышен максимально допустимый размер внутреннего файла ...1Cv8.1CD", стали контролировать. (39) из-за роста количества электронных сообщений, боюсь что и месяц база не протянет.
41 РенеДекарт
 
02.09.14
12:41
(40) да хоть каждый день делайте архив и удаляйте.
Потому в противном случае - только выносить весь мусор во внешнее хранение.
42 AlexxJ
 
02.09.14
12:47
за неделю база 2 гига набирает, придется похоже внешнее хранилище мутить.
43 Jump
 
02.09.14
13:30
(42)А что мутить то? Обычный архив. Рар, зип, или 7z в зависимости от предпочтений в папке с базой.
И работа с ним через консольные команды.
Пишется это все за полчаса.
44 Обработка
 
02.09.14
13:45
(0) Вспомнилось. в 1с 77 в базе мой предшественник хранил ТЗ из документа (опреративная информация остатков на момент ввода документа) в ревиквзите документа.

Не помню точно как там назывался метод. Что-то вроде "сохранитьвнутр"

Вобщем база жутко тормозила. После того как убрал этот реквизит база сократилась в 100 раз.
45 Awreli
 
02.09.14
13:45
мне просто любопытно, что это за справочник? какая информация туда добавляется по 2 штуки в день, да ещё и в хранилище
46 AlexxJ
 
02.09.14
14:06
(45) --> (11) (16)
47 AlexxJ
 
02.09.14
14:07
(43) лень матушка ))) да и так есть чем заняться
48 DosBot
 
02.09.14
15:04
(0) В своё время выбирал между хранением файлов внутри базы или только ссылок на них. В итоге выбрал второе. Рост размера базы оказался критичнее.. ИМХО, храни только ссылки на файлы...
49 РенеДекарт
 
02.09.14
15:11
(43)>Пишется это все за полчаса.
копируется, вообще-то, еще быстрее. А вот понять и написать - отнюдь не полчаса. День-два-три.
Всегда удивляли "полчастники", полчаса копирующие готовый код.
50 РенеДекарт
 
02.09.14
15:11
(45) лог изменений
51 РенеДекарт
 
02.09.14
15:12
(48)>В итоге выбрал второе.
что использовал?
52 DosBot
 
02.09.14
15:36
(51) Дописал свою подсистемку на УФ, для хранения файлов во ВНЕ (был закуплен отдельный сервак для этого). Вся система ориентируется на 2 главных компонента:
- Справочник ХранилищеВнешнихФайлов (где хранятся ТОЛЬКО ссылки на файлы) - то, что видит пользователь. Перечень файлов которые можно посмотреть, добавить, изменить;
- Справочник НастройкиХраненияФайлов (где куча настроек позволяющих автоматически формировать путь в хранилище для добавляемого файла, без участия пользователя, расширения доступные для выбора и проч.);

Главное, на что ориентировался:
- возможность быстрого добавления в хранилище нужного файла пользователем, без необходимости указывать его конечный путь (подсистема сама определяла путь хранилища, в зависимости от вида документа/справочника; при этом, путь можно строить из произвольного числа реквизитов. Например, для документа Реализация ТРиУ: Организация -> Дата (год) -> Код. На выходе получается: \\FilesServer\ООО Дружба\2013\000000011) - пользователь только выбирает файл, требуемый для добавления, всё остальное для него скрыто;
- возможность выбора из заданного перечня расширений файлов (также задаётся в настройке) и его макс. размер файла;
- синхронизация и физический перенос файлов с изменением инфы о его местоположении в ХранилищеВнешнихФайлов, в случае изменения реквизитов, влияющих на путь файла в хранилище;
- возможность управления видимостью/доступностью для пользователя в спр. ХранилищеВнешнихФайлов с помощью RLS (свой отдельный РС, аналогичный типовому);
- возможность массового добавления файлов (каждый файл обрабатывается и проверяется на корректность имени,  наличия в хранилище и т.п.);

Короче. Потратил на это где-то 4-6 дней. Зато, блин, никаких напрягов с ростом базы :)
53 DosBot
 
02.09.14
15:36
+ делал на базе КА
54 РенеДекарт
 
02.09.14
15:42
(52) да, весьма интересно получилось, я б взял как шаблон ))
55 Jump
 
02.09.14
16:19
(49)Не пойму что ты там копировать собрался, и что копируется быстрее.
А на написание консольных команд работы с архивом не думаю что уйдет более получаса.
56 AlexxJ
 
02.09.14
16:26
(48) если бы у меня был выбор, тогда внешний архив. а так первая заповедь "если работает - ничего не трогай" )
57 РенеДекарт
 
02.09.14
16:34
(55) >А на написание консольных команд работы с архивом
- я и говорю - скопировать еще быстрее.
А так все с рождения владеют консольными командами работы с архивом. Как же без этого. Вообще, всеми консольными командами. И конечно, что там еще изучать можно?!
58 Jump
 
02.09.14
16:50
(57)Не пойму что именно скопировать можно в данном случае и откуда.
А по поводу консольных команд архива - справка по командам архива хранится в папке с установленным архиватором, или банально гуглится.
59 AlexxJ
 
02.09.14
17:02
(58) я так понимаю : скопировать БД в архив и удалить лишние элементы