Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Утилита DBF2SQL для массового копирования DBF в SQL Server  [new]
Павел Фурсов
Member

Откуда: Украина
Сообщений: 111
Уважаемые коллеги!
По многочисленным просьбам выкладываю для общего пользования мою утилиту массового копирования баз данных DBF в Microsoft SQL Server.
Поддерживаются практически все форматы файлов, типы полей, в том числе и memo-поля.
Метод заполнения таблиц MS SQL сервера: bulk copy из программных переменных.
Метод чтения данных из файлов формата DBF: raw, при чтении данные кешируются в 4Мб буфере.
Ссылка для скачивания:
dbf2sql.rar
Просьба комментарии и пожелания оставлять на форуме.
20 окт 09, 22:41    [7814498]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: Утилита DBF2SQL для массового копирования DBF в SQL Server  [new]
Vojd
Member

Откуда:
Сообщений: 64
Павел Фурсов,

А какой синтаксис у программы, что-то не могу разобраться.
26 янв 11, 08:34    [10131528]     Ответить | Цитировать Сообщить модератору
 Re: Утилита DBF2SQL для массового копирования DBF в SQL Server  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31990
Vojd
Павел Фурсов,

А какой синтаксис у программы, что-то не могу разобраться.
Какая конкретно строка непонятна? Или вы не читали описание? Там всего 90 строк, в описании синтаксиса 9 строк.
26 янв 11, 09:36    [10131715]     Ответить | Цитировать Сообщить модератору
 Re: Утилита DBF2SQL для массового копирования DBF в SQL Server  [new]
YuYu1961
Member

Откуда: Курск
Сообщений: 1
Павел, очень не помешал бы конкретный пример ini-файла, чтобы однозначно понять правильность заполнения строк.
28 сен 11, 14:13    [11348208]     Ответить | Цитировать Сообщить модератору
 Re: Утилита DBF2SQL для массового копирования DBF в SQL Server  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
Хе, хе, хе. Ласапеды и ненужные интэрфэйсы.

Юзаем Dbf2Xml (без каких либо форматов, ini и всякой другой самописной шелухи), а далее стандартный XmlBulkLoad.

В нете этих конвертеров пруд пруди.
Единственное, что лично мой Dbf2Xml не поддерживает memo, т.к. не понадобилось. Зато подмена кодировки (инвалидный DBF), и поддержка любого формата, работает в обе стороны (заполнение DBF). Требует лишь .Net (на котором скомпилен).
Кароче, сорцы рулят.

Единственное, шо если Xml ваще не юзал, тада канечна XSD знать надо. Просто оно может ещё во многих местах понадобиться, в отличие от проприетарного ini. Кароче, стандарты рулят.

Unix way forever
28 сен 11, 17:24    [11350182]     Ответить | Цитировать Сообщить модератору
 Re: Утилита DBF2SQL для массового копирования DBF в SQL Server  [new]
Павел Фурсов
Member

Откуда: Украина
Сообщений: 111
YuYu1961
Павел, очень не помешал бы конкретный пример ini-файла, чтобы однозначно понять правильность заполнения строк.


Здравствуйте.
Прилагаю файл во вложении.

А по поводу xml могу сказать, что будет намного медленнее.

С уважением,
Павел Фурсов

К сообщению приложен файл (tables.ini - 1Kb) cкачать
28 сен 11, 21:16    [11351209]     Ответить | Цитировать Сообщить модератору
 Re: Утилита DBF2SQL для массового копирования DBF в SQL Server  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
Павел Фурсов
А по поводу xml могу сказать, что будет намного медленнее.
Вы меряли?!
Проблема в том, что процы на столько мощные, что всё упирается в IO.

И главное, так вы реально используете bulk интерфейс или нет? А то мне слово "ODBC" ставит под сомнение.
Если нет, то всё наоборот - dbf2sql несравнимый тормоз по сравнению с XmlBulkLoad.
29 сен 11, 01:24    [11352133]     Ответить | Цитировать Сообщить модератору
 Re: Утилита DBF2SQL для массового копирования DBF в SQL Server  [new]
Павел Фурсов
Member

Откуда: Украина
Сообщений: 111
Mnior
Павел Фурсов
А по поводу xml могу сказать, что будет намного медленнее.
Вы меряли?!
Проблема в том, что процы на столько мощные, что всё упирается в IO.

И главное, так вы реально используете bulk интерфейс или нет? А то мне слово "ODBC" ставит под сомнение.
Если нет, то всё наоборот - dbf2sql несравнимый тормоз по сравнению с XmlBulkLoad.

ODBC всегда означал стандарт для работы с реляционными БД.
Для своего SQL-сервера Microsoft предлагает библиотеки odbcbcp.dll (SQL2000) и SQLNCLI (SQL2005+), в которых реализован bulk copy.
Моя утилита берет данные непосредственно из DBF-файлов и с помощью BCP-функций передает их в базу Microsoft SQL Server'а.
Скорость работы при этом - десятки тысяч записей в секунду. Можете сами в этом убедиться.

С уважением,
Павел Фурсов
29 сен 11, 16:27    [11356643]     Ответить | Цитировать Сообщить модератору
 Re: Утилита DBF2SQL для массового копирования DBF в SQL Server  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
Павел Фурсов, ОК.
Тогда разница максимум на множитель. Притом больше или меньше единицы, зависит уже от кривизны рук и микро-оптимизаций.
Во всяком случае не "намного медленнее", как вы сказали.
30 сен 11, 02:45    [11359325]     Ответить | Цитировать Сообщить модератору
 Re: Утилита DBF2SQL для массового копирования DBF в SQL Server  [new]
Павел Фурсов
Member

Откуда: Украина
Сообщений: 111
Mnior
Павел Фурсов, ОК.
Тогда разница максимум на множитель. Притом больше или меньше единицы, зависит уже от кривизны рук и микро-оптимизаций.
Во всяком случае не "намного медленнее", как вы сказали.

Вы во втором посте сами сказали, что все упирается в IO.
В случае промежуточного XML мы имеем дополнительно:
1) Запись на диск XML.
2) Чтение и парсинг XML.
При этом объем данных в XML будет скорее всего больше.

Минимум в 2 раза будет быстрее без конвертации в/из XML. Не говоря уже о ресурсоемкости (диск, процессор, память).
XML здесь лишний, хоть и является стандартом.

С уваженим,
Павел Фурсов
6 окт 11, 15:48    [11395837]     Ответить | Цитировать Сообщить модератору
 Re: Утилита DBF2SQL для массового копирования DBF в SQL Server  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
Павел Фурсов
1) Запись на диск XML.
Согласен, но:
Вы всё равно должны скопировать файл по сети, соответственно сама прога помимо копирования будет и конвертить.
Так что её затраты (time/IO) равны ровно нулю (кроме CPU).

Павел Фурсов
2) Чтение и парсинг XML.
И, ни на столько затратнее чем тупой DBF.
Павел Фурсов
При этом объем данных в XML будет скорее всего больше.
Мне придётся вас огорчить, чаще ровно наоборот. Что-то я опять стал сомневаться. Вы что формат DBF не знаете? Там же у полей фиксированные длины (кроме LOB). (если вы мне просто не верите на фактах сравнения)
Я даже помню траблы в Delphi: строковое поле с большим MaxLenth, хотя даных мало, зато строк много - память улетает в никуда. (У Delphi похожая ситуация)

DBF не имеет стандартов. Поэтому надо иногда и поддерживать. DBF <-> XML не зависит от каких либо компонет вааще (никаких тебе ODBC и прочей ерунды) и очень простой и его легко поправить/дополнить/захакать/закостылить. А ещё он конвертит в обе стороны, а это необходимо для полной поддержки взаимодействия с клиентом.
7 окт 11, 18:12    [11404462]     Ответить | Цитировать Сообщить модератору
 Re: Утилита DBF2SQL для массового копирования DBF в SQL Server  [new]
Павел Фурсов
Member

Откуда: Украина
Сообщений: 111
Mnior
Мне придётся вас огорчить, чаще ровно наоборот. Что-то я опять стал сомневаться. Вы что формат DBF не знаете? Там же у полей фиксированные длины (кроме LOB). (если вы мне просто не верите на фактах сравнения)
Я даже помню траблы в Delphi: строковое поле с большим MaxLenth, хотя даных мало, зато строк много - память улетает в никуда. (У Delphi похожая ситуация)

DBF не имеет стандартов. Поэтому надо иногда и поддерживать. DBF <-> XML не зависит от каких либо компонет вааще (никаких тебе ODBC и прочей ерунды) и очень простой и его легко поправить/дополнить/захакать/закостылить. А ещё он конвертит в обе стороны, а это необходимо для полной поддержки взаимодействия с клиентом.

В своих расчетах я считал, что:
1) Время чтения файла < времени записи файла.
2) Запись в SQL происходит параллельно с чтением DBF.

С использованием промежуточного XML время будет таким:
MAX(чтение из DBF, запись в XML) + MAX(чтение из XML, запись в SQL) + delta, при условии, что операции чтения/записи параллельны.
Без XML:
MAX(чтение из DBF, запись в SQL) + delta.

Действительно, XML с текстовыми данными может быть компактнее DBF. Просто я считал, что дополнительные теги / атрибуты XML приведут к росту файла. Но я не говорил, что для всех DBF это так.

С уважением,
Павел Фурсов
7 окт 11, 22:28    [11405612]     Ответить | Цитировать Сообщить модератору
 Re: Утилита DBF2SQL для массового копирования DBF в SQL Server  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
Павел Фурсов, вы повторились, но зачем не пойму.

Вы не поняли смысл моей предыдущей фразы?:
Mnior
всё равно должны скопировать файл по сети (откуда-то там на сервер), соответственно сама прога (конвертации DBF->XML) помимо копирования (по сети) будет (заодно) и конвертить (DBF->XML).
Т.е. команда >copy FromA ToB и >Dbf2Xml FromA ToB займут одинаковое время.
И далее:
Mnior
(естественно я с вами согласен, что это отмазка)
За пределами SQL могут проходить другие процессы, архивация файлов для истории, проверки, FTP и другие процессы взаимодействия, которые могут занять много времени, но их не учитывают. Это не говоря о том, что файл можно конвертировать на стороне клиента/поставщика. Соответственно преобразование форматов можно выкинуть вообще из рассмотрения ... бла, бла, бла.

И как я сказал выше: "разница на множитель", а не порядок.

Ваш КО.

PS:
И конечно не могу побить явным аргументом, что "XmlBulkLoad может читать прямо из файл-потока (pipeline) в который направляет вывод Ddf2Xml", чтобы оба процесса проходили параллельно. Ибо не знаю как, и "окошкам" далеко до *nix.
Хотя, почему нет, можно расширить текущий функционал обоих прог:
1. вывод в std out для Dbf2Xml
2. чтение из Process.StandardOutput для XmlBulkLoad
8 окт 11, 16:48    [11407207]     Ответить | Цитировать Сообщить модератору
 Re: Утилита DBF2SQL для массового копирования DBF в SQL Server  [new]
Павел Фурсов
Member

Откуда: Украина
Сообщений: 111
Mnior,
давайте прекратим нашу дискуссию.
XML-вариант имеет право на существование, равно как и другие возможные варианты конвертации.

В этой теме обсуждается моя утилита конвертации, которая в свое время хорошо зарекомендовала себя в реальной работе с большими DBF-файлами.

С уважанием,
Павел Фурсов
9 окт 11, 12:49    [11408875]     Ответить | Цитировать Сообщить модератору
 Re: Утилита DBF2SQL для массового копирования DBF в SQL Server  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
Павел Фурсов
давайте прекратим нашу дискуссию
Павел Фурсов, вы меня неправильно поняли. Я нисколько не нивелирую вашу программу. Она замечательна, она есть(!) и доступна. Я просто хотел показать на another way.

На этом всё.

И изначально я просто среагировал на реальную проблему (10131528) необходимости дополнительного знания по настройке (ini). Кстати, как вариант - можно рассмотреть стандарт XSD описания вместо INI.
9 окт 11, 13:39    [11408954]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить