我是Cassandra的新手,我读过Cassandra鼓励非规范化和重复数据.这让我有点困惑.让我们想象以下场景:
我有一个包含四个表的键空间:A,B,C和D.
CREATE TABLE A (
tableID int,
column1 int,
column2 varchar,
column3 varchar,
column4 varchar,
column5 varchar,
PRIMARY KEY (column1, tableID)
);
Run Code Online (Sandbox Code Playgroud)
让我们假设其他表(B,C,D)具有与表A相同的结构和相同的数据,只有不同的主键,以便响应其他查询.
如果我升级表A中的一行,我如何确保具有相同数据的其他表中的数据的一致性?
我们计划基于play框架开发一些微服务。他们将提供 REST API,其中很多将在后台使用 akka 集群/集群分片。
我们希望有一个 api 网关来公开我们内部服务的 api,但我们面临一个大问题:
- 每个服务的多个实例将在某个 ip 和端口下运行。
- API 网关如何知道服务实例在哪里运行?
- 是否有类似负载平衡器的东西可以跟踪所有正在运行的服务?
哪种解决方案可以填补“API 网关”/“负载均衡器”的空缺?
shapeless是否提供了一个类型类/宏来召唤一个HList包含案例类所有参数的默认值?
假设我们有这个案例类:
case class User(name: String, age: Int = 18)
Run Code Online (Sandbox Code Playgroud)
然后我想得到这样一个HList:
None :: Some(() => 18) :: HNil
Run Code Online (Sandbox Code Playgroud) scala 中的常规 future 提供了zip运算符。当两者都成功时,它将结合它们的价值并并行运行它们。当有两只猫时,猫身上是否有类似的东西EitherT[Future, _, _]?
val a: EitherT[Future, String, Int] = EitherT.right(10)
val b: EitherT[Future, String, Int] = EitherT.right(20)
val sum: EitherT[Future, String, Int] = for ((a, b) <- a zip b) yield a + b
Run Code Online (Sandbox Code Playgroud)
我希望sum是一个Right(30)whena和b都是两个Right值。此外,与该Future.zip函数一样,两个 future 应该并行运行:
为什么以下代码不能按预期工作?通过查看代码,我认为它可能会返回"数字列表",因为数字是带有数字的列表.但我运行代码并将输出作为"字符串列表".猜猜我清除了这里的大部分混乱.
val numbers: List[Int] = List(1,2,3)
val numbersMatch: String = numbers match {
case listOfStrings: List[String] => "a list of strings"
case listOfNumbers: List[Int] => "a list of numbers"
case _ => ""
}
println(numbersMatch)
Run Code Online (Sandbox Code Playgroud)