思考 Cassandra 的 Session 和 Cluster 类(Java 驱动程序)我想知道有什么区别。在 Hibernate 中,每次都创建一个 session 并共享 session 工厂。
我从许多来源了解到,它被认为是创建一个 session 并在多个线程之间共享它。
我确实觉得这有点古怪。我本以为我会为每个线程或正在进行的操作/任务创建一个 session 。
- 我这样做有问题吗?
- 性能影响是什么? session 线程安全吗?
- 我是否会在较大的结果集上遇到游标问题(或者 cassandra 没有游标?)
- 假设 Session 是线程安全的是否安全,或者是否存在我应该注意的边缘情况?
最佳答案
在传统的 RDBMS 中, session 通常指的是事务上下文,许多实现都不是线程安全的。同时, session 通常是在某种连接池之上实现的,连接的终止(通过错误)也会终止 session 。
在 Cassandra 中,实际上并没有跨多个调用的事务上下文,因此一旦连接到 keyspace
,session 就可以共享并且不需要重新已确立的。此外,驱动程序已经处理了重新连接和连接池,因此 session 不依赖于连接。
最后,针对 session 准备的语句被缓存,重新创建 session 效率低下并且必须不断地重新准备语句。
关于java - Cassandra Session vs Cluster 分享什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29971005/