Home Page
Articoli
Tips & Tricks
News
Forum
Archivio Forum
Blogs
Sondaggi
Rss
Video
Utenti
Chi Siamo
Contattaci
Username:
Password:
Login
Registrati ora!
Recupera Password
Home Page
Stanze Forum
SQL Server 2000/2005/2008, Express, Access, MySQL, Oracle
Creazione "driver" di comunicazione con database sql server 2005
lunedì 05 gennaio 2009 - 09.39
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
Alethesnake
Profilo
| Newbie
32
messaggi | Data Invio:
lun 5 gen 2009 - 09:39
Ciao,
Mi trovo a dover affrontare un problema di comunicazione tra un'applicazione su server unix (aix) e un database sql server 2005. Spero innanzitutto di non aver sbagliato stanza, nel caso mi scuso.
Il mio problema è che devo eseguire dei caricamenti massivi, per i quali l'ideale sarebbe poter usare la bulk load. Ovviamente l'utility non può essere sfruttata da server unix, e anzi l'unica possibilità di collegamento con sql server da unix è via odbc.
Le performance per me sono cruciali, e l'odbc è lungi dal soddisfare le mie esigenze. Da qui l'idea di studiare un modo di comunicazione alternativo.
L'idea è quella di connettermi al server sql sulla porta dedicata (1433) via tcp/ip, trasferire i dati nel modo più veloce possibile (la rete di cui disponiamo è molto veloce) e poi organizzare su sql server una procedura che mi permetta di effettuare il caricamento.
Detta così sembra semplice.
I consigli che vi chiedo, innanzitutto, sono:
1) Secondo voi posso connettermi direttamente sulla porta di default o devo creare un nuovo servizio (magari con clr) che resti in ascolto su una porta differente? (ovviamente non mi connetterei con una connectionstring classica, ma direttamente via tcp/ip)
2) premesso che i dati da trasferire saranno anche milioni di record, e la sorgente potrebbe essere un flat file o similare, per effettuare effettivamente il trasferimento pensavo di creare dinamicamente una struttura/classe (con c++ probabilmente, variabile a seconda della tabella da caricare) che ricalchi il singolo record, caricare, compattare e spedire via tcp/ip record per record.
Ha senso secondo voi?
Avete suggerimenti in merito (anche strade differenti)?
Cio' che mi preme è evitare trasferimento fisico del file sul server sql per poi eseguire un bulk load la. L'idea è di non scrivere nulla sul server se non sulle tabelle target (o su tabelle di appoggio), e tutti gli inserimenti dovranno essere pilotati direttamente dal server unix (salvo come premesso l'installazione di un "gestore" sul server sql.
Ogni idea/parere è bene accetto.
Ciao e grazie,
Ale.
...
lbenaglia
Profilo
| Guru
5.625
messaggi | Data Invio:
lun 5 gen 2009 - 10:46
>Cio' che mi preme è evitare trasferimento fisico del file sul
>server sql per poi eseguire un bulk load la. L'idea è di non
>scrivere nulla sul server se non sulle tabelle target (o su tabelle
>di appoggio), e tutti gli inserimenti dovranno essere pilotati
>direttamente dal server unix (salvo come premesso l'installazione
>di un "gestore" sul server sql.
Ciao Alex,
Non conosco l'ambito Unix ma se non sbaglio è possibile definire una share "visibile" anche da OS Microsoft.
Definisci una share sul server Unix nella quale depositerai i file da importare e sul server Windows utilizzerai l'utility bcp.exe oppure il comando BULK INSERT referenziando la share remota.
Per pilorare l'importazione dal server Unix probabilmente dovrai creare un paio di programmini client/server che scatenino degli eventi sul client (server Windows) per far partire il caricamento dei dai.
>Ciao e grazie,
Prego.
Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org
Alethesnake
Profilo
| Newbie
32
messaggi | Data Invio:
lun 5 gen 2009 - 15:53
Ciao Lorenzo,
Grazie per la tua risposta. L'alternativa che mi proponi è molto valida, eventualmente mi sarebbe sufficiente usare una stored procedure da lanciare via odbc e che innesca il bulk load del file specifico.
In questo caso perderei però il controllo sul flusso "a runtime", ossia non riuscirei a misurare in tempo reale la velocità di caricamento ed altri elementi (righe al secondo e così via), ma potrei disporre solo di statistiche ex-post.
Giusto per capire quali potrebbero effettivamente essere gli scogli dell'approccio di creare un servizio in ascolto sul sql server che mi ribalti uno stream in ingresso direttamente dentro una tabella, a riguardo ci sono pareri?
Ciao e grazie,
Ale.
...
lbenaglia
Profilo
| Guru
5.625
messaggi | Data Invio:
lun 5 gen 2009 - 17:25
>Giusto per capire quali potrebbero effettivamente essere gli
>scogli dell'approccio di creare un servizio in ascolto sul sql
>server che mi ribalti uno stream in ingresso direttamente dentro
>una tabella, a riguardo ci sono pareri?
Io non ne ho
Personalmente utilizzo gli strumenti nativi senza il bisogno di reinventarli
>Ciao e grazie,
Prego.
Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org
Torna su
Stanze Forum
Elenco Threads
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?
Dopo esserti registrato potrai chiedere
aiuto sul nostro
Forum
oppure aiutare gli altri
Consulta le
Stanze
disponibili.
Registrati ora !