Package org.apache.ignite
Class IgniteJdbcDriver
- java.lang.Object
-
- org.apache.ignite.IgniteJdbcDriver
-
- All Implemented Interfaces:
Driver
public class IgniteJdbcDriver extends Object implements Driver
JDBC driver implementation for In-Memory Data Grid.Driver allows to get distributed data from Ignite cache using standard SQL queries and standard JDBC API. It will automatically get only fields that you actually need from objects stored in cache.
Limitations
Data in Ignite cache is usually distributed across several nodes, so some queries may not work as expected since the query will be sent to each individual node and results will then be collected and returned as JDBC result set. Keep in mind following limitations (not applied if data is queried from one node only, or data is fully co-located or fully replicated on multiple nodes):-
Joins will work correctly only if joined objects are stored in
collocated mode. Refer to
AffinityKeyjavadoc for more details. - Note that if you are connected to local or replicated cache, all data will be queried only on one node, not depending on what caches participate in the query (some data from partitioned cache can be lost). And visa versa, if you are connected to partitioned cache, data from replicated caches will be duplicated.
SQL Notice
Driver allows to query data from several caches. Cache that driver is connected to is treated as default schema in this case. Other caches can be referenced by their names.Note that cache name is case sensitive and you have to always specify it in quotes.
Dependencies
JDBC driver is located in main Ignite JAR and depends on all libraries located inIGNITE_HOME/libsfolder. So if you are using JDBC driver in any external tool, you have to add main Ignite JAR will all dependencies to its classpath.Configuration
JDBC driver return Ignite client node based connection.Configuration of Ignite client node based connection
JDBC connection URL has the following pattern:jdbc:ignite:cfg://[<params>@]<config_url>.
<config_url>represents any valid URL which points to Ignite configuration file. It is required.
<params>are optional and have the following format:param1=value1:param2=value2:...:paramN=valueN.
The following parameters are supported:cache- cache name. If it is not defined than default cache will be used.-
nodeId- ID of node where query will be executed. It can be useful for querying through local caches. If node with provided ID doesn't exist, exception is thrown. -
local- query will be executed only on local node. Use this parameter withnodeIdparameter. Default value isfalse. -
collocated- flag that used for optimization purposes. Whenever Ignite executes a distributed query, it sends sub-queries to individual cluster members. If you know in advance that the elements of your query selection are collocated together on the same node, usually based on some affinity-key, Ignite can make significant performance and network optimizations. Default value isfalse. -
distributedJoins- enables support of distributed joins feature. This flag does not make sense in combination withlocaland/orcollocatedflags withtruevalue or in case of querying of local cache. Default value isfalse. -
enforceJoinOrder- Sets flag to enforce join order of tables in the query. If set totruequery optimizer will not reorder tables in join. By default isfalse. -
lazy- Sets flag to enable lazy query execution. By default Ignite attempts to fetch the whole query result set to memory and send it to the client. For small and medium result sets this provides optimal performance and minimize duration of internal database locks, thus increasing concurrency.If result set is too big to fit in available memory this could lead to excessive GC pauses and even OutOfMemoryError. Use this flag as a hint for Ignite to fetch result set lazily, thus minimizing memory consumption at the cost of moderate performance hit.
Defaults to
false, meaning that the whole result set is fetched to memory eagerly.
Example
// Open JDBC connection. Connection conn = DriverManager.getConnection("jdbc:ignite:cfg//cache=persons@file:///etc/configs/ignite-jdbc.xml"); // Query persons' names ResultSet rs = conn.createStatement().executeQuery("select name from Person"); while (rs.next()) { String name = rs.getString(1); ... } // Query persons with specific age PreparedStatement stmt = conn.prepareStatement("select name, age from Person where age = ?"); stmt.setInt(1, 30); ResultSet rs = stmt.executeQuery(); while (rs.next()) { String name = rs.getString("name"); int age = rs.getInt("age"); ... }
-
-
Field Summary
Fields Modifier and Type Field Description static StringCFG_URL_PREFIXConfig URL prefix.static intDFLT_PORTDefault port.static StringPARAM_ENFORCE_JOIN_ORDERParameter: enforce join order flag (SQL hint).static StringPARAM_LAZYParameter: replicated only flag (SQL hint).static StringPARAM_SCHEMAParameter: schema name.static StringPROP_CACHECache name property name.static StringPROP_CFGCache name property name.static StringPROP_COLLOCATEDCollocated property name.static StringPROP_DISTRIBUTED_JOINSDistributed joins property name.static StringPROP_ENFORCE_JOIN_ORDERTransactions allowed property name.static StringPROP_HOSTHostname property name.static StringPROP_LAZYLazy property name.static StringPROP_LOCALLocal property name.static StringPROP_MULTIPLE_STMTSAllow query with multiple statements.static StringPROP_NODE_IDNode ID property name.static StringPROP_PORTPort number property name.static StringPROP_SCHEMASchema property name.static StringPROP_SKIP_REDUCER_ON_UPDATESkip reducer on update update property name.static StringPROP_STREAMINGDML streaming property name.static StringPROP_STREAMING_ALLOW_OVERWRITEWhether DML streaming will overwrite existing cache entries.static StringPROP_STREAMING_FLUSH_FREQDML stream auto flush frequency property name.static StringPROP_STREAMING_PER_NODE_BUF_SIZEDML stream node buffer size property name.static StringPROP_STREAMING_PER_NODE_PAR_OPSDML stream parallel operations per node property name.static StringPROP_TX_ALLOWEDTransactions allowed property name.
-
Constructor Summary
Constructors Constructor Description IgniteJdbcDriver()
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description booleanacceptsURL(String url)Connectionconnect(String url, Properties props)intgetMajorVersion()intgetMinorVersion()LoggergetParentLogger()DriverPropertyInfo[]getPropertyInfo(String url, Properties info)booleanjdbcCompliant()
-
-
-
Field Detail
-
PARAM_ENFORCE_JOIN_ORDER
public static final String PARAM_ENFORCE_JOIN_ORDER
Parameter: enforce join order flag (SQL hint).- See Also:
- Constant Field Values
-
PARAM_LAZY
public static final String PARAM_LAZY
Parameter: replicated only flag (SQL hint).- See Also:
- Constant Field Values
-
PARAM_SCHEMA
public static final String PARAM_SCHEMA
Parameter: schema name.- See Also:
- Constant Field Values
-
PROP_HOST
public static final String PROP_HOST
Hostname property name.- See Also:
- Constant Field Values
-
PROP_PORT
public static final String PROP_PORT
Port number property name.- See Also:
- Constant Field Values
-
PROP_CACHE
public static final String PROP_CACHE
Cache name property name.- See Also:
- Constant Field Values
-
PROP_NODE_ID
public static final String PROP_NODE_ID
Node ID property name.- See Also:
- Constant Field Values
-
PROP_LOCAL
public static final String PROP_LOCAL
Local property name.- See Also:
- Constant Field Values
-
PROP_COLLOCATED
public static final String PROP_COLLOCATED
Collocated property name.- See Also:
- Constant Field Values
-
PROP_DISTRIBUTED_JOINS
public static final String PROP_DISTRIBUTED_JOINS
Distributed joins property name.- See Also:
- Constant Field Values
-
PROP_TX_ALLOWED
public static final String PROP_TX_ALLOWED
Transactions allowed property name.- See Also:
- Constant Field Values
-
PROP_STREAMING
public static final String PROP_STREAMING
DML streaming property name.- See Also:
- Constant Field Values
-
PROP_STREAMING_FLUSH_FREQ
public static final String PROP_STREAMING_FLUSH_FREQ
DML stream auto flush frequency property name.- See Also:
- Constant Field Values
-
PROP_STREAMING_PER_NODE_BUF_SIZE
public static final String PROP_STREAMING_PER_NODE_BUF_SIZE
DML stream node buffer size property name.- See Also:
- Constant Field Values
-
PROP_STREAMING_PER_NODE_PAR_OPS
public static final String PROP_STREAMING_PER_NODE_PAR_OPS
DML stream parallel operations per node property name.- See Also:
- Constant Field Values
-
PROP_STREAMING_ALLOW_OVERWRITE
public static final String PROP_STREAMING_ALLOW_OVERWRITE
Whether DML streaming will overwrite existing cache entries.- See Also:
- Constant Field Values
-
PROP_MULTIPLE_STMTS
public static final String PROP_MULTIPLE_STMTS
Allow query with multiple statements.- See Also:
- Constant Field Values
-
PROP_SKIP_REDUCER_ON_UPDATE
public static final String PROP_SKIP_REDUCER_ON_UPDATE
Skip reducer on update update property name.- See Also:
- Constant Field Values
-
PROP_ENFORCE_JOIN_ORDER
public static final String PROP_ENFORCE_JOIN_ORDER
Transactions allowed property name.- See Also:
- Constant Field Values
-
PROP_LAZY
public static final String PROP_LAZY
Lazy property name.- See Also:
- Constant Field Values
-
PROP_SCHEMA
public static final String PROP_SCHEMA
Schema property name.- See Also:
- Constant Field Values
-
PROP_CFG
public static final String PROP_CFG
Cache name property name.- See Also:
- Constant Field Values
-
CFG_URL_PREFIX
public static final String CFG_URL_PREFIX
Config URL prefix.- See Also:
- Constant Field Values
-
DFLT_PORT
public static final int DFLT_PORT
Default port.- See Also:
- Constant Field Values
-
-
Method Detail
-
connect
public Connection connect(String url, Properties props) throws SQLException
- Specified by:
connectin interfaceDriver- Throws:
SQLException
-
acceptsURL
public boolean acceptsURL(String url) throws SQLException
- Specified by:
acceptsURLin interfaceDriver- Throws:
SQLException
-
getPropertyInfo
public DriverPropertyInfo[] getPropertyInfo(String url, Properties info) throws SQLException
- Specified by:
getPropertyInfoin interfaceDriver- Throws:
SQLException
-
getMajorVersion
public int getMajorVersion()
- Specified by:
getMajorVersionin interfaceDriver
-
getMinorVersion
public int getMinorVersion()
- Specified by:
getMinorVersionin interfaceDriver
-
jdbcCompliant
public boolean jdbcCompliant()
- Specified by:
jdbcCompliantin interfaceDriver
-
getParentLogger
public Logger getParentLogger() throws SQLFeatureNotSupportedException
- Specified by:
getParentLoggerin interfaceDriver- Throws:
SQLFeatureNotSupportedException
-
-