Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2007.02.04;
Скачать: [xml.tar.bz2];

Вниз

EDBEngineError   Найти похожие ветки 

 
Игорь Шевченко ©   (2006-11-09 15:04) [40]

ANB ©   (09.11.06 12:59) [30]

Выгружать построчно, никаких гетерогенных запросов, только сами данные.

sniknik ©   (09.11.06 13:27) [37]
Anatoly Podgoretsky ©   (09.11.06 13:00) [31]


> Про АДО могу сказать, что пробовал выгружать 6 миллионов
> записей в двухнаправленый, локальный курсор, проблем у меня
> не было, правда и БЛОБ полей тоже. Попробуй, едиственная
> проблема найти правильный OLE DB провайдер для Интербейс,
>  просто по этому поводу много наслушался нелестных слов.
>


До ADO просто руки не дошли.
Провайдер для Firebird где-то валяется, скачанный с IBPhoenix.

Идеальным вариантом, наверное была бы прямая работа с клиентской библиотекой Firebird, поскольку мне требуется двигаться по полученному Resultset"у только вперед, то, что прочитано, сохранять не надо, но читать хотелось бы максимально быстро, без двунаправленности, без сохранения результатов запроса в промежуточный файл, и т.д.
Но для идеального варианта, боюсь, придется много писать, а в особенности с BLOB-полями.


 
sniknik ©   (2006-11-09 15:22) [41]

> До ADO просто руки не дошли.
> Провайдер для Firebird где-то валяется, скачанный с IBPhoenix.
нет. если будеш пробовать, то возьми по ссылке, я в свое время тестил все что нашел (6-7 шт), этот подошел лучше всего. у остальных чтото да не то было. и хотя уже много времени пришло, у кого были глюки наверняка исправили, но без дополнительный тестов я бы не рисковал. гарантий не дам в общем. ;о)

> но читать хотелось бы максимально быстро, без двунаправленности
не проблема, есть такой режим, просто предлагал проверить в наихудшем для тебя варианте, уж если он потянет, то однонаправленный для него(ADO) будет вообще как семечки.

и еще, у меня получалось время передач данных (сумма времен выборка + запись. т.е. с проходом до конца рекордсета. а не просто открытие) быстрее именно в моем варианте (почему и пользуюсь), предположительно (по догадкам) потому что когда забирается весь рекордсет он архивируется (по другому не получается обьяснить... почему быстрее) в отличие от позаписьной передаче на серверном курсоре, но вот как оно поведет себя на обьемах когда и память и кеш кончились... не знаю, надо тестировать. (вобще, все надо тестировать на реальном... ;о))

> а в особенности с BLOB-полями.
данные BLOB-поля в рекордсете не представлены, только ссылки. при обращении скачиваются с сервера.


 
Игорь Шевченко ©   (2006-11-09 15:31) [42]

sniknik ©   (09.11.06 15:22) [41]


> если будеш пробовать, то возьми по ссылке


http://www.zstyle.com.ua/files/ibfree5.zip - The page cannot be found


 
ANB ©   (2006-11-09 15:31) [43]


> Игорь Шевченко ©   (09.11.06 15:04) [40]

ну так попробуй интербейзом. все нужные свойства и методы у компоненты есть.


 
Anatoly Podgoretsky ©   (2006-11-09 15:33) [44]

> Игорь Шевченко  (09.11.2006 15:04:40)  [40]

Может надо смотреть в сторону dbExpress правда на него сильно ругаются, но как раз для указаной цели, однонаправленный, без кеширования. Конечно можно работать напрямую с сетевой библиотекой, но это явно мазохизм.


 
Игорь Шевченко ©   (2006-11-09 15:39) [45]

Anatoly Podgoretsky ©   (09.11.06 15:33) [44]

Собственно, в эту сторону и посмотрел. Пока не глючит.


 
sniknik ©   (2006-11-09 15:46) [46]

> - The page cannot be found
понятно, это видимо изза перестройки сайта

а так?  
ftp.prima.susu.ac.ru/pub/outgoing/IB/OLEDB_Prov/ibfree5.zip


 
Игорь Шевченко ©   (2006-11-09 16:05) [47]

sniknik ©   (09.11.06 15:46) [46]

Так сработало, спасибо. О результатах (if any) расскажу позже.


 
Petr V. Abramov ©   (2006-11-09 18:47) [48]

Игорь Шевченко ©   (07.11.06 13:41) [11]
Я б посмотрел в сторону внешних таблиц в FB, чтоб в корне зло пресечь.


 
Игорь Шевченко ©   (2006-11-09 22:35) [49]

Petr V. Abramov ©   (09.11.06 18:47) [48]

Внешние таблицы тут не совсем. Мне как раз надо из Firebird выгрузить, причем, с неким преобразованием. Программкой оно проще всего, я не предполагал, что простое движение по ResultSet"у вызовет такие проблемы на больших объемах.


 
Johnmen ©   (2006-11-09 22:51) [50]


> Игорь Шевченко ©


Я что-то упустил или TIBSQL из IBX не подходит?


 
Jeer ©   (2006-11-10 10:32) [51]

Игорь Шевченко ©   (09.11.06 22:35) [49]

> простое движение по ResultSet"у вызовет такие проблемы на
> больших объемах.


Мне как-то пришлось откатывать все операции по вкладам Сбербанка от декабря к марту, скорректировать неверный метод расчета и подкатить обратно к декабрю.
Сделал просто - выгнал все в dbf и прямым самописным доступом издевался над данными сколько влезет.
Уж не помню сколько винтов ушло под это дело:))


 
Jeer ©   (2006-11-10 10:34) [52]

Игорь Шевченко ©   (09.11.06 22:35) [49]

И кто или что мешает делать подвыборки приемлимого обьема и работать с ними по очереди ?


 
Игорь Шевченко ©   (2006-11-10 14:42) [53]

Johnmen ©   (09.11.06 22:51) [50]


> Я что-то упустил или TIBSQL из IBX не подходит?


Выдает ошибку Out of memory в относительно произвольный момент времени. В отладчике совершенно бредовые цифры (пытается 70 мегабайт выделить ни с того ни с сего).

Jeer ©   (10.11.06 10:34) [52]

Я как-то выше сказал, что разделять результат запроса не хочу и объяснять причины этого нехотения не хочу тоже :) Кроме всего прочего нет четкого критерия для разделения, а хотелось бы сделать на все варианты случаев жизни и забыть.


 
Jeer ©   (2006-11-10 14:51) [54]

Игорь Шевченко ©   (10.11.06 14:42) [53]

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


 
Anatoly Podgoretsky ©   (2006-11-10 15:00) [55]

> Jeer  (10.11.2006 14:51:54)  [54]

Top N where ID > LastProcessesID
Если поле автоинкриментного типа


 
Jeer ©   (2006-11-10 15:09) [56]

Anatoly Podgoretsky ©   (10.11.06 15:00) [55]

В IB/FB нет автоинкремента.


 
Johnmen ©   (2006-11-10 15:28) [57]


> Игорь Шевченко ©   (10.11.06 14:42) [53]
> Выдает ошибку Out of memory в
> относительно произвольный момент времени. В отладчике совершенно
> бредовые цифры (пытается 70 мегабайт выделить ни с того
> ни с сего).


Сервер на той же машине, что и приложение?


 
Игорь Шевченко ©   (2006-11-10 15:40) [58]

Johnmen ©   (10.11.06 15:28) [57]


> Сервер на той же машине, что и приложение?


На ошибку это не влияет.

Мне всего лишь надо последовательно прочитать таблицу, сделать с половиной полей по три операции мамбл-ванго, остальные оставить без изменения, и записать получившуюся запись в <другое место>. Все. Никакой буферизации, никакой двунаправленности, никакого кеширования мне не требуется. Таблиц около 10, с каждой надо проделать подобные действия, средний размер каждой - миллион записей.


 
Anatoly Podgoretsky ©   (2006-11-10 15:41) [59]

> Jeer  (10.11.2006 15:09:56)  [56]

> В IB/FB нет автоинкремента.

Я знаю, просто забыл добавить слово типа, но мы то достаточно развиты, что бы понять, если подобное поле есть, которое постоянно только увеличивается, тогда использовать его для работы по частям.
В MS SQL например есть еще и тип TIMESTAMP - это совсем другое, чем в IB/FB - это как раз строго по названию временная метка, последней модификации строки, так что вопрос не в терминологии, а в том что для данной цели подходит автоинкрементное (логически) поле.

Но мы ничего не знаем про его запросы на сервер, может его запросы не позволят подобный механихм использовать.


 
Jeer ©   (2006-11-10 15:56) [60]

Anatoly Podgoretsky ©   (10.11.06 15:41) [59]

Даже если нет таких полей - добавить и навесить генератор.
Как вариант.

P.S.
Сделал тестовую табличку FB.
40 полей varchar 50.
Сгенерил рандом средней длиной 45
Объем файла более 2G - так,что BDE, а также ODBC через TQuery - отдыхают.
Ограничение 2G.

Попробовал IBExpert - он сделал два вздоха по 150тыс записей и воткнул тачку с 1G memory в out of того самого.


 
Anatoly Podgoretsky ©   (2006-11-10 16:12) [61]

> Jeer  (10.11.2006 15:56:00)  [60]

Я и говорил, если нет физических, то использовать логические или другие поля, которые имеют подобное поведение, поля в которых каждое новое следующее значение больше предыдущего.
Типа автоинкримент, вот например типа TIMESTAMP или GUID не подойдут, а вот номер чего то вполне.

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


 
ANB ©   (2006-11-10 16:25) [62]


> Anatoly Podgoretsky ©   (10.11.06 16:12) [61]

в оракле/ФБ/ИБ для этого используются генераторы/сиквенсы.

Однако, имхо, пилить - это уже изврат. Должен быть способ прокачать все записи большой таблицы через клиента по одной одним запросом.


 
Anatoly Podgoretsky ©   (2006-11-10 16:28) [63]

> ANB  (10.11.2006 16:25:02)  [62]

Я в курсе, ФБ/ИБ не имеет автоинкриментных полей, про Оракл не в курсе, но для эмуляции у них есть генераторы или Sequence


 
ANB ©   (2006-11-10 16:32) [64]


> но для эмуляции

Я бы сказал, это у MS SQL попытка эмуляции генераторов/сиквенсов, причем с меньшей функциональностью и некоторой неудобностью.


 
Anatoly Podgoretsky ©   (2006-11-10 16:36) [65]

> ANB  (10.11.2006 16:32:04)  [64]

Я бы не сказал, чистые автоинкриментные поля, но спорить не будем, не принципиально это.


 
ANB ©   (2006-11-10 16:38) [66]


> но спорить не будем, не принципиально это.

Не, таки будем :)
Генераторы/сиквенсы поудобнее в эксплуатации будут. У них только один минус - их надо отдельно создавать.
Основное их преимущество - возможность доставать ID до вставки.


 
Johnmen ©   (2006-11-10 16:41) [67]

Игорь Шевченко ©   (10.11.06 15:40) [58]
>> Сервер на той же машине, что и приложение?
>На ошибку это не влияет.


Будет время на выходных, провёрю. Т.к. есть сомнения, что не влияет...:)


 
Jeer ©   (2006-11-10 17:02) [68]

А вообще-то, хотя и несколько offtop, возникло ощущение, что подобные проблемы - суть последствий сражения EК vs ИК (естественные vs искусственные ключи).
Такое раздутие таблиц вполне объяснимо использованием естественных ключей.

Напомню, был тут как-то такой холивар и именно Игорь отстаивал целесообразность ЕК, я же приводил разные аргументы в пользу ИК.
Разумеется дело не ограничилось мной и Игорем, всяк влил свою дозу яда в ухо противника.:))

Посмотрел статистику по одному из своих последних проектов
8000 записей в день
Средняя длина записи - 120 байт
т.е 1M в день и примерно 300М в год
Соответственно - 2 млн записей в год.

Проект честно отработал 1 год.

Все исключительно на искусственных ключах.

На восьмом месяце беременности проект в течение одного для всех 15 филиалов и центрального офиса  был плавно выведен из СУБД DBISAM и переведен на FB.
Простой - 1 час на рабочее место.


 
Jeer ©   (2006-11-10 17:03) [69]


> ANB ©   (10.11.06 16:38) [66]


> Основное их преимущество - возможность доставать ID до вставки.


Не поверишь, но даже без такой возможности, все возможно.


 
ANB ©   (2006-11-10 17:05) [70]


> Не поверишь, но даже без такой возможности, все возможно.

Могет быть. Но в мс скл стандартно ID после вставки вытаскивают. Да еще и извращенно. А для доставания до вставки - нужно уже еще сильнее извращаться (наверное).


 
Jeer ©   (2006-11-10 17:21) [71]

ANB ©   (10.11.06 17:05) [70]

Если кто не знаком с СУБД DBISAM - напомню: создавалась как F/S ISAM, затем выросла в C/S.
Последней я практически не пользовался, т.к. имел лицензию от www.elevatesoftware.com на распространение исключительно F/S.
Там много чего вкусного по состоянию на 98 год было, BDE и не снилось такое.
Например, почти полное покрытие SQL-92.

А автоинкремент не приемлю в принципе, хотя она и позволяет.

Поэтому была сделана система конкурентной вставки очередной записи в многопользовательской среде.
Никто же не возражает, что в сети Ethernet принципиально заложены коллизии при доступе ?

Вот так и там. Попытка получить доступ к max(id), корректная отработка исключений.
По такой технологии было выполнено достаточно проектов, чтобы судить о приемлимости такого решения.


 
Игорь Шевченко ©   (2006-11-10 17:23) [72]

Jeer ©   (10.11.06 17:02) [68]

Вот чем мне нравится этот сайт - это посетителями. Честное слово. За те четыре года, что я здесь нахожусь, я успел познакомиться с таким количеством уважаемых мною людей, с которым в реальной жизни вряд ли успел бы пообщаться на столь разнообразные темы.

Сергей, ну скажи мне ради Аллаха всемилосердного, причем тут искусственные или естественные ключи ? Я в одном из постов написал, как выглядит запрос, никаких ключей там в принципе не используется, проблема не на сервере, проблема на клиентской стороне, не получилось у BDE справиться с таким объемом данных, данная ошибка присутствует в гугле, куда я посмотрел прежде чем задавать вопрос на этом сайте, разумеется, я испробовал все советы, которые нашел по данному вопросу, ни один не помог (хотя, там и не было обещано, что они помогут во всех ситуациях).

Я уже писал, что я не собираюсь разделять запрос на порции, в данном случае эта моя принципиальная позиция. Ключи к этой позиции не имеют никакого отношения.
Я НЕ ВИДЕЛ В ДОКУМЕНТАЦИИ К BDE, IBX НИ ОДНОЙ ФРАЗЫ О ТОМ, ЧТО РЕЗУЛЬТАТЫ ПРОИЗВОЛЬНОГО ЗАПРОСА НЕ МОГУТ БЫТЬ ПРОЧИТАНЫ ИЗ-ЗА КАКИХ-ТО ОГРАНИЧЕНИЙ.

Может, я невнимательно читал, в таком случае просьба ткнуть меня носом в документацию, я с благодарностью приму пинок и пойму, что зря ориентировался на BDE с самого начала.


 
ANB ©   (2006-11-10 17:24) [73]


> Попытка получить доступ к max(id),

Я так извращался на клиппере. Не сказать, чтобы я был в восторге от этого. Посему, когда начал работать с ораклом и узнал про сиквенсы, меня это сильно порадовало и к клипперу я более не вертаюсь :)


 
Игорь Шевченко ©   (2006-11-10 17:25) [74]

Jeer ©   (10.11.06 17:02) [68]

Вдогонку: кстати, естественные ключи я до сих пор продолжаю отстаивать, потому что всякий autoincrement есть зло, порочащее реляционную теорию, хотя в ряде случаев без него трудно обойтись без существенного усложнения схемы базы данных.


 
ANB ©   (2006-11-10 17:26) [75]


> Игорь Шевченко ©   (10.11.06 17:23) [72]

dbExpress-овский компонент попробовал, который я тестил ?
Совет - блобы тянуть по одному и тут же чистить.


 
ANB ©   (2006-11-10 17:28) [76]


> естественные ключи я до сих пор продолжаю отстаивать, потому
> что всякий autoincrement есть зло,

автоинкремент - зло, хоть и небольшое.
естественные ключи - тоже зло. намного большее. связки по ним делать низзя.
Вот одного не понял - почему ЕК - это хорошо, из-за того, что автоинкремент - плохо ?


 
Jeer ©   (2006-11-10 17:30) [77]

Игорь Шевченко ©   (10.11.06 17:23) [72]

Ара, говорим -да:)))


>Я НЕ ВИДЕЛ В ДОКУМЕНТАЦИИ К BDE
..
> РЕЗУЛЬТАТЫ ПРОИЗВОЛЬНОГО ЗАПРОСА


А экстраполировать ограничения BDE на естественное и такое же ограничение временных таблиц ?

Игорь,  да чес слово - тоже пытаюсь помочь тебе.
Что ж я от нефиг делать перелопачиваю уйму байтов на диске ?
Самому стало интересно, кое-какие "просветы" возникают, но до выяснения
обстоятельств умолчу.

Но попутно "всплывают образы, как у истинного левши" :)))


 
Jeer ©   (2006-11-10 17:31) [78]


> потому что всякий autoincrement есть зло,


Согласен на все сто:)


 
Игорь Шевченко ©   (2006-11-10 17:43) [79]

ANB ©   (10.11.06 17:26) [75]
Jeer ©   (10.11.06 17:30) [77]

Я вообще-то проблему решил :) Об чем писал в посте [45].

Вкратце все-таки попытаюсь озвучить проблему: есть база данных с несовсем идеальной структурой. Ищется наиболее быстрый способ преобразования ейных данных в почти идеальную структуру. Данных много.

Преобразование должно запустить один раз, отработать и забыть.

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

Решение "в лоб" (чтение согласно структуры исходной базы, преобразование в целевую структуру) работает, хотелось бы сравнить быстродействие остальных способов, например выгрузку с минимальными преобразованиями в набор плоских файлов и запуск штатного загрузчика СУБД, и т.п.


 
ANB ©   (2006-11-10 17:46) [80]


> например выгрузку с минимальными преобразованиями в набор
> плоских файлов и запуск штатного загрузчика СУБД

граблей не оберешься. Проверено по опыту работы с оракловым лоадером.



Страницы: 1 2 3 вся ветка

Форум: "Базы";
Текущий архив: 2007.02.04;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.64 MB
Время: 0.041 c
4-1158843222
laronov
2006-09-21 16:53
2007.02.04
Как получить данные из чужого DBGrid а


2-1169181823
FIL-23
2007-01-19 07:43
2007.02.04
проблемы с совместимостью


1-1163595674
thevalery
2006-11-15 16:01
2007.02.04
Unicode Caption/Hint


3-1162936095
Германн
2006-11-08 00:48
2007.02.04
Сортировка по букве Ё в BDE


6-1157198312
Fugas
2006-09-02 15:58
2007.02.04
POST запрос и PHP





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский