通过scala连接cassandra集群

问题描述 投票:0回答:4

我在scala和cassandra中都是新手。我知道使用hector的cassandra与java的连接。但是我不知道如何通过scala连接cassandra。我想要一个简单的例子。

scala playframework cassandra
4个回答
0
投票

[出现了一些Scala项目来支持Cassandra连接,包括Twitter的cassie,但它们似乎都死了。

由于您知道Hector,如果您在类路径中有Hector jar,则可以根据需要在Scala中简单地使用Hector API。

例如,从documentation借用,您可以这样做:

val myCluster = HFactory.getOrCreateCluster("test-cluster","localhost:9160")

val template = new ThriftColumnFamilyTemplate[String, String](ksp, columnFamily, StringSerializer.get(), StringSerializer.get())

我写了此徒手画,所以语法可能不正确,但您明白了。


5
投票

我正在使用datastax Java驱动程序。它的开发在github上仍然活跃。我早些时候看过赫克托,但似乎快要死了。该文档对您有帮助:http://www.datastax.com/documentation/developer/java-driver/1.0/webhelp/index.html#java-driver/quick_start/qsQuickstart_c.html。我将第一个示例翻译为scala。另外,请查看来自typesafe激活器的akka​​-cassandra示例。干杯。

object Hello extends App {

  import com.datastax.driver.core.Cluster;
  import com.datastax.driver.core.Host;
  import com.datastax.driver.core.Metadata;
  import scala.collection.JavaConversions._

  var cluster: Cluster = null
  private var session: Session = null

  def connect(node: String) {
    cluster = Cluster.builder().addContactPoint(node).build()
    val metadata = cluster.getMetadata()
    printf("Connected to cluster: %s\n",
      metadata.getClusterName())
    metadata.getAllHosts() map {
      case host =>
        printf("Datatacenter: %s; Host: %s; Rack: %s\n",
          host.getDatacenter(), host.getAddress(), host.getRack())
    }
  }

  def close() {
    cluster.shutdown()
  }

  this.connect("127.0.0.1");
  this.close();
}

2
投票

我一直在研究Java Driver的Scala包装器,以最大程度地减少样板代码。您可以在这里找到它:https://github.com/InnovaCo/binders-cassandra

这里是可与某些Cassandra DB一起使用的类的示例:

class Db(session: com.datastax.driver.core.Session) {

  implicit val cache = new SessionQueryCache[PlainConverter](session)

  // class for binding input/output parameters
  case class User(userId: Int, name: String)

  def insertUser(user: User): Future[Unit] = cql"insert into users(userid, name) values (?, ?)".bind(user).execute

  // returns Future[Iterator[User]]
  def selectAllUsers: Future[Iterator[User]] = cql"select * from users".all[User]

  // if no user is found will throw NoRowsSelectedException
  def selectUser(userId: Int) = cql"select * from users where userId = $userId".one[User]

  // if no user is found will return None, otherwise Some(User)
  def selectUserIfFound(userId: Int) = cql"select * from users where userId = $userId".oneOption[User]
}

要在您的playframework项目中使用库,请将此行添加到build.sbt文件:

libraryDependencies += "eu.inn" %% "binders-cassandra" % "0.2.0"

0
投票

Datastax Driver 3 Scala集成

我找到了一些文章(example)Maga library展示了如何更好地将Java驱动程序与Scala集成在一起,并且看起来并不难。

结果是我自己的库,您可以在GitHub上找到:https://github.com/atais/scassandra

[它允许在Scala中无缝集成CQL查询和操作ListenableFuture,而无需将其映射到scala.Future

implicit protected val session: com.datastax.driver.core.Session
implicit protected val executor: java.util.concurrent.Executor

val selectCQL: ListenableFuture[PreparedStatement] = cql"SELECT * FROM $table WHERE key = ?"
val result: ListenableFuture[ResultSet] = execute(selectCQL, "my-key")

result.map(rs => rs.one())
      .map(...)

享受:)

© www.soinside.com 2019 - 2024. All rights reserved.