- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在尝试了解 Datastax Cassandra Driver 中的连接池,以便在我的网络服务中更好地使用它。
我有 1.0 版的文档。它说:
The Java driver uses connections asynchronously, so multiple requests can be submitted on the same connection at the same time.
他们通过联系了解什么?当连接到集群时,我们有:一个构建器、一个集群和一个 session 。其中哪一个是连接?
比如有这个参数:
maxSimultaneousRequestsPerConnection - number of simultaneous requests on all connectionsto a host after which more connections are created.
因此,在连接池的情况下(这是我所期望的),这些连接是自动创建的。但究竟有什么联系呢?集群对象? session ?
我正在尝试决定在我的网络服务中保持“静态”的内容。目前,我决定让 Builder 保持静态,因此对于每次调用,我都会创建一个新的 Cluster 和一个新的 Session。这个可以吗?如果Cluster是Connection,那应该没问题。但是吗?现在,记录器说,对于每次调用:
2013:12:06 12:05:50 DEBUG Cluster:742 - Starting new cluster with contact points
2013:12:06 12:05:50 DEBUG ControlConnection:216 - [Control connection] Refreshing node list and token map
2013:12:06 12:05:50 DEBUG ControlConnection:219 - [Control connection] Refreshing schema
2013:12:06 12:05:50 DEBUG ControlConnection:147 - [Control connection] Successfully connected to...
所以,它每次都连接到集群?这不是我想要的,我想重用连接。
那么,连接其实就是Session?如果是这种情况,我应该保持 Cluster 静态,而不是 Builder。
我应该调用什么方法,以确保尽可能重用连接?
最佳答案
accepted answer (在撰写本文时) 给出了正确的建议:
As long as you use the same Session object, you [will] be reusing connections.
但是,有些部分本来就过于简单了。我希望以下内容能让您深入了解每种对象类型的范围及其各自的用途。
Cluster.Builder
用于配置和创建集群Cluster
代表整个Cassandra 环一个环由多个节点(主机)组成,环可以支持一个或多个键空间。您可以查询有关集群(环)级属性的集群对象。
我还认为它是表示调用应用程序 到环的对象。您已将应用程序的需求(例如加密、压缩等)传达给构建器,但首先实现/与实际 C* 环通信的是此对象。如果您的应用程序为不同的用户/目的使用多个身份验证凭据,您可能有不同的Cluster 对象,即使它们连接到同一个环。
Session
本身不是连接,但它管理它们session 可能需要与环中的所有 节点对话,这不能通过单个 TCP 连接来完成,除非环正好包含一 (1) 个节点的特殊情况。 Session 管理一个 connection pool ,并且该池通常为环中的每个节点至少有一个连接。这就是为什么您应该尽可能多地重复使用Session 对象。应用程序不直接管理或访问连接。
Session 从 Cluster 对象访问;它通常一次“绑定(bind)”到一个键空间,成为从该 session 执行的语句 的默认键空间。语句可以使用完全限定的表名(例如 keyspacename.tablename
)来访问其他键空间中的表,因此不需要使用多个 session 来跨键空间访问数据.使用多个 session 与同一个环对话会增加所需的 TCP 连接总数。
Statement
在 session 报表可以是prepared或不,并且每个都改变数据或查询它(在某些情况下,两者)。最快、最有效的语句最多需要与一个节点通信,并且来自拓扑感知集群的 session 应该只与该节点(或其对等节点之一)通信在单个 TCP 连接上。效率最低的语句必须触及所有副本(大多数节点),但这将由环本身上的协调器节点处理,因此即使对于这些语句, session 将仅使用来自应用程序的单个连接。
此外,驱动程序使用的 Cassandra 二进制协议(protocol)的第 2 版和第 3 版在连接上使用多路复用。因此,虽然单个语句需要至少一个 TCP 连接,但该单个连接可能同时服务多达 128 或 32k+ 个异步请求,具体取决于协议(protocol)版本(分别)。
关于java - Cassandra Datastax 驱动程序 - 连接池,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20421763/
最近,我们将专用 SQL 池部署到生产中的 Synapse 工作区。在开发中,我们可以访问无服务器 SQL 池和专用 SQL 池。但是,在生产中,我们可以访问无服务器 SQL 池,但无法访问专用 SQ
假设您从一个项目公开 WCF 服务,并使用“添加服务引用”(在本例中为 Framework 3.5 WPF 应用程序)在另一个项目中使用它。 当您重新实例化 ClientBase 派生代理时,Clie
我有一个函数,它使用 multiprocessing.Pool 并行处理一个数据集中的所有数据。 from multiprocessing import Pool ... def func():
我正在尝试使用进程对象在 python 中使用工作池。每个 worker (一个进程)进行一些初始化(花费大量时间),传递一系列作业(理想情况下使用 map()),并返回一些东西。除此之外,不需要任何
我是软件工程师,最近我构建了我的 Linux 机器,想探索更多系统管理员类型的任务。我已经探索并阅读了很多关于 ZFS 的内容,但我越来越困惑,因为每篇文章对它的描述都不一样。 Everything
我有 zfs 池: $ sudo zpool status lxd pool: lxd state: ONLINE scan: none requested config: NAME
我有一个基于 Actor 的项目,对于其中的一部分,我必须使用一些接收消息的 Actor ,然后一个 Actor 分别分配给每个请求,每个 Actor 负责执行其消息请求,所以我需要类似线程的东西我的
我已经使用 QEMU 模拟器成功地将 FreeBSD 安装到原始图像文件中。我已经使用 ZFS 文件系统 (ZFS POOL) 格式化了图像文件。 使用下面的命令我已经成功地挂载了准备好由 zpool
我正在使用 multiprocessor.Pool并行处理一些文件。该代码等待接收文件,然后使用 Pool.apply_async 将该文件发送给工作人员。 ,然后处理文件。 这段代码应该一直在运行,
我正在使用带有光滑的 Bonecp 数据源。并发现池包含关闭的连接所以我总是遇到这个异常 java.sql.SQLException: Connection is closed! at com
我有apartment gem的 Multi-Tenancy Rails应用程序,我可以使用apartment-sidekiq在每个工作程序中成功切换数据库租户。但是,sidekiq worker 正
ZFS 池可能由数据集(文件系统、快照等)或卷组成。 ZFS 卷就像 block 设备,但我不明白池和文件系统之间的区别。当我通过 zpool create pool1 sda sdb sdc 创建
我在 docker 容器上运行了 airflow。我正在使用 airflow 2.0.2 版。 我知道我实际上可以通过 UI 创建池。但我正在寻找一种通过 pools.json 文件在 docker
我在tomcat中有一个jdbc池,用于建立数据库连接。我在使用后没有显式关闭连接对象。我的“maxActive”参数设置为100。应用程序运行了一段时间,但随后失败进行数据库查询。它会等待无限时间来
阅读 PostgreSQL 文档 here我读了以下内容: As well, connections requested for users other than the default config
我在 docker 容器上运行了 airflow。我正在使用 airflow 2.0.2 版。 我知道我实际上可以通过 UI 创建池。但我正在寻找一种通过 pools.json 文件在 docker
我正在读取一个大的 URL 文件并向服务发出请求。该请求由返回 ListenableFuture 的客户端执行。现在我想保留一个 ListenableFuture 池,例如最多同时执行 N 个 Fut
我想使用队列来保存结果,因为我希望消费者(串行而不是并行)在工作人员产生结果时处理工作人员的结果。 现在,我想知道为什么以下程序挂起。 import multiprocessing as mp imp
我正在开发一个单页应用程序,目前正在构建一个 JQuery、ajax 函数,以便我的所有调用都能通过。 对于一个典型的页面,我可能有 3 个 ajax 调用。我的想法是,如果用户互联网出去将这些 aj
我有一个单位类及其一些子类(弓箭手、剑客等)。我怎样才能创建一个回收所有单元类型子类的池? 最佳答案 这是不可能的,因为池只能包含一种特定类型的对象。否则你可能会遇到这样的情况: Pool unitP
我是一名优秀的程序员,十分优秀!