【问题标题】:Cassandra insert without batchCassandra 无批次插入
【发布时间】:2021-09-05 14:43:02
【问题描述】:

我正在学习为 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插入的代码是什么?

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

【问题讨论】:

    标签: scala cassandra phantom-dsl


    【解决方案1】:

    1- 如何知道操作是成功还是出错?

    对于这个,理想情况下,您将检查 Future 是否返回成功或失败。你可以在你的 Future 上使用 .transform 以防你想要返回一些东西,或者 .onComplete 如果你不关心返回任何东西,那么,SuccessFailure 之间的模式匹配,然后决定做什么每个案例。 请参阅下面的示例。

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

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

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

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

    【讨论】:

    • 非常感谢蒂亚戈!!感谢您分享您的示例!
    • @M.G.很高兴帮助你。如果它解决了您的问题,请务必接受答案。
    猜你喜欢
    • 2011-07-03
    • 1970-01-01
    • 2017-08-13
    • 2019-03-25
    • 1970-01-01
    • 2023-03-25
    • 2013-01-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多