Ассоциация ЭБНИТ    ИРБИС-корпорация    Вики-Ирбис    Online/CHM справка Ирбис   
Часто задаваемые вопросы (FAQ) :  ИРБИС Irbis
Исключительно важный раздел форума, который необходимо прочитать всем, кто только начинает работать с Ирбисом. Если ваши знания не так широки, как вам хотелось бы, тогда обязательно прочитайте этот раздел. Если вы не нашли, что искали, то воспользуйтесь поиском по форуму, и, скорее всего, вы найдете ответ на свой вопрос среди существующих сообщений. 
Ирбис и MySql - как?
Пользователь: Обухов Никита (IP-адрес скрыт)
Дата: 04, September, 2008 18:44

Доброго времени суток уважаемому сообществу,

Возник следующий вопрос - есть ли средства конвертации БД Ирбиса в MySql?

Возможно ли, не сильно углубляясь в суть, выполнить задачу по переносу данных из Ирбиса в MySql?

Если универсального средства не существует - какой простейший путь к решению проблемы?

Спасибо.

Re: Ирбис и MySql - как?
Пользователь: Обухов Никита (IP-адрес скрыт)
Дата: 04, September, 2008 18:49

Базу Ирбиса можно вывести в текстовый файл, если я правильно понимаю - вполне возможно написать простенькую программу и из этого текстового файла сделать текстовый файл SQL запроса.

Я думаю в правильном направлении? :)

UPD.

Более внимательно посмотрел текстовый файл - "простенькой программы" не получится :)

Оказывается, здесь объектная модель БД..



Редактировано 1 раз. Последний раз 04.09.2008 19:33 пользователем Обухов Никита.

Re: Ирбис и MySql - как?
Пользователь: Михайленко Илья (IP-адрес скрыт)
Дата: 05, September, 2008 07:56

Если не вдаваться в вопрос зачем это вообще нужно, можно создать таблицу вида
mfn,field,fieldocc,subfield,value

где
mfn=mfn записи
field - номер поля
fieldocc - номер повторения поля
subfueld - имя подполя
value - собссно значение.

Такую схему тестили еще в 1999 или 2000 году.
На маленьких базах еще ничего... А вот с большими уже совсем труба. В среднем, на БД менее 10 тыс записей ИРБИС получили около 1 млн строк такой таблицы. Скорость выполнения запросов нас ужаснула. Поигрались еще некоторое время с введением дополнительных индексов и таблиц, да и забросили это безнадежное дело. С увеличением БД скорость работы ИРБИС стала превышать скорость работы с такой таблицей сначала в разы, потом в десятки раз. До сотен раз не дошли - терпения и упорства не хватило :) Сейчас у нас БД суммарно более 500 тыс записей - можно лишь порадоваться что не стали больше гробить время :)

У Вас какая версия ИРБИС? 64 или 32? Если конечная задача перелития БД в MySQL - доступ к данным из php - пишите мне на email (moro@omsu.ru) - я занимаюсь как раз вопросами доступа из php к БД ИРБИС 64, web-ирбис и по протоколу z39.50.

Re: Ирбис и MySql - как?
Пользователь: Обухов Никита (IP-адрес скрыт)
Дата: 07, September, 2008 21:09

Спасибо за ответ.

У меня ИРБИС 64.

Собственно задача решена, поделюсь решением.

Задача: получить доступ с сайта библиотеки к ограниченной БД (нужна возможность поиска по базе CD/DVD, поиск по книжкам не нужен)

Суммарное число записей около 600.

Решение:


1. Экспортируем нужные нам записи в формате *xml.

2. Открываем их из Excel. Имея 600 записей я получил таблицу с 9000 записей. Здесь стоит отметить: максимальный размер таблицы в Excel 2^16 записей, так что если надо экспортировать более ~4000 записей, стоит искать другого решения.

3. Выбираем первичный ключ. Можно в качестве него использовать mfn.
В таком случае макрос VBA выглядит так:

 Sub DelRows()
   With Sheets("Имя_Листа")
   For xCounter = 1 To .Rows.Count
     If .Cells(xCounter, "A") = .Cells(xCounter + 1, "A") Then .Rows(xCounter).EntireRow.Delete
     Next xCounter
   End With

End Sub

Мне нужен был первичный ключ - инвентарный номер товара. Макрос такой:

 Sub DelRows()
   With Sheets("Имя_Листа")
   For xCounter = 1 To .Rows.Count
     If .Cells(xCounter, "AU") = "" Then .Rows(xCounter).EntireRow.Delete
     Next xCounter
   End With

End Sub

Пояснение: кто незнаком с VBA -- здесь .Cells(Номер_строки, Номер_столбца)

Здесь можно пойти попить кофию и немного поплясать с бубном -- макрос у меня выполнялся минут 20.

4. В результате из 9000+ записей я получил 600 записей, по одной для каждого объекта. Далее удаляем лишние столбцы -- для поиска по базе нужны, разумеется, не все поля. Я оставлял порядка 20 полей из 50 с чем-то.

5. Открываем Exlec'м таблицу users.xml из прикрепленного архива. Полученную нами таблицу сперва копируем в таблицу users.xml а затем сохраняем в формате XML-данные (!не таблица XML)

6. Скачиваем прикрепленный архив, в нем все что необходимо для конвертации XML - MySql и обратно (спасибо бразильским кодерам :) )

7. Распаковываем архив на наш локальный сервер, например, /localhost/tools/xml2mysql

8. Вставляем наш XML файл в эту же папку, переименовываем в user.xml -- или копаемся в коде и меняем все как надо.

9. Создаем в phpmyadmin базу icorp_master и таблицу users -- потом можно поменять.

10. Выполняем SQL-запрос users.sql - он в прикрепленном архиве. Создастся таблица примера. В ней меняем типы данных полей, добавляем/удаляем -- потом можно будет поменять и названия.



11. Исполняем скрипт example_xml_to_mysql.phtml -- имеет смысл предварительно увеличить время выполнения скриптов в php.ini
Скрипт пишет логи, если что-то не будет работать, можно посмотреть там.

! Могут возникнуть проблемы с двойными ковычками в нашей таблице -- если они есть, стоит заменить их на что-то подходящее.

12. Осталось поменять имена полей в phpmyadmin, и можно приступать к работе. Чем я сейчас и займусь :)


PS1.


В файле class.connection.phtml #24 меняем настройки подключения к базе mysql на наши.


PS2.


Решение, мягко говоря, нетривиальное и не самое лучшее -- пришлось устраивать пляски с бубном, т.к. времени было мало. Пишите в этой теме любые вопросы и предложения.



Редактировано 5 раз. Последний раз 07.09.2008 21:26 пользователем Обухов Никита.

Вложения: Xml2MySql.rar (13.7KB)  


Извините, только зарегистрированные пользователи могут писать в этом форуме.
This forum powered by Phorum.