Ciao,
Mi trovo a dover affrontare un problema di comunicazione tra un'applicazione su server unix (aix) e un database sql server 2005.
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 è 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.