|
v7: Распределённый доступ к внешнему файлу | ☑ | ||
---|---|---|---|---|
0
Стрелок
06.12.12
✎
15:17
|
Доброго времени суток
Сто лет не заходил на форум, а тут решил совета спросить. Задача : В базе одновременно сидит до 20 юзеров. Для каждого из них необходимо фиксировать действия (нечто вроде журнала регистраций но шире - с простоями, активностью, запуском определённых обработок). Вариантов "где фиксировать" не так много : штатный ЖР трогать нехочется по религиозным соображениям регистры требуют документов справочники - пухнет база остаются внешние хранилища. Вариантов тоже не много : 1. внешний файл 2. "левая" таблица в скуле 1. Возникает проблема - одновременная запись в этот файл событий от разных юзеров. 2. ниразу не видел и не сталкивался. Даже не представляю как... в общем нужны советы. смотрел dll от ромикса - похоже но опять же типа внешнего ЖР. оставил на крайний вариант Вот теперь вроде всё изложил. Весь в внимании.... |
|||
4
Ёпрст
06.12.12
✎
15:20
|
если база на суле - то скуль, для дбф можно хотя бы в базе скульлайта слепить
|
|||
5
Стрелок
06.12.12
✎
15:21
|
(2) ну +/-
(3) нет, машину хочу обновить ;) |
|||
6
Стрелок
06.12.12
✎
15:21
|
(4) скуль скуль
|
|||
7
Стрелок
06.12.12
✎
15:22
|
давайте ещё подождём по первому варианту. Нет - буду пытать по второму ;)
|
|||
8
Ёпрст
06.12.12
✎
15:22
|
(4) ну, путей несколько, в зависимости от того, что в лог будешь пихать. Т.е что именно нужно отслеживать.
|
|||
9
Стрелок
06.12.12
✎
15:23
|
(8) ну а как ты думаешь? всё стандартно. "кто, что когда" и "какого чаи гоняем по часу в час пик" ;)
|
|||
10
andrewalexk
06.12.12
✎
15:24
|
:) все ясно...Д. знает скуль хуже внешних файлов
|
|||
11
Стрелок
06.12.12
✎
15:25
|
(10) скуль только на уровне запросов. Этого мало? ну что есть
|
|||
12
ДенисЧ
06.12.12
✎
15:27
|
(11) INSERT - это тоже запрос :-)
|
|||
13
Стрелок
06.12.12
✎
15:29
|
(12) так ладно. есть ещё желающие покрасоваться несомненно бесконечными знаниями по SQL? Если нет - предлагаю перейти к конкретике. А если ещё примеры будут - вообще супер
|
|||
14
andrewalexk
06.12.12
✎
15:32
|
:) тезка, тебе как бы намекают что разделенный доступ к внешнему файлу это гораздо менее надежно чем сикул-таблица
|
|||
15
Стрелок
06.12.12
✎
15:35
|
(14) это я уже понял. Суть выбора проста и описана в топике - работа со скулем кроме как написание запросов в 1С++ для меня "ниразу не видел и не сталкивался. Даже не представляю как..."
если распределённый доступ к внешнему файлу организовать сложно и нереально (в понятиях доступных мне) то буду копать в сторону скуля. Вот сейчас пытаюсь рыть в инете примеры или хотя бы описание |
|||
16
DrunkAnimal
06.12.12
✎
15:36
|
пиши для каждого локально а потом чем-нибудь собирай ... только по времени нужна будет синхронизация
|
|||
17
Ёпрст
06.12.12
✎
15:37
|
на счет одного файла.. есть поделка готовая на проклабе, с помощью filler.dll пишет в файлик
|
|||
18
dk
06.12.12
✎
15:38
|
Создать свой Журнала Регистрации mlg для обмена
проблем с "одновременной" записью нет |
|||
19
Стрелок
06.12.12
✎
15:38
|
(16) думал и на эту тему. вопрос - как часто собирать в кучу логи юзеров если анализ их может понадобиться в любой момент (для злобного менеджера по персоналу)?
|
|||
20
dk
06.12.12
✎
15:40
|
правда запись таки кешируется немного - в ТЗ и раз в 30 сек скидывается в файл лога
|
|||
21
Стрелок
06.12.12
✎
15:40
|
проблемы с записью отсутствуют из-за объекта "Scripting.FileSystemObject"? если да - то все остальные вопросы отпадают сами собой. с этим объектов я давно и плотно работаю разбирая логи внешней программы размерами по десятки мегабайт.
|
|||
22
Cthulhu
06.12.12
✎
15:43
|
справочник.
с регламентной архивацией ( выгрузкой во внешний(-е?) dbf-файл(-ы?) + зачисткой выгруженного ). с отдельной обработкой формирования каких нужно отчетов/выборок за какой нужно период - с использованием архивов. |
|||
23
Стрелок
06.12.12
✎
15:50
|
(22) думал и так. период архивации месяц (больше и не надо). Вроде всё красиво - и тебе запросы и выборки и отборы с сортировками. Но смущает именно то что надо его чистить будет периодически или же держать долго.
В чём встала проблема. Крупный клиент - дистриб областного уровня по порядка 7-8 крупным торговым маркам мирового масштаба (пиво, мин.воды, нестле, марс и т.п.) раз в квартал идёт тотальная сверка с вендорами на предмет правильности остатков на любой момент из квартала (они у себя там закрывают период). Малейшее расхождение и санкции. От объяснительной до лешения скидки и прочих радостей. крутится 8 баз. В среднем в день в каждой лупится порядка 1000 документов. Но кроме этого есть ещё умники "из бухалтерии и транспортного цеха" которые теоретически (оказывается и практически) что то изменить в старых документах. И Изменить не сейчас а например три месяца назад. А всплывает то сейчас. Я понимаю что можно достать данные из внешнего лога за тот период и прочитать их. Но как то некошерно что ли... смущаюсь ;) |
|||
24
mishaPH
06.12.12
✎
15:54
|
если в текущий справочник религия не позволяет да и зачем тебе лишние транзакции в базе, пиши во внешнюю скл базу. Любой компонентой которая это может делать. Транзакции обрабатывай сам. В принципе можно для каждого юзера отдельную табличку заводить.
|
|||
25
alex74
06.12.12
✎
15:54
|
1. скуль (я бы сделал именно так)
2. запись в куда-то через ADO, используя те же запросы. Типа, развернуть какой-нибудь mysql, или сделать файлик аксесса. |
|||
26
DrunkAnimal
06.12.12
✎
15:55
|
(19) как часто тебе нужно так часто и собирай, в чем проблема?
можно в реальном режиме сделать, смотря на чем пишешь ... под тот же нет есть фсватчер .. |
|||
27
alex74
06.12.12
✎
15:55
|
+ (25) вот только я бы сделал отдельную базу для регистрации, а не таблицу в рабочей базе.
|
|||
28
DrunkAnimal
06.12.12
✎
15:56
|
все видимо зациклились на субд)
|
|||
29
mishaPH
06.12.12
✎
15:56
|
(27) да отдельной проще
|
|||
30
Cthulhu
06.12.12
✎
15:56
|
(23): никаких проблем. архивы - полные, выполняются хоть ежедневно (по ночам), причем чем чаще - тем быстрее выполняться будет.
ну и какие проблемы трехмечячной давности лог из архива поднять-то??? в дбф-архивах для этого ещё ништяковые индексы слепить... да хоть за десять лет назад! |
|||
31
mishaPH
06.12.12
✎
15:56
|
(28) ну можно в файлик на диске текстовый. теоретически. но это не готично и проблема с разделением доступа к нему
|
|||
32
DrunkAnimal
06.12.12
✎
15:58
|
(31) я выше написал, каждый пипшет в свой лог, и есть общий механизм сбора информации
|
|||
33
Стрелок
06.12.12
✎
15:58
|
(27) ну в общем то я так и думал. Курочить боевую базу размером в 20 гигов я не рискну ;)
(30) дата то когда полезли неизвестна. значит надо будет развернуть все за период, слепить до кучи и уже в ТЗ анализировать и искать (31) тут чел в 18 заявил что с распределённой записью нет проблем. я предположил что из-за объекта "не 1С-ного". вот жду ответа |
|||
34
Стрелок
06.12.12
✎
15:59
|
(32) всё красиво. одна проблема. при сборке так или иначе будет сбой по времени. кого раньше собирать до кучи начнём того записи будут первыми а не по реальному времени. писать раз в секунду?
|
|||
35
DrunkAnimal
06.12.12
✎
16:01
|
по изменению времени файла ...
да и вообще зачем тебе собирать... я вот подумал, просто пиши файлики режь их по часам и по юзеру, к примеру, и складывай в отдельное место |
|||
36
mishaPH
06.12.12
✎
16:01
|
(33) 3. файлик при желании может прибить любой юзер. с скл базой это гораздо сложнее. Да еще не забудь, что писать в файл - это не самоцель. тебе еще анализировать надо данные. Представь скорость работы с файлом
|
|||
37
DrunkAnimal
06.12.12
✎
16:02
|
(34) понял вопрос ... ты же будешь по времени которое сохранили в логе ориентироваться, а не когда изменение произошло
|
|||
38
Стрелок
06.12.12
✎
16:02
|
(36) не прибьёт - нет доступа к папкам - всё в терминале крутится. А что касается анализа - то объект "Scripting.FileSystemObject" очень здорово и быстро обрабатывает большие текстовые файлы. Проверено (см 21)
|
|||
39
DrunkAnimal
06.12.12
✎
16:03
|
(36) угу, а сиквел видимо свои бд держит в памяти исключительно
|
|||
40
Стрелок
06.12.12
✎
16:03
|
(37) точно. но в самом логе это время будет прыгать. вначале диапазон времени по первому юзеру, потом такой же диапазон по второму. Т.е. будет не лог а сборка кусков лога. нет непрерывности времени. а это значит сложность в обработке данных для анализа
|
|||
41
DrunkAnimal
06.12.12
✎
16:04
|
(38) они не будут такими большими ... см(35) просто выбрал нужный диапазон и слепил отчет
|
|||
42
alex74
06.12.12
✎
16:04
|
(39) представь себе простейший запрос, например - все записи касающиеся объекта Х. И примени его к гигабайтному текстовому файлу.
|
|||
43
DrunkAnimal
06.12.12
✎
16:05
|
(40) почему все считают что сиквел ту же сортировку сделает быстрее?
|
|||
44
Стрелок
06.12.12
✎
16:05
|
(42) ой вей. я понимаю тягу "старичков" к гигантомании но не настолько же ;)
максимум по одной базе за месяц метров до 100 не больше |
|||
45
Стрелок
06.12.12
✎
16:06
|
(43) не скажи. если будет писаться в таблицу скуля (как я понимаю по малому знанию своему) то записи идут в режиме реального времени а значит изначально будут уже упорядочены по времени и сортировки не потребуют
|
|||
46
Стрелок
06.12.12
✎
16:06
|
(+45) или же в общий текстовый файл
|
|||
47
DrunkAnimal
06.12.12
✎
16:06
|
то есть на сиквеле будет гораздо быстрее? смешно ...
и никто не мешает построить индекс по текстовым файлам |
|||
48
alex74
06.12.12
✎
16:06
|
(44) а если писать не только измененный объект (что банально и неинтересно), но и какие именно реквизиты при этом изменились - объем выростет и очень быстро.
|
|||
49
DrunkAnimal
06.12.12
✎
16:07
|
никто тебе самому не мешает постобработку сделать и просто строить тот же индекс
|
|||
50
DrunkAnimal
06.12.12
✎
16:08
|
(48) а в сиквеле он не вырастет?
|
|||
51
Стрелок
06.12.12
✎
16:08
|
(48) это смотря как писать
(47) можно про "индекс по текстовым файлам" подробнее |
|||
52
alex74
06.12.12
✎
16:10
|
(50) отбор в большой сиквельной таблице по индексированным полям будет выполняться гораздо быстрее, чем в текстовом файле. Особенно это касается больших объемов данных.
Кто бы что ни говорил. |
|||
53
stix2010
06.12.12
✎
16:11
|
у меня лог изменений данных пользователями на sql в отдельной базе
|
|||
54
DrunkAnimal
06.12.12
✎
16:12
|
(51) имя файла и строка, и строишь его как тебе будет нужно
|
|||
55
Кирпич
06.12.12
✎
16:12
|
(0)SQLServer. просто сделать (ADO). надежно. данные всегда готовы для обработки. и не надо ничего склеивать.
|
|||
56
stix2010
06.12.12
✎
16:13
|
сейчас объем базы 67 гб за 3 года
|
|||
57
Стрелок
06.12.12
✎
16:13
|
Попробуем перевести беседу в более рациональное русло нежели война "тупоконечников" и "остроконечников". Если с записью в текст/dbf/mxl всё ясно и понятно мне, то если у кого есть - можно пример работы с внешней БД на скуле. Я так понимаю там будет две таблицы
1. таблица с ID объектов базы и их представлениях на момент первой записи (для того чтобы не терять объект при изменении номера документа или даты) 2. таблица с фиксацией изменений типа ID объекта|реквизит|было|стало| читать из этой ТЗ я думаю смогу. Писать - попробую. Но всегда легче когда есть букварь или работа "соседа по парте" куда можно заглянуть |
|||
58
DrunkAnimal
06.12.12
✎
16:14
|
(57) ид объекта не меняется
|
|||
59
Стрелок
06.12.12
✎
16:15
|
(53) вооо пошла конкретика. Можешь по шагам расписать что и как делать (код отслеживания не нужен). Достаточно примера типа "есть ТЗ с изменёнными реквизитами и объектами, которым эти реквизиты принадлежат. Теперь пишем эту ТЗ в таблицу скуля так....."
|
|||
60
DrunkAnimal
06.12.12
✎
16:15
|
не зависит ни от номера ни от даты, вытащить его можно из значениевстрокувнутр
|
|||
61
Стрелок
06.12.12
✎
16:15
|
(58) а то я не знаю. Именно поэтому мне и надо первая таблица чтобы по ней определить изначальное представление объекта а не текущее.
|
|||
62
Стрелок
06.12.12
✎
16:16
|
(60) я знаю!!!!!
|
|||
63
DrunkAnimal
06.12.12
✎
16:16
|
я понял
|
|||
64
alex74
06.12.12
✎
16:17
|
(57) у меня была обработка по работе с аксессовским файлом тут http://1c.proclub.ru/modules/mydownloads/personal.php?cid=83&lid=2347
работа со скулем отличается разве что строкой подключения |
|||
65
DrunkAnimal
06.12.12
✎
16:17
|
(64) акцесс при записи не блокирует монопольно файл?
|
|||
66
DrunkAnimal
06.12.12
✎
16:18
|
а, сорри, просто как пример
|
|||
67
alex74
06.12.12
✎
16:19
|
(66) да, там просто есть запись запросами в таблицу через подключение по ADO
|
|||
68
Стрелок
06.12.12
✎
16:20
|
(67) сенькс. Правильно ли я понимаю что вопрос "блокировки" скуль решит сам? я про одновременную (теоритически) запись со стороны двух юзеров
|
|||
69
alex74
06.12.12
✎
16:20
|
+ (64) простой совет как собрать строку подключения самому:
- создаешь пустой текстовый файл с расширением udl - открываешь его двойным кликом и настраиваешь параметры подключения - сохраняешь и открываешь получившийся файл текстовым редактором |
|||
70
stix2010
06.12.12
✎
16:21
|
(53) у меня для >=8.1, через подписки
структура основной таблицы tablelog: uuid объекта, дата изменения, компьютер, пользователь, объект метаданных, старое значение, новое значение,режим изменения, доп. поля |
|||
71
Стрелок
06.12.12
✎
16:22
|
(69) спасибо.
(70) ясно. |
|||
72
alex74
06.12.12
✎
16:22
|
(68) да, такой проблемы вообще не должно быть даже для 20 пользователей
|
|||
73
stix2010
06.12.12
✎
16:23
|
(70) пишу данные по справочникам и документам, ввод новых и анализ измененых реквизитов, очень помогает на разборе полетов
|
|||
74
Стрелок
06.12.12
✎
16:24
|
(73) ну нечто подобное и мне заказали
|
|||
75
stix2010
06.12.12
✎
16:26
|
в принципе для тупого insert table ... values блокировок не наблюдается - 60 юзеров, ADODB
|
|||
76
DrunkAnimal
06.12.12
✎
16:29
|
(75) а откуда они там?
|
|||
77
Стрелок
06.12.12
✎
16:30
|
(76) а разве транзакции кто то отменил? или я не понимаю процесса записи в таблицы скуля?
|
|||
78
DrunkAnimal
06.12.12
✎
16:39
|
(77) у тебя инсерт - это атомарная операция, там не нужна транзакция, и если у тебя на таблице не висит миллион индексов, то ты не должен столкнуться с проблемой при последовательной записи в таблицу
|
|||
79
stix2010
06.12.12
✎
16:44
|
(77) видимо нет :), блокировку таблицы надо явно указать в sql запросе или процедуре, только она не нужна при подобном ведении лога. При твоем количестве юзеров, подобной проблемы ты не увидишь, не рекомендую хранить данные в той же 1с sql базе.
|
|||
80
ADirks
06.12.12
✎
16:51
|
(77) Кстати, насчет транзакций. Именно для логов это иногда зло. Например, в модуле проведения хотим чего-то в лог писануть, чтобы оно там осталось независимо от результата, а транзакция берёт, и откатывается. Получается облом.
Мы выкрутились, используя другое соединение, которое toy-гибкиеблокировки создаёт. |
|||
81
Стрелок
06.12.12
✎
16:52
|
(80) писаться будет 100 % ПриЗаписи()
|
|||
82
ADirks
06.12.12
✎
17:05
|
(81) да я понял, просто на будущее
А начать рекомендую с установки SQL developer edition, естественно с Management Studio и MSDN, локально на своём компе. Там для начала читать мануалы, и экспериментировать. А то вслепую работать это как-то не гуд. Для начала почитать про CREATE TABLE, INSERT, ну и GetDate() по любому пригодится. |
|||
83
Стрелок
06.12.12
✎
17:14
|
Ладно. всем спасибо. буду копать...
|
|||
84
DrunkAnimal
06.12.12
✎
17:15
|
(82) почему не экспресс?
|
|||
85
ADirks
06.12.12
✎
17:18
|
(84) это уже не важно, можно и экспресс
главное что легально и бесплатно |
|||
86
Torquader
07.12.12
✎
01:21
|
(80) А что мешает писать в лог и успешность завершения транзакции - тогда будет ещё и известно что делали, а не только что сделали.
|
|||
87
ADirks
07.12.12
✎
06:56
|
(86) когда в SQL говоришь ROLLBACK TRANSACTION, то откатывается всё, в том числе все твои записи в лог
|
|||
88
Dolly_EV
07.12.12
✎
08:18
|
||||
89
Torquader
07.12.12
✎
21:18
|
(87) Откатывается, только если ты в ту же самую SQL-базу пишешь. Кроме того, возможны сильные тормоза при "пересечении" записи логов.
И, самое главное, лог то есть журнал предполагает, что в него только пишется и откатить что-то назад - это нонсенс. |
|||
90
Torquader
07.12.12
✎
21:19
|
P.S. Просто не стоит путать понятие "журнал" и "дополнительная расшифровка операций".
|
|||
91
ADirks
08.12.12
✎
09:18
|
(89) Да ну? Ну на, проверь
use LogDB create table log (col1 int) go use WorkDB begin tran insert LogDB..log (col1) values (1) rollback tran select * from LogDB..log Сколько строк в выборке? |
|||
92
Mashinist
08.12.12
✎
10:39
|
ну то что это будет таблица в скуле все уже однозначно решили
а почему одна таблица? таблиц нужно делать кучу по каждому юзеру за конкретный период (ну скажем месяц) одна таблица а для анализа собирать запрос через UNION ни каких тебе блокировок в принципе т.к. каждый пишет свою таблицу минимизация исходных данных при выборке. вот такая бредовая мысль... |
|||
93
ADirks
08.12.12
✎
14:24
|
(92) да какие нафиг блокировки при записи в лог?
Не надо придумывать проблем на ровном месте. По большей части это происходит вне транзакций, а когда в транзакции - то как я уже говорил можно использовать отдельное соединение. |
|||
94
Torquader
08.12.12
✎
14:44
|
(92) Свою таблицу на каждого пользователя - это неправильно, так как число пользователей может быть неизвестно на момент создания программы.
Можно разделить таблицы по типам записей, чтобы гарантированно не было пересечения и проще было строить выборки. |
|||
95
Mikeware
08.12.12
✎
14:52
|
(92) единственная мысль во всем посте, с которой можно согласиться - это "вот такая бредовая мысль..."...
(93)+1. добавлю - "не надо плодить сущности сверх необходимого..." |
|||
96
Mashinist
08.12.12
✎
15:15
|
(94) CREATE TABLE никто не отменял при заведении нового юзера
про сущности согласен но это лог и он обычно растет довольно быстро и когда-то все равно его нужно резать а здесь безболезненно все уже порезано практически без потери производительности и по мере не надобности можно просто drop'ать таблицы только запросы чуть сложнее собирать. т.е. если исходить из сущностей, то сущность конечно одна - лог, но обстоятельства бывают разные |
|||
97
Torquader
08.12.12
✎
15:17
|
(96) Тогда создавать новую таблицу на каждый подключившийся сеанс и хранить её до окончания работы, чтобы не было проблем с тем, что старое нужно из таблицы вырезать.
|
|||
98
Torquader
08.12.12
✎
15:19
|
И после того, как разделили на сеансы снова возникает вопрос - а не проще ли в файл - писать-то будет один процесс - и только в конец.
|
|||
99
Mashinist
08.12.12
✎
15:21
|
(97) :-) тоже имеет право на существование
|
|||
100
Torquader
08.12.12
✎
15:24
|
(99) Ну и придётся ещё одну таблицу для хранения соответствия сеансов, пользователей и рабочих мест, чтобы можно было быстро найти кто и где работал.
|
|||
101
ADirks
08.12.12
✎
16:02
|
всегда было интересно, какими такими путями люди с гуманитарным складом мышления попадают в технические специальности...
|
|||
102
Mikeware
08.12.12
✎
17:40
|
(101) :-))
Блат. либо наглость. |
|||
103
vde69
08.12.12
✎
17:44
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |