【问题标题】:Using Apache Cassandra In Coldfusion在 Coldfusion 中使用 Apache Cassandra
【发布时间】:2014-12-22 10:58:24
【问题描述】:

我正在尝试在使用 Coldfusion 进行编码的项目中使用 Apache Cassandra。由于 Coldfusion 没有适用于 Apache Cassandra 的驱动程序,反之亦然,因此我正在尝试使用 Cassandra 的 Java 驱动程序。

我几乎是 Java 新手,所以请多多包涵。

我已成功将必要的 .jar 文件复制到 /opt/railo/lib/(我正在使用 Railo),并且还使用以下代码使用 Coldfusion 连接到 Cassandra。我需要帮助的是在运行查询时遍历 Cassandra 返回的结果。我在下面包含了我非常简单的代码:

<cfset MyClusterInit = CreateObject("java", "com.datastax.driver.core.Cluster")>
<cfset MyCluster = MyClusterInit.builder().addContactPoint("127.0.0.1").build()>
<cfset MySession = MyCluster.connect("mytest")>
<cfset GetCustomer = MySession.execute("SELECT * FROM customer")>
<cfdump var="#GetCustomer#">

如何遍历返回的结果? cfdump 返回 Java 方法 ArrayBackedResultSet$SinglePage。这不是我可以使用 Coldfusion 循环的东西。

从“Cassandra 和 Java 入门”帖子中,我看到代码如下:

ResultSet results = session.execute("SELECT * FROM users WHERE lastname='Jones'");
for (Row row : results) {
System.out.format("%s %d\n", row.getString("firstname"), row.getInt("age"));
}

如何在 Coldfusion 中复制上述内容?

非常感谢您抽出宝贵时间提供帮助。

【问题讨论】:

  • 我没用过Cassandra,但是只要你有JDBC驱动,你应该可以在Admin界面设置一个“Other”类型的DSN。你试过吗?
  • Leigh 的建议比尝试在 Java 中执行此操作要好。您可能需要实例化其他 Java 对象(示例中的 ResultSet)并读入您的结果,循环使用特定的 Java 方法。同时,JDBC 将为您抽象所有这些,让您使用 cfquery。
  • 嘿,利和马克。感谢您的指点。我现在正在试用 Cassandra JDBC 驱动程序,并将更新安装/使用详细信息以帮助其他人。

标签: java coldfusion cassandra cassandra-2.0


【解决方案1】:

正如上面 Leigh 和 Mark A Kruger 所指出的,使用 JDBC 驱动程序是在 Coldfusion/Railo 中连接到 Cassandra 的更智能方法。只需按照以下说明操作:

  1. https://code.google.com/a/apache-extras.org/p/cassandra-jdbc/ 下载 JDBC 驱动程序。它适用于最新版本的 Cassandra(在撰写本文时)

  2. 确保同时下载 Cassandra JDBC 依赖项

  3. 将 jar 文件复制到您的 Coldfusion lib 目录

  4. 重启 Coldfusion/Railo

  5. 创建数据源类型“其他”

  6. 对于驱动程序类,输入“org.apache.cassandra.cql.jdbc.CassandraDriver

  7. 连接字符串应为“jdbc:cassandra://host1--host2--host3:9160/keyspace1?primarydc=DC1&backupdc=DC2&consistency=QUORUM

  8. 就是这样!您现在可以像查询任何其他数据库一样查询 Cassandra

不仅如此。我设法让 Java 驱动程序直接工作,并且 JDBC 驱动程序的性能比直接调用 Java 驱动程序要好得多。我的测试只是一个非常简单的表,有 3 条记录,使用 Java 直接连接需要 50 毫秒,而使用 JDBC 驱动程序需要不到 5 毫秒。

感谢 Leigh 和 Mark A Kruger 的提示!

【讨论】:

  • 是的,通过 createObject 调用手动连接通常比较慢。当你手动连接时,通过createObject,每次都必须打开一个新的db连接,这是一个昂贵的操作。通过 DSN 连接可让您利用连接池。感谢您发布下一个人的详细信息!
猜你喜欢
  • 2015-09-10
  • 1970-01-01
  • 2015-06-15
  • 1970-01-01
  • 2017-03-05
  • 2020-08-14
  • 2019-12-23
  • 2015-04-18
  • 2017-01-09
相关资源
最近更新 更多