0

私は scala と cassandra の両方が初めてです。hector を使用して cassandra と Java の接続性を知っています。しかし、scala を介して cassandra を接続する方法がわかりません。これには簡単な例が必要です。

4

4 に答える 4

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();
}
于 2013-10-16T16:38:13.193 に答える
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"
于 2014-05-10T23:30:32.137 に答える
0

Twitter のcassieなど、Cassandra 接続をサポートするために発生した Scala プロジェクトがいくつかありましたが、それらはすべて消滅したように見えました。

Hector を知っているので、クラスパスに Hector jar がある場合は、必要に応じて Scala で Hector API を簡単に使用できます。

たとえば、ドキュメントから借用すると、次のようにすることができます。

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

また

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

これはフリーハンドで書いたので、構文がずれている可能性がありますが、お分かりいただけると思います。

于 2013-10-16T06:03:31.150 に答える