没有批处理的 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()
}
我正在学习为 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()
}