【问题标题】:Creating a table in Cassandra using Phantom in Scala在 Scala 中使用 Phantom 在 Cassandra 中创建表
【发布时间】:2015-07-28 04:25:06
【问题描述】:

我在这里学习教程:http://blog.websudos.com/2015/04/04/a-series-on-phantom-part-1-getting-started-with-phantom/

Cassandra 版本:2.1.8

PhatomVersion 1.10.1

Scala 版本:2.11.2

sbt 版本:0.13.8

除了文章中给出的代码之外,我还有以下内容:

object App {
  def main(args: Array[String]) {
    val user = new User(UUID.fromString("00000000-0000-0000-0000-000000000000"), "test@test.com", "Dan", DateTime.now)
   val resultSetFuture = Users.store(user)
   Await.result(resultSetFuture, Duration.Inf)
  }
}

当我 run 来自 sbt 的程序时,我收到以下错误(这里是堆栈跟踪的头部):

[error] (run-main-0) com.datastax.driver.core.exceptions.SyntaxError: line 1:157 no viable alternative at input 'CONSISTENCY' (..., 'Dan', 1437914728864) USING [CONSISTENCY]...)
com.datastax.driver.core.exceptions.SyntaxError: line 1:157 no viable alternative at input 'CONSISTENCY' (..., 'Dan', 1437914728864) USING [CONSISTENCY]...)

我检查了csqlsh 并且已经创建了命名空间但是没有创建表。

非常感谢任何帮助。

这里是build.sbt,如果有用的话:

name := "Something"

organization := "danmisun.github.com"

version := "0.1.0-SNAPSHOT"

scalaVersion := "2.11.2"

crossScalaVersions := Seq("2.10.4", "2.11.2")

val PhantomVersion = "1.10.1"

libraryDependencies ++= Seq(
  "org.scalatest" %% "scalatest" % "2.2.1" % "test",
  "org.scalacheck" %% "scalacheck" % "1.11.5" % "test",
  "com.websudos" % "phantom_2.11" % PhantomVersion,
  "com.websudos" % "phantom-dsl_2.11" % PhantomVersion,
  "com.websudos" % "phantom-testkit_2.11" % PhantomVersion % "test,   provided"
)

resolvers ++= Seq(
  "Typesafe repository snapshots" at "http://repo.typesafe.com/typesafe/snapshots/",
  "Typesafe repository releases" at "http://repo.typesafe.com/typesafe/releases/",
  "Sonatype repo"                    at "https://oss.sonatype.org/content/groups/scala-tools/",
  "Sonatype releases"                at "https://oss.sonatype.org/content/repositories/releases",
  "Sonatype snapshots"               at "https://oss.sonatype.org/content/repositories/snapshots",
  "Sonatype staging"                 at "http://oss.sonatype.org/content/repositories/staging",
  "Java.net Maven2 Repository"       at "http://download.java.net/maven/2/",
  "Twitter Repository"               at "http://maven.twttr.com",
  Resolver.bintrayRepo("websudos", "oss-releases")
)

initialCommands := "import something._"

【问题讨论】:

  • 查询级别的一致性级别已在​​ CQL 协议的更新版本(3.1+)中被删除,但我很久以前写过那篇博文,所以它有点过时了。只需删除一致性级别定义,一切都会恢复正常。现在您必须指定与USE CONSISTENCY bla 的一致性,然后运行查询,过去每个查询都可以指定一个自定义级别。
  • 幻影1.12.x 版本中重新添加了对一致性级别的支持。这是一个很大的内部变化,现在在协议级别而不是查询级别指定一致性级别。
  • @flavian 有没有如您所说的如何在协议级别设置一致性级别的示例?
  • 您好@ThiagoPereira,您在 DSL 级别实现这一目标的方式没有变化,这种变化是底层会话在查询时指定一致性级别的内部方式。我们看到的一个问题是 Cassandra 宣传所有 Protocol.V3 版本的 Cassandra 都会正确执行此操作,但并非所有版本都正确执行此操作,因此某些 Cassandra 版本错误地声称支持它们不支持的版本,或者排除逻辑可能不好够了。
  • 嗨 @flavian 是的,我已经在 github 上更新了我的测试项目,如果可以,请看一下,但无论如何,我正在从声明中设置一致性级别,旧式一致性级别直接从插入给出一个错误,抱怨没有可行的替代方案。我正在使用 cassandra 2.2,并且语句似乎在 1.16 phantom-dsl 版本上运行良好。

标签: scala cassandra phantom-dsl


【解决方案1】:

Users.store 返回什么?如果它返回 Future[ResultSet],则等待未来完成。尝试等待并检查。

import scala.concurrent.{ Await, Future }
import scala.concurrent.duration.Duration

val resultSetFuture = Users.store(user)
Await.result(resultSetFuture, Duration.Inf) 

【讨论】:

  • 谢谢!我现在得到一个新的错误输出。这是堆栈跟踪: [error] (run-main-0) com.datastax.driver.core.exceptions.SyntaxError: line 1:157 在输入 'CONSISTENCY' 处没有可行的替代方案 (..., 'Dan', 1437911637295 ) USING [CONSISTENCY] ...) com.datastax.driver.core.exceptions.SyntaxError: line 1:157 在输入'CONSISTENCY' (..., 'Dan', 1437911637295) USING [CONSISTENCY].. .) 在 com.datastax.driver.core.Responses$Error.asException(Responses.java:101) 在 com.datastax.driver.core.DefaultResultSetFuture.onSet(DefaultResultSetFuture.java:140) 在
  • cassandra / phantom / scala 版本?
  • @kpbochenek 为主要问题添加了答案
  • @dan.mi.sun 我希望你已经找到了正确的答案,这里的问题是在幻象内部并且已经在以后的版本中得到修复。
【解决方案2】:

首先您需要创建表:(在第一次运行后注释,否则您将收到“表已存在异常:P)

Await.result(Users.create.future(), 5000 millis)

然后删除.consistencyLevel_=(ConsistencyLevel.ALL),因为幻像库似乎非常落后于 cassandra 中的更改,即 ConsistencyLevel 现在是按会话而不是按请求定义的。

现在应该可以了,但我会说这个库看起来不太有希望。

【讨论】:

  • 我什至无法在任何地方的文档中看到如何设置一致性级别。查看源代码也不会显示任何提示。无赖。
猜你喜欢
  • 2015-09-16
  • 1970-01-01
  • 2019-10-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-18
  • 2016-10-22
  • 2018-11-12
相关资源
最近更新 更多