Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Sybase SQLANY 5 / 20 сообщений из 20, страница 1 из 1
26.10.2004, 15:32
    #32755185
hurr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Sybase SQLANY 5
Помогите люди добрые советом.

Есть база - крутится на SQLANY 5
Появилась необходимость - загрузить в нее около 700 000 строк (люди их ФИО и некие данные) . Этот волшебный список вышестоящая организация выдает в виде DBFного файла. Будет еще больше около 1-2 милионов видимо.

В из програмы работающей с SQLANY потом будут "работать" с этим списком - производить поиск по нему по фамилии.Только поиск и все (SELECT ...FROM ...WHERE FIO LIKE ...)
Большего и не нужно.
Изначально думал сделать поиск в самом DBF файле - ходить к нему как к ODBC , но там неприемлемо долго работает поиск :(
Предпологается что данный сисок будет обновлятся раз в месяц.
Данные то грузятся быстро, а вот построение индекса хотя бы по одной фамилии только ( тип колонки varchar(25) ) - страшно долго происходит.
Првые 200 000 строк около 30 минут.
Потом страшно уменьшается быстродействие - за следущие 30 минут загружается только 100 000 ....
Видимо за следущие 30 минут только 50 000...

Что то мне это напоминает какю то задачу , где бегун никак не мог догнать черепаху а только бесконечно близко приближался к ней .
...
Рейтинг: 0 / 0
26.10.2004, 15:47
    #32755227
Dim2000
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Sybase SQLANY 5
Для начала - какое железо (может, оно больше не вытянет), какие настройки сервера.
...
Рейтинг: 0 / 0
26.10.2004, 15:50
    #32755237
ASCRUS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Sybase SQLANY 5
Во первых - такие большие массивы данных не рекомендуется загружать insert-ом в пределах одной транзакции. Необходимо или конвертировать DBF в текстовые файлы с разделителями и грузить их с помощью оператора массовой загрузки LOAD TABLE. Второй вариант - грузить их порциями, после каждой порции делая COMMIT.

Во вторых - я не очень понимаю, как это - данные быстро грузятся, а потом индексы строятся долго и где это Вы видите процесс построения индекса в ASA ? По моему команда CREATE INDEX срабатывает молча, впервый раз слышу, чтобы она клиенту во времени показывала, сколько данных было проиндексировано. Обьясните подробно, что конкретно Вы имели ввиду под "тормозит индексирование таблицы".

В третьих - необходимо уточнение по поводу поиска LIKE - используется ли LIKE со статичной левой частью (в виде LIKE 'Иванов%') или же могут искаться словосочетания в любой части ФИО ('%Петр%'). Учтите, что во втором случае индекс не будет использоваться вообще.
...
Рейтинг: 0 / 0
27.10.2004, 06:41
    #32756035
old_joy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Sybase SQLANY 5
При загрузке таких массивов данных рекомендуется использовать ключик -b
...
Рейтинг: 0 / 0
27.10.2004, 06:44
    #32756036
E-doc
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Sybase SQLANY 5
Ага, знакомо это. Грузил я как-то несколько раз по два миллиона записей в таблицу-справочник, в котором было два или три индекса создано. Абсолютно аналогичная ситуация была. Сначала бодро грузит, потом тупеет постепенно, а потом все идут курить часа на полтора. Кончилось тем, что взял пустую базу (благо была копия) и убил на этой таблице все индексы. Загрузил данные, создал индексы. Вышло быстрее гораздо.
...
Рейтинг: 0 / 0
27.10.2004, 06:49
    #32756038
E-doc
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Sybase SQLANY 5
old_joyПри загрузке таких массивов данных рекомендуется использовать ключик -bИнтересно... Это ключик чего? Сервера?
...
Рейтинг: 0 / 0
27.10.2004, 06:52
    #32756040
old_joy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Sybase SQLANY 5
И на счет железа. Под индексы хорошо бы отдельный винт сделать.
...
Рейтинг: 0 / 0
27.10.2004, 06:54
    #32756041
hurr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Sybase SQLANY 5
По "железо" - на местах это будут допотопные в мед учреждении машины. А тормозит так дико оно у меня на машине на П4
А на местах - вообще П166MMX

Попробую внести ясность , чесно говоря в шоке был вчера , бестолково объяснил...
Делал так - сначала при помощи Pipline их PowerBuilder - залил в табличку данные. Предполагается что это же пользователи будут делать сами.
Дали им DBF файл , они в програме ткнули "Обновить список "
и програма залила в базу новый список. Вот. Залились данные на удивление быстро.
Потом думаю - создам индекс .... Ага прям из программы сделал "CREATE INDEX ... " и терпения моего не хватило дождаться окончания данного процесса. Что ж думаю пойдем другим путем - СНАЧАЛА в пустой табличке создадим ИНДЕКС а уже потом PIPLINE-ом будем заливать туда данные.
Вот в этом месте то и показывает PIPLINE сколько строк загружено.

>LIKE со статичной левой частью (в виде LIKE 'Иванов%')
В идеале - поиск по Фамилии или по Фамилии и Имени и по номеру страхового полиса. Номер страховой - число индекс моментально создается он же PK
Понятно что еще и по имени хотелось бы индекс ....

Тут еще такая проблема - тот кто нам дает DBF , не проверяет что б колонка например с номером полиса была уникальной. То есть мне проще залить в свою базу , сделать индексы по нужным для поиска колонкам.
И пусть пользователи уже визуально выбирают кого их людей им нужно взять.
Updаte-ы никто не будет делать в этих табличках проэтому наличие в них PK y не так не важно, главное чтоб поиск можно было выполнить.
...
Рейтинг: 0 / 0
27.10.2004, 06:58
    #32756043
old_joy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Sybase SQLANY 5
E-docИнтересно... Это ключик чего? Сервера?
Да, сервера, но лучше использовать dbeng - все равно никто к базе не подключиться.
E-docАга, знакомо это. Грузил я как-то несколько раз по два миллиона записей в таблицу-справочник, в котором было два или три индекса создано. Абсолютно аналогичная ситуация была. Сначала бодро грузит, потом тупеет постепенно, а потом все идут курить часа на полтора. Кончилось тем, что взял пустую базу (благо была копия) и убил на этой таблице все индексы. Загрузил данные, создал индексы. Вышло быстрее гораздо.
Нужно было сразу увеличить dbspace. В таких случаях очень много времени уходит на увеличение файла db.
...
Рейтинг: 0 / 0
27.10.2004, 07:51
    #32756058
ASCRUS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Sybase SQLANY 5
Мда, была бы 9-ая версия, можно было бы много чего сделать как в плане загрузки данных, так и индексирования и поиска.
...
Рейтинг: 0 / 0
27.10.2004, 09:19
    #32756145
old_joy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Sybase SQLANY 5
ASCRUSМда, была бы 9-ая версия, можно было бы много чего сделать как в плане загрузки данных, так и индексирования и поиска.
Например?
...
Рейтинг: 0 / 0
27.10.2004, 10:00
    #32756222
ASCRUS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Sybase SQLANY 5
Например LOAD TABLE который миллионы записей загрузит за считанные минуты, темповые таблицы NOT TRANSACTIONAL не участвующие в логе и очень быстро работающие, возможность делать индексы на вычисляемые поля, где можно было бы проиндексировать не всю ФИО, а только например первые 3 буквы фамилии и искать как (c_FIO = Left(@Param, 3) AND FIO LIKE @Param || '%'), что сьэкономило бы размер индекса и ускорило операции как вставок, так и поиска, и т.д. и т.п. - в 9-ке очень много расширений и изменений по сравнению с той же 7-кой, не говоря о 5-ке.
...
Рейтинг: 0 / 0
27.10.2004, 10:29
    #32756293
L0cat0r
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Sybase SQLANY 5
Load table прекрасно работает на 5
и существующий индекс(ы) влияет там только на то,
что по окончании работы лоада он будет построен по загруженным данным.

Если не используется лоад то при загрузке больших объемов на 5 возникают тормоза, которые лечатся примерно так :
входящий поток бъется на несколько частей
(допустим используем курсор по первой букве фамилии - для Вас подойдет)
после вставки порции - обязательно COMMIT
, после него скорость вставки поднимается до изначальной.
Тоже касается операций удаления

Удачи !
...
Рейтинг: 0 / 0
27.10.2004, 12:28
    #32756682
E-doc
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Sybase SQLANY 5
L0cat0rпосле вставки порции - обязательно COMMIT, после него скорость вставки поднимается до изначальной.
Дык товарищ использует PowerBuilder-овский pipeline. Там насколько я помню настраивается этот самый размер проции, то бишь когда commit делать. Видать не помогает. И вообще похоже проблема только в том что на рабочих машинах конфигурация устаревшая.
...
Рейтинг: 0 / 0
27.10.2004, 13:07
    #32756852
hurr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Sybase SQLANY 5
Пасибо за внимание отцы !

Ща вроде все устаканивается - мои косяки обнаружились.

Все таки не хохота мне это г.....о чужое в свою базу грузить.
Нашел подходящие драйвера для DBF файликов. Там еще проблема была.
Прога под винду, а в базе DOS кодировка. Соответствено всякая фигня вместо фамилий виделась.
Кроме того СТРУКТУРА этой таблички по последним разведданым в любой момент может поменяца.
Вроде все таки щас я прикручу к этой табличке индексы (чеж придеца небольшой механизм отслеживания\обновления их сделать) и буду отдельным конектом как к ODBC источнику ходить :)
Щас потестил 6 сек - IMHO время поиска по фамилии вполене приемлемое ...
Тем более на 32 мегах памяти .

PS
Плохо иметь быструю машину на работе . Что есть индекс, что нет - у меня все быстро искалось :)
Надо утащить быструю машину домой для игр...
...
Рейтинг: 0 / 0
27.10.2004, 13:11
    #32756873
Dim2000
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Sybase SQLANY 5
hurrНашел подходящие драйвера для DBF файликов. Там еще проблема была.
Прога под винду, а в базе DOS кодировка. Соответствено всякая фигня вместо фамилий виделась.
Всех на свете драйверов для DBF не видел (ну не люблю я их :)), но в DataDirect-овских, что из комплекта ПоверБилдера, можно указать транслятор.
...
Рейтинг: 0 / 0
27.10.2004, 13:13
    #32756884
hurr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Sybase SQLANY 5
L0cat0rLoad table прекрасно работает на 5
и существующий индекс(ы) влияет там только на то,
что по окончании работы лоада он будет построен по загруженным данным.



Вот разберусь проведу экспримент ... Интересно будет замерить скорость
Вот тока как из DBF текст для загрузки "LOAD TABLE" получить(лехко и просто имелось в виду)...где то у меня старая клиперистская утилитка dbu валялась ...
...
Рейтинг: 0 / 0
27.10.2004, 17:27
    #32757709
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Sybase SQLANY 5
hurr
Вот разберусь проведу экспримент ... Интересно будет замерить скорость
Вот тока как из DBF текст для загрузки "LOAD TABLE" получить(лехко и просто имелось в виду)...где то у меня старая клиперистская утилитка dbu валялась ...
Ну dbu здесь не поможет. Лучше взять dBaseIII или его потомков (FoxPro например). Там есть команда .... за давностию лет уже не помню :( В общем есть там специальная команда которая делает выгрузку DBF в CSV формат. А в dbu эту команду никто не удосужился прикрутить. Впрочем можешь взять Клиппер и написать программу из одной команды :)
Вообще, для LOAD TABLE достаточно сделать простой текстовый файл, каждая запись на отдельной строке, каждое поле разделено запятыми, текстовые поля квотятся одинарными или двойными кавычками. В общем, соверешенно стандартный CSV формат.

Я подобную задачу решал при помощи самописной программы (Ansi C) с собственной библиотечкой чтения DBF. Программа читала 20-30 таблиц, делала необходимую конвертацию данных, исправляла самые распространенные опечатки и тд и тп. Потом через INSERT заливала данные в ASA7. Весь поток данных резался на блоки описывающие жизнедеятельность одного клиента и после каждого такого блока - commit work; Два гигабайта данных заливалось примерно за три-четыре часа в пустую базу, потом создавались индексы. В условии паралельной жизни Клипперовского и PowerBuilder/ASA проектов четыре часа на еженочную конвертацию данных было вполне нормально :) Примерно два года в таком режиме жили, пока Клипперовский вариант не был отправлен на пенсию :)
...
Рейтинг: 0 / 0
28.10.2004, 11:24
    #32758655
VadimS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Sybase SQLANY 5
в FoxPro чтобы выгрузить dbf файл в текстовый нужно:
1. Открыть таблицу
2. выгрузить
Код: plaintext
1.
2.
 Use имяфайла.dbf
 Copy to имякуда.dat DELIMITED
только могут быть проблемы, при импорте на сервер, если есть поля с датами и они пустые (не NULL, а именно пустые { . . } )
...
Рейтинг: 0 / 0
04.11.2004, 18:56
    #32769514
Григорий Ксендзовский
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Sybase SQLANY 5
Мне также довелось однажды грузить 5.5 млн записей телефонной базы из dbf
от старого досовского тупого фокса типа 2.5 или 2.6. Делать это куда лучше
не прямо из dbf (хороших дров не найдёте, все оне кривые и косые, прежде
всего не понимают сибэйсовской команды пайп. Далее -- действительно после
какого-то к-ва INSERT'ов начинает тормозить загрузка. Надеюсь, база у тебя
с логом? Есть смысл поставить ограничение на к-во зап (напр., 100 тыс), после
чего выйти и грохнуть лог к чертям. Тогда начнёт шевелить быстрее.
Сейчас .csv из .dbf умеет делать кто угодно, вплоть до EXCEL. На мой взгляд
лучше взять VFP что-нибудь версии типа 5 и русифицированную; но это
безразлично. Все они работают очень быстро. А вот вместо LIKE с хвостиком
или без рекомендую почитать про функцию LOСATE, а затем экспериментально
посмотреть скорость.
...
Рейтинг: 0 / 0
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Sybase SQLANY 5 / 20 сообщений из 20, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]