Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.02.20;
Скачать: CL | DM;

Вниз

Как лучше сравнить два разнотипных DateSet   Найти похожие ветки 

 
slaga ©   (2005-01-19 11:25) [0]

Такая ситуация:
есть Оракл и есть Интербейс, Ора на серваке рядом, интербейс на кассе далеко, есть два справочника товаров один на Оре другой на кассе, оба по 200 000 записей, мне нужно сравнить эти два справочника на нахождение таких записей в Оре каких нет в Ибейсе.

Я придумал пока только так:
Беру выгребаю все из Оры в ОраДатаСет
     выгребаю все из ИБ в ИБКверя
И в цикле Локейтом ищу в ИБ записи из Оры и если не нахожу пишу их в третий АДОДатаСет для того что б вывести результаты в грид.

Но это предположительно займет 5!!! часов, это же очень долго.

Подскажите пожалуйста как мне лучше решить эту задачу.


 
Соловьев ©   (2005-01-19 11:28) [1]

попробуй LocalSQL.hlp - Heterogeneous joins

Не знаю Оракл. но должна быть возможность делать запросы к другим базам через ODBC


 
Johnmen ©   (2005-01-19 11:31) [2]

Да, гетерогенные запросы
www.ibase.ru/devinfo/bde.htm


 
slaga ©   (2005-01-19 11:43) [3]

Ага, надо попробовать, но у меня кол-во и положение касс меняется, эот ж куча супермаркетов.


 
Danilka ©   (2005-01-19 11:47) [4]

Если разовая операция, то выгрузить все в орокол, и там сравнить. Предположительно 200к записей займет несколько секунд. :))


 
msguns ©   (2005-01-19 11:56) [5]

Дело-гниль. По чему сравнивать ? По наименованиям ? Чушь, т.к. если одно и то же вводилось разными тетями, то и разнобой будет в наименованиях. Это во-первых. Во-вторых, если учет партионный (по поставкам), то наименования это еще не ключ для установления строгого соответствия между складским документом (приходом-расходом) и карточкой (позицией в фактурах движения).
Мало информации. Надо полную схему документооборота и данные о ПО в офисе и точках.


 
Danilka ©   (2005-01-19 12:02) [6]

[3] slaga ©   (19.01.05 11:43)
> Ага, надо попробовать, но у меня кол-во и положение касс
> меняется, эот ж куча супермаркетов.

Похоже, что не разовая операция.. Тогда думать нада и сравнивать.. Как чвариант - открыть ИБ датасет, перекачать все поле, по которому идет сравнение у всех записей во временную орокловую таблицу и сделать запрос запрос уже в орокле, думаю на все уйжет пара минут а не 5 часов..
Чем-то мне вариант с БДЕ не нравится..

[5] msguns ©   (19.01.05 11:56)
> Мало информации.

Угу. Может быть вся номенклатура заводится только в орокле и выгружается в удаленные базы, и id везде совпадает.


 
Erik1 ©   (2005-01-19 12:14) [7]

Вобщето такие задачи решаются с другой стороны, надо продумать механизм дабавления новых записей и устанавливать им флаг, что они новые. Тогда сравнивать можно порциями, например по 20000 или вобще по 2000 это уже в 10-100 зар меньше.
 Второе закинуть эти записи в отсортированом порядке, можно использовать TClientDataSet он умеет индексы строить и сравнивать поиском по индексу. Все эти действия в месте сведут время синхронизации к секундам.


 
slaga ©   (2005-01-19 12:35) [8]

Да нет не разовая


 
slaga ©   (2005-01-19 12:55) [9]

Да нет, все просто насчет сравнивания, есть Код записи и Версия записи, Код ункальный ключь, это как в Оракле так и ИБ (упрощеное строение таблиц), мне нужно только получить коды товаров которых нет на кассе.


 
msguns ©   (2005-01-19 13:05) [10]

Вообще "правильная" схема при такой структуре объекта (офис/склад - розн.точки) заключается в том, что весь приходящий товар (поступления от поставщиков) регистрируется на складе, а затем внутренним движением переносится в точки. Т.е. товар уже закодирован и прописан по справочникам. Передача данных о товаре в розн.точку либо через ПО типа кэш-драйва, либо "подручными" (как файлы через модем, инет, магн.носители), где они программно "доливаются" в БД точки и разносятся по кассам (загрузка касс). Обычно 1 раз в сутки, чаще всего утром.
Встречное движение, по сути товарный отчет, снимается с касс "локальным" ПО и пересылается манером, аналогичным описанному выше. Т.е. при такой системе не должно даже возникать траблов с какими-то стыковками. Все изначально централизовано и, как следствие, синхронизированно. Может быть я чего-то недопонял ?


 
Johnmen ©   (2005-01-19 13:12) [11]

>msguns ©   (19.01.05 13:05) [10]

<offtop>
Серёга, ты письмо моё получил ?
Если нет, то я твоего не получил...:(
</offtop>


 
msguns ©   (2005-01-19 13:17) [12]

>Johnmen ©   (19.01.05 13:12) [11]

Блин, Женя, оба письма валяются в Outbox`е и не хотят итти в Sent, хотя оба передавались ;(( (Юзаю зебат)
Может потому, что вложение здоровое, а ? А порезать рар не хочет почему-то (недавно новую версию поставил). Может дела в объеме вложения ? И стоит с другой тачки со старым раром порубить на куски и отправить цепочкой ?


 
msguns ©   (2005-01-19 13:19) [13]

Твоего письма тоже нетути ;((


 
Johnmen ©   (2005-01-19 13:21) [14]

>msguns ©   (19.01.05 13:17) [12]

<offtop>
Я тоже думаю, что из-за размеров. Но mail.ru пропускает до 10Мб.
Если сможешь порубить раром, то поруби.
Я в ожидании...:)
</offtop>


 
Johnmen ©   (2005-01-19 13:25) [15]

>msguns ©   (19.01.05 13:19) [13]
>Твоего письма тоже нетути ;((

А вот это уже странно....................
Как вариант выхода - создай свой ящик на mail.ru и пользуясь ихним почтовым сервисом отправь письмо. Это, конечно, если есть время...


 
msguns ©   (2005-01-19 13:30) [16]

Рублю..


 
msguns ©   (2005-01-19 13:40) [17]

Ушли все 3. Проверь ящик. Один файл топтать не захотел, так я добавил первый попашийся файл (что-то типа Autoexec)
В общем, разберешься.


 
Val ©   (2005-01-19 16:34) [18]

>slaga ©   (19.01.05 11:25)
Я бы выбрал вариант закачивания идентификаторов из ИБ в схему Оракла и сравнения именно там. Хотя, зависит от нюансов.


 
slaga ©   (2005-01-19 18:44) [19]

А сколько займет время закачки и как это лучше сделать ?


 
Danilka ©   (2005-01-20 09:50) [20]

[19] slaga ©   (19.01.05 18:44)
"Практика - критерий истины" :)
Коннектишься к ИБ, открываешь датасет на запрос "select id from goods", перебираешь все в цикле и там-же выполняешь запрос на вставку в орокол: "insert into my_temp_table (id) values (:id)". Затем, в орокле делаешь такой запрос: "select id from goods minus select id from my_temp_table". Последний отработает за несколько секунд, самое долгое - перенос данных в орокол, но, думаю, за несколько минут справится. Главное, запрос на вставку с параметром сделай и в цикле просо подставляй параметр. Лажа на вроде: "insert into my_temp_table (id) values ("+id+")" может отработать на порядок медленнее, чем с параметром.



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

Текущий архив: 2005.02.20;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.043 c
1-1107260551
Vetal
2005-02-01 15:22
2005.02.20
Посоветуйте Grid и DBGrid пожалуйста


3-1106615850
Dub
2005-01-25 04:17
2005.02.20
Пустая колонка в DBGrid е


3-1106300120
juice
2005-01-21 12:35
2005.02.20
Вставка записи.


1-1107787925
hgd
2005-02-07 17:52
2005.02.20
Генерация html страниц


1-1107406301
ТехникПТО
2005-02-03 07:51
2005.02.20
Как установить компонент NMHTTP в Delphi 6??





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский