Menu
Simba Technologies
Simba Technologies

SimbaEngine X SDK 10.1.3
Developing Drivers for Data Stores Without SQL

SimbaEngine X SDK Documentation > Overview > Implementation Options

Implementation Options

You can use the SimbaEngine X SDK to build custom drivers for ODBC, JDBC, OLE DB, and ADO.Net applications. Depending on the interface standard that your driver supports, you can develop the driver in C++, Java, or C#.

The SimbaEngine X SDK provides many different implementation options for developing your custom driver. For example, you can develop an ODBC driver in C++ using the DSI API. You can also develop an ODBC driver in Java using the Java DSI API and the JNI bridge. Or, you can develop a custom JDBC driver for data stores that do not support SQL, and implement the driver for either a local or a client-server deployment.

Note:

This guide explains how to build a driver for data stores that do not support SQL. If you want to build a driver for data stores that support SQL, see Developing Drivers for SQL-capable Data Stores.

The following table shows the possible types of custom drivers you can build with the SimbaEngine X SDK, and the components and APIs required for each. The table includes options for local and remote (client/server) deployments, and for SQL-enabled and non-SQL-enabled data stores. The Sample Driver(s) column lists the sample driver(s) that provide a working example of your chosen implementation option.

Note:

  • Every driver, except for those written in C#, is supported on Windows, Unix/Linux, and macOS. C# is supported on Windows.
  • The sample drivers are included with the SimbaEngine X SDK in the folderC:\Simba Technologies\SimbaEngineSDK\10.0\Examples\Source.
Driver Type Language Data Store Type Sample Driver(s) SimbaEngine X SDK Component(s)

Custom ODBC driver

C++

SQL, Local

Ultralight

DSI API

Custom ODBC driver

C++

SQL, Remote

Ultralight +
SimbaServer

DSI API

Custom ODBC driver

C++

Not SQL capable, Local

Quickstart

DSI API + SQL Engine

Custom ODBC driver

C++

Not SQL capable, Remote

Quickstart +
SimbaServer

DSI API + SQL Engine

Custom ODBC driver

Java

SQL, Local

JavaUltraLight

Java DSI API + JNI DSI

Custom ODBC driver

Java

SQL, Remote

JavaUltraLight +
SimbaServer

Java DSI API + JNI DSI

Custom ODBC driver

Java

Not SQL capable, Local

JavaQuickstart or JavaQuickJSON

Java DSI API + JNI DSI + SQL Engine

Custom ODBC driver

Java

Not SQL capable, Remote

JavaQuickstart +
SimbaServer

Java DSI API + JNI DSI + SQL Engine

Custom ODBC driver

C#

SQL, Local

DotNetUltraLight

.NET DSI API + CLI DSI

Custom ODBC drive

C#

SQL, Remote

DotNetUltraLight + SimbaServer

.NET DSI API + CLI DSI

Custom ODBC driver

C#

Not SQL capable, Local

DotNetQuickstart

.NET DSI API + CLI DSI + SQL Engine

Custom ODBC driver

C#

Not SQL capable, Remote

DotnetQuickstart + SimbaServer

.NET DSI API + CLI DSI + SQL Engine

Custom JDBC driver

Java

SQL, Local

JavaUltraLight

Java DSI API

Custom JDBC driver

Java

SQL, Remote

JavaUltraLight +
SimbaServer

Java DSI API + JNI DSI

Custom JDBC driver

Java

Not SQL capable, Local

JavaQuickJson

Java DSI API

Custom JDBC driver

Java

Not SQL capable, Remote

JavaQuickstart +
SimbaServer

Java DSI API + JNI DSI + SQL Engine

Custom ADO.NET driver

C#

SQL, Local

DotNetUltraLight

.NET DSI API

Custom OLE DB driver

C++

Not SQL capable, Local

Quickstart

DSI API + SQL Engine

The following section provides more details about the information in the table above.

Options for Programming Languages

The programming language you use to write the DSII depends partly on the interface standard you need to support. The supported combinations of programming language and interface standard are shown in the table above.

Example:

  • To write a JDBC driver that is deployed locally, you must write the DSII in Java.
  • To write an ODBC driver that is deployed locally, you can write the DSII in C++, Java, or C#. If you write the DSI in Java, you need to link with a JNI bridge. If you write the DSI in C#, you need to link with a CLI bridge.

Programming Languages for ODBC applications

To build a local driver for ODBC applications, you can write your DSII in the following languages:

  • C++ (the most common choice)
  • C# with a CLI bridge
  • Java with a JNI bridge

Programming Language for JDBC Applications

To build a local driver for JDBC applications, you must write your DSII in Java. Or, you can deploy the JDBC client to support the JDBC applications and implement the SimbaServer in Java, C++, or C#.

Programming Language for ADO.NET Applications

To build a local driver for ADO.NET applications, you must write your DSII in C#.

Supported Combination of Components

This section explains the different ways you can leverage the SimbaEngine X SDK components in each of the supported programming languages.

C++ Development

For C++ driver development, you have the following options:

  • Use the DSI API, build as an ODBC driver (connected locally to your data store) and link your DSII to SimbaODBC.
  • Build as a SimbaServer driver, supporting remote connections from SimbaClients for JDBC and ODBC. Link your C++ DSII upwards to SimbaServer via the DSI API.

In the above cases, you can link against the C++ SQLEngine to access non-relational data stores.

Java Development

For Java driver development, you have the following options:

  • Use the Java DSI API, build as a JDBC driver (connected locally to your data store) and link your DSII with SimbaJDBC.
  • Build as an ODBC driver (connected locally to your data store) using the Java DSI API and link via the C++ to Java Bridge to SimbaODBC.
  • Build as a SimbaServer driver, supporting remote connections from the JDBC and ODBC clients. Link your Java DSII upward via the Java DSI API and C++ to Java Bridge to SimbaServer.

In the above cases, you can link to the Java SQLEngine to access non-relational data stores.

C# Development

For C# development, you have the following options:

  • Use the DotNet DSI API, build as an ADO.NET driver (connected locally to your data store) and link your DSII with Simba.NET.
  • Use the DotNet DSI API, build as an ODBC driver (connected locally to your data store) and link via the C++ to C# Bridge to SimbaODBC.
  • Build as a SimbaServer driver, supporting remote connections from the JDBC and ODBC clients. Link your DotNet DSII upward via the DotNet DSI API and C++ to C# Bridge to SimbaServer.

Options for Deployment

The SimbaEngine X SDK provides you a number of different optional components for building and deploying a custom driver for a wide variety of solutions.

SQL Engine

If your data store is SQL-capable, you do not need to use the SQLEngine. If your data store is not SQL-capable, link your driver to the Simba SQLEngine libraries to provide the SQL processing needed by ODBC or JDBC. The SQL Engine is available in the C++ and Java SDKs.

Local Deployments

Local deployments are typically used in the following scenarios:

  • Client applications access a database that runs on each user’s machine.
    For example, an ODBC driver might support a client management database where each user performs analysis of their own, local data.
  • You have already configured your database for network access and some component of your software is already installed on user machines. Your new driver will allow other, general-purpose client applications to access the same connection to your database that your own client application uses.
  • You are in the early stages of testing your driver and as a developer, you are accessing a local instance of your database. You will eventually change the compilation options to link to the SimbaServer libraries, but there will be no changes needed to your DSI implementation to do this.

Remote (Client/Server) Deployments

Client-Server deployments are best when software runs on a server and users access it from their own machines. Your custom driver, using SimbaServer, runs on the network server. SimbaClient is installed on user machines to allow applications such as Excel and Tableau to access your remote data store.

 

Related Links

Introducing the SimbaEngine X SDK

SimbaEngine X SDK FAQ