|
|
|
Sybase SQLANY 5
|
|||
|---|---|---|---|
|
#18+
Помогите люди добрые советом. Есть база - крутится на 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... Что то мне это напоминает какю то задачу , где бегун никак не мог догнать черепаху а только бесконечно близко приближался к ней . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2004, 15:32 |
|
||
|
Sybase SQLANY 5
|
|||
|---|---|---|---|
|
#18+
Для начала - какое железо (может, оно больше не вытянет), какие настройки сервера. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2004, 15:47 |
|
||
|
Sybase SQLANY 5
|
|||
|---|---|---|---|
|
#18+
Во первых - такие большие массивы данных не рекомендуется загружать insert-ом в пределах одной транзакции. Необходимо или конвертировать DBF в текстовые файлы с разделителями и грузить их с помощью оператора массовой загрузки LOAD TABLE. Второй вариант - грузить их порциями, после каждой порции делая COMMIT. Во вторых - я не очень понимаю, как это - данные быстро грузятся, а потом индексы строятся долго и где это Вы видите процесс построения индекса в ASA ? По моему команда CREATE INDEX срабатывает молча, впервый раз слышу, чтобы она клиенту во времени показывала, сколько данных было проиндексировано. Обьясните подробно, что конкретно Вы имели ввиду под "тормозит индексирование таблицы". В третьих - необходимо уточнение по поводу поиска LIKE - используется ли LIKE со статичной левой частью (в виде LIKE 'Иванов%') или же могут искаться словосочетания в любой части ФИО ('%Петр%'). Учтите, что во втором случае индекс не будет использоваться вообще. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2004, 15:50 |
|
||
|
Sybase SQLANY 5
|
|||
|---|---|---|---|
|
#18+
При загрузке таких массивов данных рекомендуется использовать ключик -b ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.10.2004, 06:41 |
|
||
|
Sybase SQLANY 5
|
|||
|---|---|---|---|
|
#18+
Ага, знакомо это. Грузил я как-то несколько раз по два миллиона записей в таблицу-справочник, в котором было два или три индекса создано. Абсолютно аналогичная ситуация была. Сначала бодро грузит, потом тупеет постепенно, а потом все идут курить часа на полтора. Кончилось тем, что взял пустую базу (благо была копия) и убил на этой таблице все индексы. Загрузил данные, создал индексы. Вышло быстрее гораздо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.10.2004, 06:44 |
|
||
|
Sybase SQLANY 5
|
|||
|---|---|---|---|
|
#18+
old_joyПри загрузке таких массивов данных рекомендуется использовать ключик -bИнтересно... Это ключик чего? Сервера? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.10.2004, 06:49 |
|
||
|
Sybase SQLANY 5
|
|||
|---|---|---|---|
|
#18+
И на счет железа. Под индексы хорошо бы отдельный винт сделать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.10.2004, 06:52 |
|
||
|
Sybase SQLANY 5
|
|||
|---|---|---|---|
|
#18+
По "железо" - на местах это будут допотопные в мед учреждении машины. А тормозит так дико оно у меня на машине на П4 А на местах - вообще П166MMX Попробую внести ясность , чесно говоря в шоке был вчера , бестолково объяснил... Делал так - сначала при помощи Pipline их PowerBuilder - залил в табличку данные. Предполагается что это же пользователи будут делать сами. Дали им DBF файл , они в програме ткнули "Обновить список " и програма залила в базу новый список. Вот. Залились данные на удивление быстро. Потом думаю - создам индекс .... Ага прям из программы сделал "CREATE INDEX ... " и терпения моего не хватило дождаться окончания данного процесса. Что ж думаю пойдем другим путем - СНАЧАЛА в пустой табличке создадим ИНДЕКС а уже потом PIPLINE-ом будем заливать туда данные. Вот в этом месте то и показывает PIPLINE сколько строк загружено. >LIKE со статичной левой частью (в виде LIKE 'Иванов%') В идеале - поиск по Фамилии или по Фамилии и Имени и по номеру страхового полиса. Номер страховой - число индекс моментально создается он же PK Понятно что еще и по имени хотелось бы индекс .... Тут еще такая проблема - тот кто нам дает DBF , не проверяет что б колонка например с номером полиса была уникальной. То есть мне проще залить в свою базу , сделать индексы по нужным для поиска колонкам. И пусть пользователи уже визуально выбирают кого их людей им нужно взять. Updаte-ы никто не будет делать в этих табличках проэтому наличие в них PK y не так не важно, главное чтоб поиск можно было выполнить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.10.2004, 06:54 |
|
||
|
Sybase SQLANY 5
|
|||
|---|---|---|---|
|
#18+
E-docИнтересно... Это ключик чего? Сервера? Да, сервера, но лучше использовать dbeng - все равно никто к базе не подключиться. E-docАга, знакомо это. Грузил я как-то несколько раз по два миллиона записей в таблицу-справочник, в котором было два или три индекса создано. Абсолютно аналогичная ситуация была. Сначала бодро грузит, потом тупеет постепенно, а потом все идут курить часа на полтора. Кончилось тем, что взял пустую базу (благо была копия) и убил на этой таблице все индексы. Загрузил данные, создал индексы. Вышло быстрее гораздо. Нужно было сразу увеличить dbspace. В таких случаях очень много времени уходит на увеличение файла db. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.10.2004, 06:58 |
|
||
|
Sybase SQLANY 5
|
|||
|---|---|---|---|
|
#18+
Мда, была бы 9-ая версия, можно было бы много чего сделать как в плане загрузки данных, так и индексирования и поиска. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.10.2004, 07:51 |
|
||
|
Sybase SQLANY 5
|
|||
|---|---|---|---|
|
#18+
ASCRUSМда, была бы 9-ая версия, можно было бы много чего сделать как в плане загрузки данных, так и индексирования и поиска. Например? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.10.2004, 09:19 |
|
||
|
Sybase SQLANY 5
|
|||
|---|---|---|---|
|
#18+
Например LOAD TABLE который миллионы записей загрузит за считанные минуты, темповые таблицы NOT TRANSACTIONAL не участвующие в логе и очень быстро работающие, возможность делать индексы на вычисляемые поля, где можно было бы проиндексировать не всю ФИО, а только например первые 3 буквы фамилии и искать как (c_FIO = Left(@Param, 3) AND FIO LIKE @Param || '%'), что сьэкономило бы размер индекса и ускорило операции как вставок, так и поиска, и т.д. и т.п. - в 9-ке очень много расширений и изменений по сравнению с той же 7-кой, не говоря о 5-ке. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.10.2004, 10:00 |
|
||
|
Sybase SQLANY 5
|
|||
|---|---|---|---|
|
#18+
Load table прекрасно работает на 5 и существующий индекс(ы) влияет там только на то, что по окончании работы лоада он будет построен по загруженным данным. Если не используется лоад то при загрузке больших объемов на 5 возникают тормоза, которые лечатся примерно так : входящий поток бъется на несколько частей (допустим используем курсор по первой букве фамилии - для Вас подойдет) после вставки порции - обязательно COMMIT , после него скорость вставки поднимается до изначальной. Тоже касается операций удаления Удачи ! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.10.2004, 10:29 |
|
||
|
Sybase SQLANY 5
|
|||
|---|---|---|---|
|
#18+
L0cat0rпосле вставки порции - обязательно COMMIT, после него скорость вставки поднимается до изначальной. Дык товарищ использует PowerBuilder-овский pipeline. Там насколько я помню настраивается этот самый размер проции, то бишь когда commit делать. Видать не помогает. И вообще похоже проблема только в том что на рабочих машинах конфигурация устаревшая. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.10.2004, 12:28 |
|
||
|
Sybase SQLANY 5
|
|||
|---|---|---|---|
|
#18+
Пасибо за внимание отцы ! Ща вроде все устаканивается - мои косяки обнаружились. Все таки не хохота мне это г.....о чужое в свою базу грузить. Нашел подходящие драйвера для DBF файликов. Там еще проблема была. Прога под винду, а в базе DOS кодировка. Соответствено всякая фигня вместо фамилий виделась. Кроме того СТРУКТУРА этой таблички по последним разведданым в любой момент может поменяца. Вроде все таки щас я прикручу к этой табличке индексы (чеж придеца небольшой механизм отслеживания\обновления их сделать) и буду отдельным конектом как к ODBC источнику ходить :) Щас потестил 6 сек - IMHO время поиска по фамилии вполене приемлемое ... Тем более на 32 мегах памяти . PS Плохо иметь быструю машину на работе . Что есть индекс, что нет - у меня все быстро искалось :) Надо утащить быструю машину домой для игр... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.10.2004, 13:07 |
|
||
|
Sybase SQLANY 5
|
|||
|---|---|---|---|
|
#18+
hurrНашел подходящие драйвера для DBF файликов. Там еще проблема была. Прога под винду, а в базе DOS кодировка. Соответствено всякая фигня вместо фамилий виделась. Всех на свете драйверов для DBF не видел (ну не люблю я их :)), но в DataDirect-овских, что из комплекта ПоверБилдера, можно указать транслятор. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.10.2004, 13:11 |
|
||
|
Sybase SQLANY 5
|
|||
|---|---|---|---|
|
#18+
L0cat0rLoad table прекрасно работает на 5 и существующий индекс(ы) влияет там только на то, что по окончании работы лоада он будет построен по загруженным данным. Вот разберусь проведу экспримент ... Интересно будет замерить скорость Вот тока как из DBF текст для загрузки "LOAD TABLE" получить(лехко и просто имелось в виду)...где то у меня старая клиперистская утилитка dbu валялась ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.10.2004, 13:13 |
|
||
|
Sybase SQLANY 5
|
|||
|---|---|---|---|
|
#18+
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 проектов четыре часа на еженочную конвертацию данных было вполне нормально :) Примерно два года в таком режиме жили, пока Клипперовский вариант не был отправлен на пенсию :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.10.2004, 17:27 |
|
||
|
Sybase SQLANY 5
|
|||
|---|---|---|---|
|
#18+
в FoxPro чтобы выгрузить dbf файл в текстовый нужно: 1. Открыть таблицу 2. выгрузить Код: plaintext 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2004, 11:24 |
|
||
|
Sybase SQLANY 5
|
|||
|---|---|---|---|
|
#18+
Мне также довелось однажды грузить 5.5 млн записей телефонной базы из dbf от старого досовского тупого фокса типа 2.5 или 2.6. Делать это куда лучше не прямо из dbf (хороших дров не найдёте, все оне кривые и косые, прежде всего не понимают сибэйсовской команды пайп. Далее -- действительно после какого-то к-ва INSERT'ов начинает тормозить загрузка. Надеюсь, база у тебя с логом? Есть смысл поставить ограничение на к-во зап (напр., 100 тыс), после чего выйти и грохнуть лог к чертям. Тогда начнёт шевелить быстрее. Сейчас .csv из .dbf умеет делать кто угодно, вплоть до EXCEL. На мой взгляд лучше взять VFP что-нибудь версии типа 5 и русифицированную; но это безразлично. Все они работают очень быстро. А вот вместо LIKE с хвостиком или без рекомендую почитать про функцию LOСATE, а затем экспериментально посмотреть скорость. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.11.2004, 18:56 |
|
||
|
|

start [/forum/topic.php?fid=55&msg=32756884&tid=2014108]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
155ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
56ms |
get tp. blocked users: |
1ms |
| others: | 14ms |
| total: | 272ms |

| 0 / 0 |

Извините, этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
... ля, ля, ля ...