Progress DataDirect for JDBC for Apache Cassandra

    An asterisk (*) indicates support that was added in a hotfix or software patch subsequent to a release.

    Refer to the following resources for additional information:

    • Product Compatibility Guide: Provides the latest data source and platform support information. 
    • Fixes: Describes the issues resolved since general availability.  

    Version 6.0.0

      Enhancements
      • The driver has been enhanced to comply with FIPS standards for data encryption. As part of this enhancement, the driver was tested with FIPS 140-3 enabled using a Red Hat OpenJDK 21 on a Red Hat Universal Base Image 9 instance. Refer to FIPS (Federal Information Processing Standard) for details.*
        Available: 1/31/2025 | 6.0.0.000680
      • The driver has been enhanced to connect using secure connect bundles, which contain security certificates and credentials for your database. You can configure your driver to use secure connect bundles by specifying the location of the .zip file using the new SecureConnectBundle property. For details, refer to SecureConnectBundle.*
        Note that secure connect bundles are only supported by certain databases, such as DataStax Enterprise running in IBM Cloud. Refer to your database documentation for support information.
      • The driver has been enhanced to include timestamp in the Spy and JDBC packet
        logs by default. If required, you can disable the timestamp logging by
        specifying the following at connection: For Spy logs, set
        spyAttributes=(log=(file)Spy.log;timestamp=no) and for JDBC packet logs,
        set ddtdbg.ProtocolTraceShowTime=false.
      • Interactive SQL for JDBC (JDBCISQL) is now installed with the product. JDBCISQL is a command-line interface that supports connecting your driver to a data source, executing SQL statements and retrieving results in a terminal. This tool provides a method to quickly test your drivers in an environment that does not support GUIs.*
      • The driver has been enhanced to support the Duration data type, which maps to the Varchar JDBC type. Currently, the Duration type is supported only in simple columns, and not in Collection types. For details, refer to Data Types.*
      • The driver has been enhanced to support all the data consistency levels for read and write operations that are supported by Apache Cassandra data stores. Data consistency levels are configured using the ReadConsistency and WriteConsistency connection properties. For details, refer to ReadConsistency and WriteConsistency.*
      • The driver has been enhanced to support SSL data encryption. For details, refer to Configuring SSL Encryption.*
      • The driver has been enhanced to support Kerberos authentication. For details, refer to Configuring the Driver for Kerberos Authentication.*
      • The driver has been enhanced to support Cassandra's tunable consistency functionality with the ReadConsistency and WriteConsistency connection
        properties. For details, refer to ReadConsistency and WriteConsistency.*
      • The driver has been enhanced to improve the handling of large result sets and
        reduce the likelihood of out-of-memory errors through the introduction of the
        FetchSize, NativeFetchSize, and ResultMemorySize connection properties. For details, refer to Connection Property Descriptions.*
      Changed Behavior
      • The installer program now requires you to install a JRE that is Java SE 11 or higher before running the installer. In earlier versions, the JRE used by the installer program was included in the product. However, to avoid potential security vulnerabilities, the installer program no longer includes a JRE. Instead, the installer program uses the JRE in your environment to allow for the most secure version of a JRE to be used.*
        Note: This change does not affect the JVM requirements for the driver. For the latest driver requirements, refer to the Product Compatibility Guide.
        Available: 7/3/2024
      Notes, Known Issues, and Limitations
      • Inserts and Updates are in effect handled as Upserts in Cassandra. If an insert is performed on a row that already exists, the row will be updated. If an update is performed on a row that does not exist, the row will be inserted.
      • Update is supported for Counter columns only when all the other columns in the row comprise that row's primary key. When updating a Counter column on an existing row, the Counter column is updated according to the increment (or decrement) specified in the SQL statement. When updating a Counter column for which there is no existing row, the values of the columns that comprise the row's primary key are inserted into the table alongside the value of the Counter column.
      • Cassandra imposes timeouts on read and write operations to prevent a given operation from negatively impacting the performance of the cluster. If you encounter an operation timeout, you can take the following actions to promote operation success.
        • Adjust the ReadConsistency connection property. You can speed up a query by reducing the number of replicas required to respond to a read request. Therefore, you can reduce the likelihood of a timeout by setting ReadConsistency to a value that requires fewer replicas to respond.
        • Adjust the WriteConsistency connection property. You can speed up a write operation by reducing the number of replicas required to acknowledge success. Therefore, you can reduce the likelihood of a timeout by setting WriteConsistency to a value that requires fewer replicas to acknowledge the execution of the write operation.
        • Decrease the value of the NativeFetchSize connection property. By decreasing NativeFetchSize, you reduce the amount of data that must be transmitted between the driver and the native data source. For read operations, the smaller the chunks of data requested, the faster the cluster can assemble results for transmission to the driver. For write operations, smaller chunks of data allow the driver to communicate more efficiently with the native data source and thus expedite write operations. Note that setting NativeFetchSize too low negatively impacts performance by requiring unnecessary round trips across the network.
        • Optimize your operations by taking one or more of the following actions.
          • Limit the number of results returned.
          • Add indexes to Cassandra tables and base operations on indexes as appropriate.
          • Use Where clause filtering that can be pushed down to Cassandra, allowing operations to be evaluated and handled quickly. See the following DataStax Web pages for more information about Where clause functionality and limitations.
            • http://www.datastax.com/dev/blog/a-deep-look-to-the-cql-where-clause
            • http://docs.datastax.com/en/cql/3.1/cql/cql_reference/select_r.html?scroll= reference_ds_d35_v2q_xj__filtering-data-using-where
        • Adjust Cassandra network timeout settings in the cassandra.yml configuration file. These settings can be adjusted to promote read operation success by increasing the size of the timeout window. Refer to your Cassandra documentation for details.
        • The driver has been designed to handle large result sets. However, out-of-memory errors can occur. The following items outline how to reduce the likelihood of out-of-memory errors for your environment.
          • Reduce FetchSize to reduce demands on memory. By lowering the maximum number of rows as specified by FetchSize, you lower the number of rows the driver is required to process before returning data to the application. Thus, you reduce demands on memory and decrease the likelihood of out-of-memory errors.
          • Decrease ResultMemorySize until results are successfully returned. Intermediate results larger than the value specified will be written to disk as opposed to held in memory. When configured correctly, this avoids memory limitations by not relying on memory to process larger intermediate results. Be aware that while writing to disk reduces the risk of out-of-memory errors, it also negatively impacts performance. For optimal performance, decrease this value only to a size necessary to avoid errors. By default, ResultMemorySize is set to -1, which sets the maximum size of intermediate results held in memory to a percentage of the max Java heap size. If you received errors using the default configuration, use the max Java heap size divided by 4 as a starting point when tuning this option.
          • Increase the JVM heap size. By increasing the max Java heap size, you increase the amount of data the driver can accumulate in memory and avoid out-of-memory errors.
      • The driver hides the system.indexes collection, and tables containing the "$" character are hidden to prevent naming conflicts.
      • The driver hides the oplog.rs system table.
      • The System.exit() method ensures that all registered shutdown hooks are run. Applications terminate faster when System.exit(0) is used. When applications omit the System.exit() call, the termination process may linger for about 10 seconds before exiting.
      • For UNIX/Linux users: If you receive an error message when executing any DataDirect for JDBC shell script, make sure that the file has EXECUTE permission. To do this, use the chmod command. For example, to grant EXECUTE permission to the testforjdbc.sh file, change to the directory containing testforjdbc.sh and enter: chmod +x testforjdbc.sh
      • The following notes on JDBC methods apply generally to Progress DataDirect for JDBC drivers. Additional information on driver support for the JDBC API can be found in the "JDBC Support" section of the product USER'S GUIDE.
        • The driver allows PreparedStatement.setXXX methods and ResultSet.getXXX methods on Clob data types, in addition to the functionality described in the JDBC specification. The supported conversions typically are the same as those for LONGVARCHAR, except where limited by database support.
        • When attempting to create an updatable, scroll-sensitive result set for a query that contains an expression as one of the columns, the driver cannot satisfy the scroll-sensitive request. The driver downgrades the type of the result returned to scroll-insensitive.
        • The ResultSet methods getTimestamp(), getDate(), and getTime() return references to mutable objects. If the object reference returned from any of these methods is modified, re-fetching the column using the same method returns the modified value. The value is only modified in memory; the database value is not modified.
      GA Release Features
      • Supports SQL read-write access to Apache Cassandra
      • Generates a normalized view of Cassandra data. Tuple and user-defined types are flattened into a relational parent table, while collection types are mapped as relational child tables.
      • Supports Native and Refresh escape sequences to embed CQL commands in SQL-92 statements.
      • Includes the TransactionMode connection property which allows you to configure the driver to report that it supports transactions, even though Cassandra does not support transactions. This provides a workaround for applications that do not operate with a driver that reports transactions are not supported.
      • Support for Binary Large Objects (BLOBs)
      • Support for connection pooling
      • Support for statement pooling
      • Includes the LoginTimeout connection property which allows you to specify how long the driver waits for a connection to be established before timing out the connection request.

    Connect any application to any data source anywhere

    Explore all DataDirect Connectors

    A product specialist will be glad to get in touch with you

    Contact Us