2015-08-13 33 views
7

Sto cercando di capire come questi due pezzi del puzzle interagiscano e si adattino quando ci si connette a un server MS-SQL su linux.Differenza tra FreeTDS e unixodbc?

Come ho capito, FreeTDS è un protocollo (ovvero un insieme di regole) per comunicare con MS-SQL ed è la cosa che effettivamente parla. Unixodbc è un driver che implementa l'API ODBC, cioè implementa un insieme di funzioni che immagino.

Perché entrambe le cose sono necessarie? Qualcuno può approfondire la mia abbozza di comprensione di ciò che queste due cose effettivamente fanno?

risposta

9

unixODBC è un "DriverManager" per ODBC. È possibile utilizzare unixODBC quando si utilizza un sistema Linux o * nix per connettersi a qualsiasi database compatibile con ODBC. Ciò significa che puoi scrivere un sacco di query di database che dovresti essere in grado di utilizzare tra diversi database. Se non si fosse su Unix, si utilizzerebbe un diverso Driver Manager, ad esempio quello incorporato in MS Office.

Per rendere chiari tutti i componenti: se si sta utilizzando una lingua, diciamo Python, per connettersi a SQL Server, la connessione potrebbe passare da Python a pyodbc (traduce oggetti python da e verso unixODBC), a unixODBC (gestisce driver, come FreeTDS), a FreeTDS (traduce gli oggetti unixODBC da e verso il protocollo TDS, che Microsoft abbraccia) a SQL Server.

Il unixODBC sito http://www.unixodbc.org/ dice:

Un'applicazione ODBC effettua chiamate ODBC al DriverManager. Il DriverManager svolge una serie di compiti per l'applicazione come ad esempio:

  • garantire il driver corretto viene scaricato
  • compiti di validazione
  • 3.5 al 3,0-2,0 chiamata e mappatura dei dati caricati/

La maggior parte delle chiamate a DriverManager viene passata sul driver caricato per essere ulteriormente elaborate, ma ciò non interessa l'applicazione.

Alcuni vantaggi nell'utilizzo di un ODBC DriverManager includono:

  • codice di accesso dati portatile
  • runtime legandosi a una fonte di dati
  • possibilità di cambiare facilmente l'origine dati

In breve, è il Driver Manager che legge il tuo DSN, esamina le origini dati configurate e decide dove e come connettersi.

A seconda del database utilizzato, è necessario un driver diverso. Questo pezzo di codice "traduce" le richieste fatte usando ODBC sul protocollo giusto per il sistema di gestione del database pertinente. Questo è il componente che dovrebbe essere diverso per diverse fonti di dati. Nel tuo caso, TDS è il protocollo utilizzato da MS SQL Server. FreeTDS è un'implementazione software gratuita di questo protocollo.

Vedi anche Wikipedia https://en.wikipedia.org/wiki/Open_Database_Connectivity (enfasi mantenuto):

ODBC compie DBMS indipendenza utilizzando un driver ODBC come strato di traduzione tra l'applicazione e il DBMS. L'applicazione utilizza le funzioni ODBC tramite un gestore di driver ODBC con cui è collegato e il driver passa la query al DBMS. Un driver ODBC può essere considerato analogo a un driver di stampante o altro driver, fornendo un set standard di funzioni per l'applicazione da utilizzare e implementando funzionalità specifiche di DBMS. Un'applicazione che può utilizzare ODBC viene definita "conforme a ODBC". Qualsiasi applicazione compatibile con ODBC può accedere a qualsiasi DBMS per il quale è installato un driver. Esistono driver per tutti i principali DBMS, molte altre fonti di dati come i sistemi di rubrica e Microsoft Excel e persino per file di testo o CSV.

+1

Ottima risposta. Per semplificare in un esempio reale, se stai usando un linguaggio, diciamo Python, per connetterti a SQL Server, la tua connessione potrebbe passare da Python a pyodbc (traduce oggetti python da e verso unixODBC), a unixODBC (driver di manager, come FreeTDS), a FreeTDS (traduce gli oggetti unixODBC da e verso il protocollo TDS, che Microsoft abbraccia) a SQL Server. – FlipperPA

+0

Grazie mille per il tuo commento @FlipperPA, ti dispiace se lo modifico nella risposta poiché penso che sia molto chiaro? – jwg

+0

Forza! Qualunque cosa aiuti gli altri di più, ed è uno stack confuso. :) – FlipperPA