|
Обмен данными между разными системами.
|
|||
---|---|---|---|
#18+
Подскажите как организовать обмен данными между таблицами. Поэтапно пожалуйста (может примеры или ссылки на литературу), задача поставлена а как реализовать не представляю пока .... Есть базы данных Бд№1 Бд№2. Структура этих баз мне известна (первая реализована на SQL Server, второя в любой другой (1с и что-то еще). Необходимо организовать обмен данными (предположительно через xml документ). Правило по которому я буду сравнивать записи в БД1 и БД2 составлены, к примеру из Бд№1 таблица Clients поле id в БД№2 таблицу Сustomers поле Сode. из Бд№1 таблица Clients поле Name в БД№2 таблицу Сustomers поле Name. Поля по которым сравнивать записи тоже изветно Бд№1.Clients.id = БД№2.Customers.Code Интерфейс реализовать средствами Vusial Studio. А там через Windows Form или как???? ... |
|||
:
Нравится:
Не нравится:
|
|||
03.10.2013, 10:54 |
|
Обмен данными между разными системами.
|
|||
---|---|---|---|
#18+
Tanya_0306, а что не ясно? Берешь селект из первой БД1, ищешь в БД2, если записи нет/отличается - делашь insert/update. Потом наоборот. Это если я правильно понял твой сумбур. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.10.2013, 11:04 |
|
Обмен данными между разными системами.
|
|||
---|---|---|---|
#18+
Можно создать таблицу для объединения. Слить в нее записи из двух БД. Ищем недостающие записи для каждой БД и соответственно либо Insert, либо Update ... |
|||
:
Нравится:
Не нравится:
|
|||
03.10.2013, 11:29 |
|
Обмен данными между разными системами.
|
|||
---|---|---|---|
#18+
Tanya_0306, ... если в целевой таблице есть поле типа autoincrement, то можно просто заливать пачкой (за период, например), а потом удалять продублированные записи - в некоторых случаях это быстрее ... ... |
|||
:
Нравится:
Не нравится:
|
|||
03.10.2013, 13:33 |
|
Обмен данными между разными системами.
|
|||
---|---|---|---|
#18+
carrotikTanya_0306, ... если в целевой таблице есть поле типа autoincrement, то можно просто заливать пачкой (за период, например), а потом удалять продублированные записи - в некоторых случаях это быстрее ...Зато как "сексуально" определять наличие дублей (и хорошо, если полных дублей) на паре-тройке десятков миллионов записей... Не менее интересно, как тут поможет "автоинкремент в целевой таблице"... ... |
|||
:
Нравится:
Не нравится:
|
|||
03.10.2013, 14:12 |
|
Обмен данными между разными системами.
|
|||
---|---|---|---|
#18+
sphinx_mvcarrotikTanya_0306, ... если в целевой таблице есть поле типа autoincrement, то можно просто заливать пачкой (за период, например), а потом удалять продублированные записи - в некоторых случаях это быстрее ...Зато как "сексуально" определять наличие дублей (и хорошо, если полных дублей) на паре-тройке десятков миллионов записей... Не менее интересно, как тут поможет "автоинкремент в целевой таблице"... ... почему бы сразу не на миллиарде, чего мелочиться? ... я же сказал - в некоторых случаях .... а автоинкремент помогает выделить последнюю запись из дублей, напр: Код: sql 1. 2.
...где Invoice - составное поле, а TransID - автоинкремент ... ... |
|||
:
Нравится:
Не нравится:
|
|||
03.10.2013, 14:27 |
|
Обмен данными между разными системами.
|
|||
---|---|---|---|
#18+
carrotiksphinx_mvпропущено... Зато как "сексуально" определять наличие дублей (и хорошо, если полных дублей) на паре-тройке десятков миллионов записей... Не менее интересно, как тут поможет "автоинкремент в целевой таблице"...... почему бы сразу не на миллиарде, чего мелочиться? ...Намекаете, что для Вас суточный объем данных в 10-15 миллионов "сырых" записей - исключительное количество? carrotik я же сказал - в некоторых случаях .... Для "не-некоторых случаев" правильно использовать MERGE - будет точно быстрее. Независимо от наличия "автоинкремента". carrotik а автоинкремент помогает выделить последнюю запись из дублей, напр: Код: sql 1. 2.
...где Invoice - составное поле, а TransID - автоинкремент ...С учетом того, что с момента времени TransID1 до TransID2 данные в исходной таблице могли измениться (в том числе и значение поля Invoice) - это весьма "оригинальное" соображение. Ну, а составное поле - фтопку: прямое нарушение первой нормальной формы... ... |
|||
:
Нравится:
Не нравится:
|
|||
03.10.2013, 15:42 |
|
Обмен данными между разными системами.
|
|||
---|---|---|---|
#18+
[quot sphinx_mvНамекаете, что для Вас суточный объем данных в 10-15 миллионов "сырых" записей - исключительное количество? Ну, а составное поле - фтопку: прямое нарушение первой нормальной формы...[/quot] ...да, намекаю ... не все торгуют ценными бумагами ... и я вовсе не пытаюсь привести готовый рецепт, а просто один из вариантов к рассмотрению ... ... |
|||
:
Нравится:
Не нравится:
|
|||
03.10.2013, 15:45 |
|
Обмен данными между разными системами.
|
|||
---|---|---|---|
#18+
carrotik, А можно для НОВИЧКА по шагово. Мне дадут ФАЙЛ.xml с данными БД1 выгруженный в xml. Я пока не умею работать с этими файлами. Надо прочитать данные из файла. Вопрос куда и как их выгрузить чтоб потом простым селектом искать и сравнивать данные?? Далее эти данные надо переписать в другую базу данных с известной структурой (создать xml файл). Может у кого пример есть ? Пока самую простую задачу реализовать если из БД1 таблицу Clients (id, name, Adress) переписать в БД2 Customers (Kod,Name,Remark), поле соответсвие id=Kod. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.10.2013, 13:24 |
|
Обмен данными между разными системами.
|
|||
---|---|---|---|
#18+
Tanya_0306carrotik, А можно для НОВИЧКА по шагово. Мне дадут ФАЙЛ.xml с данными БД1 выгруженный в xml. Я пока не умею работать с этими файлами. Надо прочитать данные из файла. Вопрос куда и как их выгрузить чтоб потом простым селектом искать и сравнивать данные?? Далее эти данные надо переписать в другую базу данных с известной структурой (создать xml файл). Может у кого пример есть ? Пока самую простую задачу реализовать если из БД1 таблицу Clients (id, name, Adress) переписать в БД2 Customers (Kod,Name,Remark), поле соответсвие id=Kod. -создай специальную таблицу для новых данных с той же структурой Clients (id, name, Adress) -заполни данными и xml -загружай данные INSERT\UPDATE ... |
|||
:
Нравится:
Не нравится:
|
|||
04.10.2013, 13:47 |
|
Обмен данными между разными системами.
|
|||
---|---|---|---|
#18+
... по-моему, у ТС вообще задача без привязки к БД, т.е. XML на входе и XML на выходе - в какую-нибудь 1С-ку (если не ошибаюсь?) .... Тогда, может, что-нибудь из Comparing two XML? http://stackoverflow.com/questions/8096173/how-to-compare-xml-files-in-c ...или в DataTable ... хотя, это головоломка будет еще круче .. :) ... |
|||
:
Нравится:
Не нравится:
|
|||
04.10.2013, 13:58 |
|
Обмен данными между разными системами.
|
|||
---|---|---|---|
#18+
carrotik, точно, xml на входе и xml на выходе. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.10.2013, 14:37 |
|
Обмен данными между разными системами.
|
|||
---|---|---|---|
#18+
Tanya_0306carrotik, точно, xml на входе и xml на выходе. ..а сравнивать с чем? ... как вы будете сравнивать с целевой базой (и что это все же, SQL, FireBird, 1c) ? ... кто-то выгрузит вам xml для сравнения? ... или есть возможность сделать к целевой базе SELECT? ... ... |
|||
:
Нравится:
Не нравится:
|
|||
04.10.2013, 14:46 |
|
Обмен данными между разными системами.
|
|||
---|---|---|---|
#18+
Tanya_0306carrotik, точно, xml на входе и xml на выходе. xml -> deserialize -> object -> update ->serialize -> xml ... |
|||
:
Нравится:
Не нравится:
|
|||
04.10.2013, 16:26 |
|
Обмен данными между разными системами.
|
|||
---|---|---|---|
#18+
pation, начала вот так Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42.
Из базы переписала в xml документ. Теперь как его прочитать и сохранить данные в таблицы на SQL server. Не сочтите за трудность ..... подскажи код ..... Примеры те что гугл выдает не удается прикрутить к программе, ведать не совсем еще механизм понимаю. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.10.2013, 22:22 |
|
Обмен данными между разными системами.
|
|||
---|---|---|---|
#18+
Tanya_0306carrotik, точно, xml на входе и xml на выходе. Если два XML и известен маппинг одних полей на другие, то тут XSLT приходит на ум. Далее, вместо XSLT можно применить T4. Плюс: не нужно заморачиваться со страшно выглядящим XSLT Еще вариант: десериализовать XML и работать уже с объектами, а потом новые объекты десериализовать обратно Еще вариант: загрузить XML в память и работать уже с самим документом Самый быстрый способ (но не самый простой):XmlReader + XmlWriter. То есть преобразовывать документ по мере чтения, не дожидаясь полной загрузки в оперативку (прекрасно для большеразмерных XML) Самый правильный (ИМХО): у вас же есть MS SQL Server. Для каждого получателя там можно достаточно быстро сделать SSIS пакет. Функционала SSIS за глаза + оттестированность промышленного решения ... |
|||
:
Нравится:
Не нравится:
|
|||
06.10.2013, 11:01 |
|
Обмен данными между разными системами.
|
|||
---|---|---|---|
#18+
Tanya_0306Из базы переписала в xml документ не смотрели SELECT FOR XML ? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.10.2013, 11:02 |
|
Обмен данными между разными системами.
|
|||
---|---|---|---|
#18+
Arm79, Спасибо за ссылку, смотрю. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.10.2013, 12:35 |
|
Обмен данными между разными системами.
|
|||
---|---|---|---|
#18+
Tanya_0306Из базы переписала в xml документ. Теперь как его прочитать и сохранить данные в таблицы на SQL server. . вы, все-таки, определите задачу более четко ... если это из XML в XML, то это одни инструменты ... но я вижу что вы сами создаете XML и сами же потом из одного приложения его грузите в (другой?) SQL-сервер (другую базу на том же сервере?) ... просто, если это так, то можно обойтись без XML , например, открыть подключение к первому серверу, загрузить данные в DataTable, закрыть подключение, открыть второе, а потом циклом for each DataRow делать UPDATE БД2 сразу в БД второго сервера, проверяя идентификационное поле на WHERE table1.id NOT IN (SELECT table2.id FROM БД2) .... примерно так, но вам надо бы прояснить вашу схему ... |
|||
:
Нравится:
Не нравится:
|
|||
06.10.2013, 13:40 |
|
Обмен данными между разными системами.
|
|||
---|---|---|---|
#18+
Tanya_0306Подскажите как организовать обмен данными между таблицами. Поэтапно пожалуйста (может примеры или ссылки на литературу), задача поставлена а как реализовать не представляю пока .... Есть базы данных Бд№1 Бд№2. Структура этих баз мне известна (первая реализована на SQL Server, второя в любой другой (1с и что-то еще). Необходимо организовать обмен данными (предположительно через xml документ). Правило по которому я буду сравнивать записи в БД1 и БД2 составлены, к примеру из Бд№1 таблица Clients поле id в БД№2 таблицу Сustomers поле Сode. из Бд№1 таблица Clients поле Name в БД№2 таблицу Сustomers поле Name. Поля по которым сравнивать записи тоже изветно Бд№1.Clients.id = БД№2.Customers.Code Интерфейс реализовать средствами Vusial Studio. А там через Windows Form или как???? В вашем обмене предполагается участие пользователя? Ну т.е. он должен будет в процессе обмена выполнять какие-то действия вручную? Если нет, то никакое клиентское приложение(ни на WinForms, ни на чем-либо другом) вам не нужно. Далее, обмен односторонний(из какой системы в какую?) или двусторонний? Будет ли обмен выполняться автоматически, по заданному расписанию, или он будет инициироваться какой-либо из систем? От ответов на эти вопросы зависит выбор средств для реализации. carrotikпримерно так, но вам надо бы прояснить вашу схему Присоединяюсь к коллеге) ... |
|||
:
Нравится:
Не нравится:
|
|||
06.10.2013, 14:27 |
|
Обмен данными между разными системами.
|
|||
---|---|---|---|
#18+
Newbie001, Данные от пользователя я получу в виде xml файла. (Пока делаю его сама). Предполагается что пользователь может указать соответствие таблиц и полей, зайти в приложении и указать соответствие между базами данных. Вот примерно такую схему БД думаю реализовать. (файл прикрепила) Мне полученные данные в виде xml надо переписать в структуру БД№2. И отдать этот файл xml, пусть выгружают. Вроде вот так. Обмен будет производится 1 раз в сутки. Все дают хорошие советы ... Но с реализацией сложновато ..... Для меня ново и С# и XML. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.10.2013, 16:22 |
|
Обмен данными между разными системами.
|
|||
---|---|---|---|
#18+
Tanya_0306Предполагается что пользователь может указать соответствие таблиц и полей, зайти в приложении и указать соответствие между базами данных. Зачем пользователю КАЖДЫЙ раз указывать соответствие? У вас, что, каждый раз новая система? Разработчик, то есть вы, ОДИН раз для каждой используемой системы задает соответствие Собственно, и выбор у вас тогда появляется. А доверять пользователю ввод таких данных - нельзя. 100% будет путать названия, регистры, алфавиты. Нужно избегать таких ситуаций, когда пользователю дается столь широкий выбор. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.10.2013, 18:19 |
|
|
start [/forum/topic.php?fid=20&msg=38415560&tid=1403915]: |
0ms |
get settings: |
8ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
34ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
64ms |
get tp. blocked users: |
1ms |
others: | 12ms |
total: | 150ms |
0 / 0 |