没有批处理的 Cassandra 插入

Cassandra insert without batch

我正在学习为 Cassandra 使用 PhantomDSL 驱动程序 (Scala)。 这里有一个很好的示例:https://github.com/iamthiago/cassandra-phantom

例如向 Cassandra 添加歌曲:

 def saveOrUpdate(songs: Song): Future[ResultSet] = {
    Batch.logged
      .add(SongsModel.store(songs))
      .add(SongsByArtistsModel.store(songs))
      .future()
  }

为了简化,我将使用 SongsByArtistsModel:

删除
 def saveOrUpdate(songs: Song): Future[ResultSet] = {
    Batch.logged
      .add(SongsModel.store(songs))
      .future()
  }

我有两个问题: 1- 我如何知道操作是成功还是出错? 2-我一直在读到使用 Batch 在性能方面并不好。不使用 Batch 插入的代码是什么?

抱歉,如果这些是虚拟问题,我才刚刚开始。

1- How do I know if the operation has been successfully or has been an error?

对于这个,理想情况下,您将检查 Future return 是成功还是失败。你可以在你的 Future 上使用 .transform 以防你想要 return 某些东西或者 .onComplete 如果你不关心 returning 任何东西,那么 [=] 之间的模式匹配=14=] 和 Failure,并决定对每种情况要做什么。 请参阅下面的示例。

save(song).transform {
   case Success(value) => //handle success case
   case Failure(exception) => //handle failure case
}

2- I've been reading that using Batch isn't good in terms of performance. What's the code for inserting without using Batch

如果你想实现原子性,建议在Cassandra中进行批处理。因此,您可以组合多个操作,而这正是我在示例中尝试做的,因为我希望两个 table 保持一致。现在,如果您只想使用一个 table,您可以按如下方式编写方法:

def save(song: Song): Future[ResultSet] = {
   SongsModel
      .store(song)
      .future()
}