Creazione "driver" di comunicazione con database sql server 2005

lunedì 05 gennaio 2009 - 09.39

Alethesnake Profilo | Newbie

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

>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

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

>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
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 !
Copyright © dotNetHell.it 2002-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5