How to use prepared statement efficiently using datastax java driver in Cassandra?

john

I need to query one of the tables in Cassandra using Datastax Java driver. Below is the code I have which works fine -

public class TestCassandra {

        private Session session = null;
        private Cluster cluster = null;

        private static class ConnectionHolder {
            static final TestCassandra connection = new TestCassandra();
        }

        public static TestCassandra getInstance() {
            return ConnectionHolder.connection;
        }

        private TestCassandra() {
            Builder builder = Cluster.builder();
            builder.addContactPoints("127.0.0.1");

            PoolingOptions opts = new PoolingOptions();
            opts.setCoreConnectionsPerHost(HostDistance.LOCAL, opts.getCoreConnectionsPerHost(HostDistance.LOCAL));

            cluster = builder.withRetryPolicy(DowngradingConsistencyRetryPolicy.INSTANCE).withPoolingOptions(opts)
                    .withLoadBalancingPolicy(new TokenAwarePolicy(new DCAwareRoundRobinPolicy("DC2")))
                    .withReconnectionPolicy(new ConstantReconnectionPolicy(100L))
                    .build();
            session = cluster.connect();
        }

    private Set<String> getRandomUsers() {
        Set<String> userList = new HashSet<String>();

        for (int table = 0; table < 14; table++) {
            String sql = "select * from testkeyspace.test_table_" + table + ";";

            try {
                SimpleStatement query = new SimpleStatement(sql);
                query.setConsistencyLevel(ConsistencyLevel.QUORUM);
                ResultSet res = session.execute(query);

                Iterator<Row> rows = res.iterator();
                while (rows.hasNext()) {
                    Row r = rows.next();

                    String user_id = r.getString("user_id");
                    userList.add(user_id);
                }
            } catch (Exception e) {
                System.out.println("error= " + ExceptionUtils.getStackTrace(e));
            }
        }

        return userList;
    }
}

I am using above class like this in my main application -

TestCassandra.getInstance().getRandomUsers();

Is there any way I can use PreparedStatement in getRandomUsers efficiently? I guess I need to make sure that I am creating PreparedStatement only once instead of creating it multiple times. What is the best design for that in my current architecture and how can I use it?

Lyuben Todorov

You can create a cache (this is a fairly basic example to give you an idea) of the statements you need. Lets start by creating the class that will be used as a cache.

private class StatementCache {
    Map<String, PreparedStatement> statementCache = new HashMap<>();
    public BoundStatement getStatement(String cql) {
        PreparedStatement ps = statementCache.get(cql);
        // no statement cached, create one and cache it now.
        if (ps == null) {
            ps = session.prepare(cql);
            statementCache.put(cql, ps);
        }
        return ps.bind();
    }
}

Then add an instance to your singleton:

public class TestCassandra {
    private Session session = null;
    private Cluster cluster = null;
    private StatementCache psCache = new StatementCache();
    // rest of class...

And finally use the cache from your function:

private Set<String> getRandomUsers(String cql) {
// lots of code.    
        try {
            SimpleStatement query = new SimpleStatement(cql);
            query.setConsistencyLevel(ConsistencyLevel.QUORUM);
            // abstract the handling of the cache to it's own class.
            // this will need some work to make sure it's thread safe
            // as currently it's not.
            ResultSet res = session.execute(psCache.getStatement(cql));

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

How to use prepared statement efficiently using datastax java driver in Cassandra?

分類Dev

Failover not working with Cassandra when using DataStax C# Driver

分類Dev

com.datastax.oss-> java-driver-coreとcom.datastax.cassandra-> cassandra-driver-coreのCassandraの違い

分類Dev

datastax cassandra java driver issue with scala conversions (play 2.3.x)

分類Dev

Java Prepared Statement ENCRYPT

分類Dev

How can I use jquery variable in prepared statement (in jsp)?

分類Dev

How to insert data in codename one db using prepared statement?

分類Dev

How to write mysql prepared statement using the same variable in many columns?

分類Dev

How to make a fully dynamic prepared statement using mysqli API?

分類Dev

Cassandra DataStax Driver NoHostAvailableException during large batch insert

分類Dev

Nodejs-Apache Cassandra(Datastax Driverを使用)

分類Dev

How can we convert com.datastax.driver.core.LocalDate to java.util.Date?

分類Dev

How many pools per session for Cassandra Java Driver?

分類Dev

Java、Spark、Cassandra java.lang.ClassCastException:com.datastax.driver.core.DefaultResultSetFutureは、シェードにキャストできません

分類Dev

How to use the `using` statement in method

分類Dev

How to perform a LIKE query using multiple keywords from search field using mysqli prepared statement

分類Dev

Cassandra-Java-driver : com.datastax.driver.core.exceptions.InvalidTypeException: 無効なタイプ、列はリストですが、クラス java.lang.String が提供されています

分類Dev

How to find Cassandra coordinator node using java

分類Dev

how do I find out if the update query was successful or not in Cassandra Datastax

分類Dev

How to use Map<String,Long> for datastax

分類Dev

How to create a list of instances efficiently in java using a another list of instances

分類Dev

How to efficiently use external API?

分類Dev

Datastax cassandra-driver(python)がインポートに失敗しました

分類Dev

I don't know how to use statement driver.find_element(By.LINK_TEXT,

分類Dev

PHP - How to substitute array as host parameter in prepared statement

分類Dev

Prepared statement on MySQL not working

分類Dev

rename table prepared statement

分類Dev

Failed prepare in a prepared statement

分類Dev

How to efficiently update using JpaRepository

Related 関連記事

  1. 1

    How to use prepared statement efficiently using datastax java driver in Cassandra?

  2. 2

    Failover not working with Cassandra when using DataStax C# Driver

  3. 3

    com.datastax.oss-> java-driver-coreとcom.datastax.cassandra-> cassandra-driver-coreのCassandraの違い

  4. 4

    datastax cassandra java driver issue with scala conversions (play 2.3.x)

  5. 5

    Java Prepared Statement ENCRYPT

  6. 6

    How can I use jquery variable in prepared statement (in jsp)?

  7. 7

    How to insert data in codename one db using prepared statement?

  8. 8

    How to write mysql prepared statement using the same variable in many columns?

  9. 9

    How to make a fully dynamic prepared statement using mysqli API?

  10. 10

    Cassandra DataStax Driver NoHostAvailableException during large batch insert

  11. 11

    Nodejs-Apache Cassandra(Datastax Driverを使用)

  12. 12

    How can we convert com.datastax.driver.core.LocalDate to java.util.Date?

  13. 13

    How many pools per session for Cassandra Java Driver?

  14. 14

    Java、Spark、Cassandra java.lang.ClassCastException:com.datastax.driver.core.DefaultResultSetFutureは、シェードにキャストできません

  15. 15

    How to use the `using` statement in method

  16. 16

    How to perform a LIKE query using multiple keywords from search field using mysqli prepared statement

  17. 17

    Cassandra-Java-driver : com.datastax.driver.core.exceptions.InvalidTypeException: 無効なタイプ、列はリストですが、クラス java.lang.String が提供されています

  18. 18

    How to find Cassandra coordinator node using java

  19. 19

    how do I find out if the update query was successful or not in Cassandra Datastax

  20. 20

    How to use Map<String,Long> for datastax

  21. 21

    How to create a list of instances efficiently in java using a another list of instances

  22. 22

    How to efficiently use external API?

  23. 23

    Datastax cassandra-driver(python)がインポートに失敗しました

  24. 24

    I don't know how to use statement driver.find_element(By.LINK_TEXT,

  25. 25

    PHP - How to substitute array as host parameter in prepared statement

  26. 26

    Prepared statement on MySQL not working

  27. 27

    rename table prepared statement

  28. 28

    Failed prepare in a prepared statement

  29. 29

    How to efficiently update using JpaRepository

ホットタグ

アーカイブ