2013-10-16 3 views

답변

0

트위터에 의해 cassie을 포함하여 카산드라 연결을 지원하기 위해 만들어진 스칼라 프로젝트가 있었지만 모두 죽어가는 것처럼 보였습니다.

헥터가 알고 계시므로 클래스 패스에 헥터 항아리가 있으면 원하는 경우 스칼라에서 헥터 API를 사용할 수 있습니다. documentation에서 빌리는 예를 들어

, 당신은이 작업을 수행 할 수 있습니다 :

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

또는 구문이 해제 될 수 있도록 내가이 자유를 썼다

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

,하지만 당신은 아이디어를 얻을 .

+0

이것은 나쁜 조언입니다. @ kfer38에서 제안한 것처럼 기본 Java 드라이버를 사용해야합니다. –

+0

아이스크림 아이스크림에 타바스코 소스를 넣으라고 누군가에게 말하는 것은 "나쁜 조언"입니다. Scala 구문 (Scala로 작성된 API와 반대)을 사용하여 모든 Java API를 통합 할 수 있다는 폭 넓은 관점을 놓쳤습니다. OP의 경험으로 인해 Hector를 예로 들었습니다. 나의 요점의 또 다른 예를 생각해 내기 위해 @ kfer38에 대한 명성. Datastax 드라이버가 Hector와 Cassandra 클라이언트를 비교하는 방법은이 문제의 범위를 벗어납니다. – Vidya

+0

아마도 "나쁜 조언"이 너무 강합니다. 군대에서 그는 헥터에 대해 구체적으로 묻습니다. 그러나 새로운 코드를 작성한다는 점에서 스칼라가 처음으로 카산드라에 액세스한다는 사실로부터도 분명합니다.이 경우 효과적으로 비추천 라이브러리를 사용하는 것이 좋지 않습니다. 현재 네이티브 Java 라이브러리 만 유효한 JVM 기반 옵션으로 간주되어야합니다. –

5

datastax java 드라이버를 사용하고 있습니다. 발전은 여전히 ​​github에서 활발합니다. 나는 이전에 헥터를 보았지만 죽어가는 것처럼 보였다. 도움이되는 의사는 http://www.datastax.com/documentation/developer/java-driver/1.0/webhelp/index.html#java-driver/quick_start/qsQuickstart_c.html입니다. 첫 번째 예를 스칼라로 번역했습니다. 또한, typesafe activator에서 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(); 
} 
+0

당신은 나에게 sbt 파일에 넣어야하는 라이브러리 의존성을 말할 수 있습니까? –

+0

'libraryDependencies + = "com.datastax.cassandra"% "cassandra-driver-core"% "1.0.4"' –

+0

오류가 발생합니다 - "추상 유형의 클래스를 찾을 수 없습니다"org.apache.cassandra.db .marshal.TimestampType '] " –

2

나는 상용구 코드를 최소화하기 위해 자바 드라이버의 스칼라 래퍼 작업을 해왔다. 당신은 여기를 찾을 수 :

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] 
} 

가 build.sbt 파일에이 줄을 추가하여 playframework 프로젝트에 라이브러리를 사용하려면 : 여기 https://github.com/InnovaCo/binders-cassandra

일부 카산드라 DB와 함께 작동 클래스의 예입니다 :

libraryDependencies += "eu.inn" %% "binders-cassandra" % "0.2.0" 
관련 문제