Cassandra 插入,无批次

MG

我正在学习为 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- 我如何知道操作是成功还是出错?

对于这个,理想情况下,您将检查 Future 返回成功还是失败。.transform如果您想返回某些内容或者.onComplete不关心返回任何内容,则可以在 Future 上使用 a ,然后在Success之间进行模式匹配Failure,并决定在每种情况下做什么。请参阅下面的示例。

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

2- 我一直在读到使用 Batch 在性能方面并不好。不使用 Batch 插入的代码是什么

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

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章