Neu vorgestellt, Performance

Neuer ODBC-Treiber in der Version 5.6

Der CONZEPT 16-ODBC-Treiber ermöglicht den Zugriff von beliebigen Applikationen auf CONZEPT 16-Datenbanken und ist bereits seit über 10 Jahren im Einsatz. In der Version 5.6 wird ein komplett neu entwickelter Treiber zur Verfügung stehen. Neben der Unterstützung der ODBC-Spezifikation 3.52 und einer nativen Verarbeitung von 64-bit Integer-Werten ist auch die Verarbeitung von Unicode-Zeichen vorbereitet.

Zusätzlich zur vorhandenen 32-bit-Version wird der Treiber auch in einer 64-bit-Variante erscheinen. Somit lässt sich der ODBC-Treiber auch von nativen 64-bit-Applikationen (wie Microsoft Excel 2010 64-bit) verwenden.
Durch den Einsatz der „Passdown-Filter“-Technologie wird zudem ein Geschwindigkeitsvorteil erreicht: In der Regel wird das Herausfiltern der gesuchten Datensätze vom ODBC-Treiber durchgeführt. Falls die Anfrage nicht über einen Schlüssel (Index) beantwortet werden kann, müssen allerdings alle Datensätze vom Datenbankserver an den Treiber übertragen werden. Beim Einsatz von Passdown-Filtern wird hingegen der gesamte SQL-Query direkt vom CONZEPT 16-Server verarbeitet. Der Server filtert die gesuchten Datensätze heraus und gibt nur diese an den anfragenden Treiber zurück. Insbesondere bei Abfragen, die über Nichtschlüsselfelder gehen, kann damit ein gewaltiger Performancegewinn erzielt werden.

14 Kommentare

14 Kommentare “Neuer ODBC-Treiber in der Version 5.6”

  1. Habe bei meinen Tests festgestellt, dass der ODBC-Treiber im Moment keine skrollbaren Cursors (SQL_ATTR_CURSOR_SCROLLABLE) unterstützt (oder irre ich mich?). SQLGetInfo mit der Option SQL_SCROLL_OPTIONS liefert nur SQL_SO_FORWARD_ONLY zurück. Das ist beim Lesen von größeren Tabellen ein großer Nachteil, da man in diesem Fall die Ergebnisse selbst auf dem Client verwalten muss, um z.B. rückwärts zu lesen. Ist in späteren Version eine Änderung dazu geplant?
    Außerdem habe ich festgestellt, dass die SQL-Anweisung "SELECT COUNT(*) FROM <Tabelle>" nicht optimiert ist, der Server führt die Selektion aus und zählt dann die Datensätze durch (was z.B. bei einer Tabelle mit ca. 1 Mio. Datensätze ungefähr 5 Minuten dauert), obwohl in diesem einfachen Fall möglich wäre, die Anzahl der Datensätze aus Tabellen-Statistiken zu ermitteln (wie das die Funktion RecInfo(_RecCount) macht). Ist evtl. hier auch eine Optimierung geplant?

  2. @Goecom_SZ
    Der Treiber kann das prinzipiell schon, allerdings kann die aktuell von CONZEPT 16 verwendete Datenstruktur nicht zur Laufzeit erweitert werden. Somit können keine DataDictionary-Funktionen ausgeführt werden, die die Datenstruktur verändern.

  3. @Edwin
    Die folgenden Zeiten ergeben sich bei einer select-Abfrage, die über ein Nichtschlüsselfeld eingeschränkt wird. Von den insgesamt knapp 50.000 Datensätzen werden 1.000 Ergebnisse zurückgeliefert.

    ODBC-Treiber Version 5.5: 20 Sekunden
    ODBC-Treiber Version 5.6: 1 Sekunde

  4. @tsauter
    Die wichtigste Neuerung der ODBC-Spezifikation 3.x ist die Unterstützung für 64-bit. Ansonsten wurde die ODBC-API verändert, sodass bei der Verwendung von ODBC-Treibern nach Spezifikation 2.x ein Wrapper zum Einsatz kommt, der die neuen Funktionsaufrufe auf die alten mappt. Des Weiteren werden neue Typen für Datum- und Zeitwerte unterstützt.

    Die weiteren Neuerungen liegen eher im Detail, können bei Interesse aber unter http://msdn.microsoft.com/en-us/library/ms714077(v=VS.85).aspx nachgelesen werden.

Kommentar abgeben