Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Проектирование БД Новый топик    Ответить
 как построить справочник на 20-100 тыс записей?  [new]
Александрик
Member

Откуда:
Сообщений: 43
Нужен справочник на 20-100 тыс. записей
(не знаю кому-как, а для меня это уже ого-го...)
Дополнительные условия - локальная сеть, количество пользователей от 20 до 40.Задача заключается в том что пользователям необходимо обеспечить быстрый и наглядный доступ к элементам справочника. (Вариант типа Найти элемент справочника по коду не подходит.)
Пока рассматриваю следующие варианты: - при коннекте клиента перекачивать весь справочник на клиентскую машину и там уж пользователи быстренько во всем разбираются. Периодически синхронизировать данные между справочниками... :( . Но, Пользователи периодически - довольно таки часто, перегружают клиента.
Другой вариант - заставить клиента хранить хранить справочник локально.
Вариант три - плюнуть на все... И считать опасения безосновательными... Пусть пользователи мучаются с тем что получиться :)
15 сен 03, 20:00    [339518]     Ответить | Цитировать Сообщить модератору
 Re: как построить справочник на 20-100 тыс записей?  [new]
Дмитрий Мыльников
Member

Откуда: Челябинск
Сообщений: 248
А в чём база будет лежать? Если SQL Server, то тут даже ничего особо изобретать не нужно, просто делаешь с учётом общих требований к нормализации структуры (правда, дальше третьей формы обычно на практике заходить не стоит :) ).

Опять же, практика показывает, что пользователям ну очень редко бывает нужен весь справочник целиком. Никто не в состоянии "быстро просмотреть" даже 10 тысяч записей, не говоря уже о 100 тыс. :) То есть, всё равно есть какой-то механизм структурирования данных, который исторически сложился для более быстрого поиска. Вот его и нужно "заложить в алгоритмы и структуру".

Что хоть за справочник?
15 сен 03, 20:27    [339535]     Ответить | Цитировать Сообщить модератору
 Re: как построить справочник на 20-100 тыс записей?  [new]
mahoune
Member

Откуда: Moscow
Сообщений: 5653
Если тебе уж так хочется на клиента кинуть, то я видел такой механизм. Локально создавался Recordset. Заполнялся в момент открытия приложения. Обновлялся при изменении данных в справочнике (DBAlert) или при новом входе в систему!
А, в принципе, надо конечно смотреть, что за справочник, и как часто по нему ищут, и на сколько часто меняют в нем данные?!

mahoune
16 сен 03, 10:00    [340005]     Ответить | Цитировать Сообщить модератору
 Re: как построить справочник на 20-100 тыс записей?  [new]
Серега
Member

Откуда:
Сообщений: 887
Любим таки мы всякую таблицу справочником называть! 8-)
Какой же это справочник, если в нем 100000 записей и 40 человек туда активно пишут (иначе зачем синхронизация). Это нормальная таблица.
Объясни: почему "Вариант типа Найти элемент справочника по коду не подходит"? Это - самый нормальный вариант, из того что ты перечислил, ИМХО.

ЗЫ: Ты бы хоть тип БД написал что-ли.
16 сен 03, 10:24    [340055]     Ответить | Цитировать Сообщить модератору
 Re: как построить справочник на 20-100 тыс записей?  [new]
Александрик
Member

Откуда:
Сообщений: 43
Сейчас все юзеры у меня сидят в 1С в Терминале на одном сервере
(по крайней мере в 3 базах)
Огромная при огромная беда с 1С-кой :(

Данные перенести никак не получается (уж больно много человеко часов на это нужно)

За день, данные нужно перенести между 9 территориально удаленными базами
(вообщем этого пока никто не делает)
(а руководство требует чтобы это было...)

Сижу, Размышляю и пишу свою базу. Есть такие предпосылки.
Фирма занимается торговлей. Все предложения обсуждаются с клиентом в ходе беседы и специалист отдела продаж (как мне кажется) просто физически не может запомнить весь справочник предложений чтобы потом в нем что-то найти поиском. Все очень привыкли работать со справочниками в 1С. 1С - классная штука, много людей над ней потрудились - но для большой торговли, как я могу заметить, она маловата. Проблема в том что на одной из точек как раз и сидит больше 20 человек в базе одновременно и у нас все дико тормозит. Купили двухпроцессорный сервер - тормозит - сервер падает
:(.
Руководство жмется - поставить нормальную систему. А требований хоть отбавляй.
Поэтому, вооружившись VB.NET + MSSQL Server (можете смело охаить мой выбор) сижу и сочиняю.
Натворил примерно следующее: Есть справочники, Есть докумены - документ - это куча записей в разных таблицах, попробовал реализовать табличную часть как в 1С, у любой записи есть состояние действительна/недействительна/отменена, у любой записи есть атрибуты того где она была создана и когда изменялась, ни одна запись не может быть удалена пользователем (все это сделано для возможности переноса данных между различными источниками). И еще вся логика перенесена на SQLServer, изменяется все только через процедуры, целостность и правильность отслеживается триггерами - ужас как замучился.
Использую влоб модель ADO.NET.
Пока тормозит - поэтому и спрашиваю вашего совета.
16 сен 03, 12:56    [340437]     Ответить | Цитировать Сообщить модератору
 Re: как построить справочник на 20-100 тыс записей?  [new]
Ermak
Member

Откуда: Tomsk
Сообщений: 811
А что справочные данные такого объема нельзя упорядочить по типам, группам, видам, производителям, моделям, и т.д.?

Если можно, то справочник скорее всего будет иметь иерархическую структуру. Ну и естественно кроме навигации по иерархии никто не отменял глобальный поиск во всем справочнике, причем кроме кода, поиск должен быть также и по наименованию (и... собственно в идеале по всем аттрибутам элемента справочника).

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

PS Для меня отбор - это запрос к серверу, а фильтр соответственно результат работы с данными на клиенте.
16 сен 03, 13:08    [340465]     Ответить | Цитировать Сообщить модератору
 Re: как построить справочник на 20-100 тыс записей?  [new]
Александрик
Member

Откуда:
Сообщений: 43
для Ermark
Первое пишу базу я - один. Знаний мало, времени мало. Гораздо легче все хранить в одной или паре взаимосвязанных таблиц. Легче для меня. Справочникb получаются типа - универсальный...

Второе. Представьте себе такое - рассказать пользователю что: "Для того, чтобы вы видели данные такими, какими вы их хотите видеть, вам следует настроить фильтр.". Максимум что я могу - создать им несколько готовых фильтров.

Третье. Справочники конечно же Иерархические с огромным количеством полей.
16 сен 03, 13:24    [340500]     Ответить | Цитировать Сообщить модератору
 Re: как построить справочник на 20-100 тыс записей?  [new]
andy753
Member

Откуда: Moscow
Сообщений: 368
Вот так и 1С писалась наверное :))
16 сен 03, 13:47    [340580]     Ответить | Цитировать Сообщить модератору
 Re: как построить справочник на 20-100 тыс записей?  [new]
Andrey
Member

Откуда: Germany. SAP
Сообщений: 371
в любом случае перкачивать данные на клиент смысла нет.
грамотно построенная таблица и оптимизированные запросы дадут вам более высоку производительность по сравнению с обработкой на клиенте.

определите критерии возможных поисков (ну не ищут же юзера по всем полям в таблице. если даже их не страивает поиск по коду предложите несколько полей). в любом случае выборку надо сокращать в разы. Как справедливо заметил Дмитрий "не в состоянии "быстро просмотреть" даже 10 тысяч записей, не говоря уже о 100 тыс"
16 сен 03, 14:06    [340641]     Ответить | Цитировать Сообщить модератору
 Re: как построить справочник на 20-100 тыс записей?  [new]
Varan
Member

Откуда:
Сообщений: 1258
Andrey, "в любом случае перкачивать данные на клиент смысла нет. "
Предположим, идет обработка какой-то статистики, причем варианты расчета часто изменяются. Новый расчет нужен 1-2 пользователям, подключенным к хранилищу (остальные заняты его заполнением). При каждом новом изменении придется каждый раз менять БД на сервере - писать какие-то там процедуры, и.т.п. Не понимаю, чем плохо вытащить с сервера нужные строки и обработать их на клиенте? В таком вырианте пользователь получает свой расчет "прошитый" в клиентском интерфейсе, что очень удобно в плане "обновления версий". БД на сервере используется как "кладбище данных".
Все с кем я обсуждал этот вопрос, заявляют, что я не прав, но ничьи аргументы меня пока не разубедили в порочности данного подхода.
16 сен 03, 15:32    [340895]     Ответить | Цитировать Сообщить модератору
 Re: как построить справочник на 20-100 тыс записей?  [new]
Александрик
Member

Откуда:
Сообщений: 43
Идея обработки и, вообще, работы с данными на машине клиента мне очень нравиться.
Не могу заявлять - что это самый оптимальный вариант на все случаи жизни... Но, для данных небольшого размера, мне кажется что один из самых быстрых...


еще обдумываю такой вариант: у каждого клиента поставить SQL Server 2000 Personal Edition и устроить репликацию данных с центральным сервером... Однако теряюсь вдогадках что для этого придется сделать...
16 сен 03, 16:23    [341035]     Ответить | Цитировать Сообщить модератору
 Re: как построить справочник на 20-100 тыс записей?  [new]
Jinn
Member

Откуда: С-Петербург
Сообщений: 204
2 Александрик

Не берись. 1С действительно не годится для больших торговых предприятий, сам на эти грабли напоролся :( Но и одному тебе такую систему, тем более без глубоких знаний, не поднять. Так что требуй у руководства бюджет и ...

1. Подобрать готовое и довернуть для своих нужд.
2. Пригласить спецов и сляпать основу затем самому доделать.
16 сен 03, 17:31    [341228]     Ответить | Цитировать Сообщить модератору
 Re: как построить справочник на 20-100 тыс записей?  [new]
andy753
Member

Откуда: Moscow
Сообщений: 368
ТО Varan: Интересный подход :)) То есть (правильно-ли я понял?) вы предлагаете всю БД на клиента тащить? Бред полный!!!

Если есть часто меняющаяся аналитическая часть - ставьте отдельную базу (на отдельный сервак даже можно), делайте реплику (заодно и данные можно предварительно обработать) и запускайте свои динамические отчеты.

А Обработка данных на клиенте - извините, заставляет машину на клиентах ставить как сервер СУБД а то и еще покруче... Проходили такой вариант, а потом 50 юзеров требуют себе 2-4 процессорные машины...

Вообще-то это целая отрасль IT (DataMining, DataWarehousing, ...) Советую глубже вникнуть в проблему... Не все же фоксом решать :)
16 сен 03, 18:33    [341353]     Ответить | Цитировать Сообщить модератору
 Re: как построить справочник на 20-100 тыс записей?  [new]
Александрик
Member

Откуда:
Сообщений: 43
Хотел дополнить про свою проблему...

считаю что разрабатываемая мною система "тормозит" - если справочник открывается несколько секунд... (в моем случае от 5 до 10 секунд)... Проблемы в сети... - считаю это для себя не приемлемым
16 сен 03, 19:06    [341412]     Ответить | Цитировать Сообщить модератору
 Re: как построить справочник на 20-100 тыс записей?  [new]
Ermak
Member

Откуда: Tomsk
Сообщений: 811
"Первое пишу базу я - один. Знаний мало, времени мало. Гораздо легче все хранить в одной или паре взаимосвязанных таблиц. Легче для меня. Справочникb получаются типа - универсальный...

Второе. Представьте себе такое - рассказать пользователю что: "Для того, чтобы вы видели данные такими, какими вы их хотите видеть, вам следует настроить фильтр.". Максимум что я могу - создать им несколько готовых фильтров.

Третье. Справочники конечно же Иерархические с огромным количеством полей."

Ну и отлично.

1.
У меня стояла задача импортировать в складскую задчу справочник товаров из 1С. Информационных баз 1С имеется 2 штуки, но слава богу справочник товаров пополняется только в одной из них, а во второй только синхронизируется с первой. Дабы пользователям было сухо и комфортно решил внешний вид оставить максимально приближенным к тому внешнему виду, который имеет место быть в 1С, т.е. для отображения пришлось использовать listview. Сразу же оговорюсь, что все это делал в PowerBuilder. Пришлось отталкиваться от структуры которая есть в 1С (sc33.dbf) . Для формирования списка справочника не нужно в него запихивать все имеющиеся информационные поля, для моего случая оказалось, что вполне можно обойтись полями: код, наименование, остаток, ед. изм. Полную-развернутую информацию о конкретном элементе справочника можно будет вывести в отдельном окне при двойном щелчке на нем или при нажатии Enter.

2. И самое главное - это сделал нужный отбор по полям: код и наименование.
Результат отбора выводится в этот же listview (листвью отображает все позиции удовлетворяющие условию отбора. В принципе размер можно ограничить например выборкой первых 100 элементов, если это необходимо).

Представь, что мне нужно промаркировать и принять на склад товар, с хрен знает каким названием, которое было продублировано из счета поставщика лет 5 назад. Как он называется в справочние кладовщик знает (но он в отпуске), а я нет. Читаю на упаковке наименование производителя и делаю отбор по ключевым словам. Например на картридже вижу: "c6615de", в поле поиска ввожу: "6615". Результатом поиска является 1-на запись: "Cartrige DJ 840C (C6615D)". Если ищу "usb flash drive...", то просто набираю: "flash" и получаю список из 13 позиций из которых 5 - это usb drive разной емкости. Но все это на умещается на одной странице и нет никакой необходимости что-то ещё листать. По моему совсем не сложно. В общем что я агитирую за Советскую власть?

3.
Синхронизация справочника 1С (DBF) --> ASA (SQL) занимает ~5 - 7 cек и в моем случае производится по требованию пользоватея, если небходимо, то нажимает кнопку в спрвочнике.
Доступ к данным идет через ODBC.
16 сен 03, 22:10    [341579]     Ответить | Цитировать Сообщить модератору
 Re: как построить справочник на 20-100 тыс записей?  [new]
Ermak
Member

Откуда: Tomsk
Сообщений: 811
Клиенту в моем случае передаются данные только текущего уровня справочника, Формирование происходит с помощью Stored Procedure на стороне SQL. Отбор формируется также с помощью Stored Procedure.

Вся разработка заняла дня 3-4, отладка еще несколько дней. Работал один.
16 сен 03, 22:17    [341585]     Ответить | Цитировать Сообщить модератору
 Re: как построить справочник на 20-100 тыс записей?  [new]
Balashov Denis
Member

Откуда: Челябинск
Сообщений: 35
Я бы собрал информацию о том, что реально надо для решения этой проблемы - деньги, люди, оборудование - и поставил руководство перед фактом. Что НАДО.
17 сен 03, 12:02    [342125]     Ответить | Цитировать Сообщить модератору
 Re: как построить справочник на 20-100 тыс записей?  [new]
_ChaiNik
Member

Откуда: Сибирь, матушка/Москва теща
Сообщений: 235
>Хотел дополнить про свою проблему...
>считаю что разрабатываемая мною система "тормозит" - если справочник >открывается несколько секунд... (в моем случае от 5 до 10 секунд)... >Проблемы в сети... - считаю это для себя не приемлемым

Что значит "открывается"? Похоже, действительно на клиента перетягивается весь "справочник" (таблица), а это - нарушение концепции клиент-сервер и причина тормозов
17 сен 03, 14:02    [342522]     Ответить | Цитировать Сообщить модератору
 Re: как построить справочник на 20-100 тыс записей?  [new]
Varan
Member

Откуда:
Сообщений: 1258
andy753,
Есть у меня литература по хранилищам, вот только проблема тут в том, что надо немного перестроить свои файл-серверные мозги на новый лад, а для этого надо попробовать что-либо изобразть в "новом стиле", а на это, пока, к сожалению, нет времени :-(
17 сен 03, 17:41    [343121]     Ответить | Цитировать Сообщить модератору
 Re: как построить справочник на 20-100 тыс записей?  [new]
Александрик
Member

Откуда:
Сообщений: 43
to Ermak
читаю твою фразу:
"Пришлось отталкиваться от структуры которая есть в 1С (sc33.dbf)"

и думаю, что где-то я ошибаюсь...
для работы с SQL Server Я создаю объект "SQLDMO.SQLServer" в 1С, дальше создаю подключение и получаю или отправляю нужные данные. А дальше Метаданных никуда не заглядываю...

читаю твою фразу и думаю что в чем-то я ошибаюсь...
Вопрос такой: как обновить данные в базе 1С без 1С? Этот вопрос можно интерпретировать так: как можно разобраться в той базе (хранилеще данных), которую создает 1С?
17 сен 03, 19:44    [343332]     Ответить | Цитировать Сообщить модератору
 Re: как построить справочник на 20-100 тыс записей?  [new]
Gennady_2
Guest
1c - с ходу не разберешся. Почти вся база построена на внутренних связях.
1Эсники рискуют лезть туда только после продолжительной работы с ней.
Посмотри "1с-Предприятие 7.х" часть 2, Гусев А.А.
17 сен 03, 21:24    [343430]     Ответить | Цитировать Сообщить модератору
 Re: как построить справочник на 20-100 тыс записей?  [new]
Ermak
Member

Откуда: Tomsk
Сообщений: 811
Похоже говорим на разные темы.

Давайте уточнимся.
Какая стоит задача?

Вначале я подумал, что Вы пытаетесь разобраться как в целом подойти к решению проблемы создания справочника большого объема?

Потом мне показалось, что кроме 1С есть ещё какая-то система, в которую необходимо импортировать один из существующих в 1С справочников?

Похоже я упорно что-то недогоня. Поробуйте ещё раз поточнее сформулировать свою задачу в целом и про справочник в частности, а то как говаривал М. Зощенко: "Воображение рисует картины..."
18 сен 03, 12:38    [344111]     Ответить | Цитировать Сообщить модератору
 Re: как построить справочник на 20-100 тыс записей?  [new]
Александрик
Member

Откуда:
Сообщений: 43
для Ermak

просто решаю много проблем сразу (боюсь - обожгусь)

1. Пытаюсь найти механизм - способ - синхранизации данных между разными базами 1С. Нужно очень.
2. Реально работающий механизм найти не могу. Есть куча глюков... Пишу свою базу, соответствующую задачам фирмы.
3. Знаний не хватает - иду на форум. Вижу что кто-то просматривает структуру БАЗЫ - (просматривают dbf) - возникает вопрос... как это сделать... Может быть можно остановиться на п. 1.
18 сен 03, 13:07    [344168]     Ответить | Цитировать Сообщить модератору
 Re: как построить справочник на 20-100 тыс записей?  [new]
PL99
Member

Откуда: Moscow
Сообщений: 1367
Слышал я, что в 1С есть механизм синхронизации. Может не здесь спрашивать надо, а у специалистов по 1С?
18 сен 03, 20:46    [345014]     Ответить | Цитировать Сообщить модератору
 Re: как построить справочник на 20-100 тыс записей?  [new]
Ermak
Member

Откуда: Tomsk
Сообщений: 811
2Александрик
"1. Пытаюсь найти механизм - способ - синхранизации данных между разными базами 1С. Нужно очень.
2. Реально работающий механизм найти не могу. Есть куча глюков... Пишу свою базу, соответствующую задачам фирмы."

1. Для того чтобы синхронизировать справочники, необходимо во первых найти записи, которые были изменены. Ну не тащить же весь справочник черти знает какого объема по сети , интернету и т.д.?

Для этого в принципе можно:
-- Написать какую-то обработку в самом 1С при записи изменений
-- Проводить мониторинг лога работы 1С, в котором также будет отражен факт изменения в справочнике, с точностью до кода элемента. Лично я выбрал этот вариант.

2. После того как определились с механизмом регистрации изменений необходимо определиться с export'ом и import'ом.
Проблем с извлеченим данных как правило не возникает, т.к место хранения данных известно, то можно допустим подкл. через ODBC и через SELECT получить то что нам нужно. С импортом не все так просто.
Даже если база источник 1С и целевые базы имеют одинаковую структуру, использование простого SELECT'а и INSERT'а невозможно из за того что что внутренние идентификаторы у баз будут различными. Поэтому импорт данных лучше проводить средствами самой 1С. Если несколько баз находятся в одной ЛВС и требуется мгновенная синхронизация, то можно использовать тот факт, что 1С может выступать в роли OLE Automated server'a.

Итак твое приложение должно:
1. Проводить мониторинг лога базы источника 1С
2. Уметь выбирать из этой базы измененные данные и формировать файл изменений
3. Уметь запускать целевую базу 1С и внедрять данные из файла изменений
4. Проводить мониторинг подключений к целевой базе 1С и в случае выхода всех пользователей уметь сворачивать запущенную копию 1С.

PS. Файл описывающий структуру файлов данных 1С называется 1cv7.dd
Однако константы и перечисления находятся в файле метаданных, которое
является OLE STORAGE файлом.
19 сен 03, 07:04    [345177]     Ответить | Цитировать Сообщить модератору
Все форумы / Проектирование БД Ответить