Druid原理分析之内存池管理(转)

为了减轻JVM垃圾回收带来的性能波动,Druid尽量使用对外内存和系统内存。

  • 使用临时文件,在索引创建和合并的过程中,中间临时结果会占用大量的内存。为了减少JVM内存的使用,采用临时文件,通过文件IO的方式,巧妙地利用内核的Page Cache。为了提升IO的性能,Linux操作系统增加了Page Cahe。文件IO的写操作会写到Page Cache中立即返回,内核会定时将脏页也就是还没写到磁盘的页刷到磁盘中,但是并不会立即删除Page Cache,以便读取时快速访问。Apache Kafka也正是利用了文件IO这种特性。
  • MMap在Java中通过调用ByteBuffer的get/put接口来实现文件的读写。他也是依赖于内核的Page Cache。他最大的优势是直接操作内核的内存,减少一次内存复制。
  • DirectBuffer,在Druid中DirectBuffer的使用场景如下:

1. 在索引创建的过程中按块压缩/编码,LZF压缩除外,默认块大小为64KB。

2. 在索引查询过程中按块解压缩/编码,存放解压缩以后的数据,默认块大小为64KB。

3. 在查询过程中存放中间结果集。

4. Group By查询在上下文中设置“userOffHeap=true”,则使用DirectBuffer存放计算结果集。

Druid采用固定分区的内存池。固定分区的优点是足够简单,缺点是每次申请分配固定大小的内存,容易造成内存碎片。但根据上述的使用场景,编码/解码,压缩/解压缩都是按块操作的,所以固定分区非常切合这种场景。Group By查询需要根据维度拉取原始数据,然后在内存中进行聚合操作。默认的内存增量索引使用JVM内存。为了减少创建大量临时对象,Druid设计了临时计算结果集,采用固定大小的对外内存存储Metric的值,先在临时计算结果集中聚合。Druid会给每个处理线程从内存池中申请一块内存,内存大小通过buffer.sizeBytes设置。Group By查询采用固定大小的内存,会造成内存浪费。处理线程每次只处理一个segment分片,为了兼顾处理较大的Segment分片,我们一般将内存块的大小设置的大一些。这样处理较小的segment分片就会造成内存浪费。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Druid连接池可以用于连接和管理ClickHouse数据库。ClickHouse是一个面向在线分析处理(OLAP)的列式数据库管理系统,支持速的查询和分析大规模数据。 使用Druid连接池可以提连接的效率和性能。连接池是一种连接管理机制,通过创建和维护一组预先初始化的数据库连接,应用程序可以通过从连接池获取连接来进行数据库访问操作,而不需要频繁地创建和销毁数据库连接。 Druid连接池支持连接的复用和管理,可以有效地减少连接的创建和销毁开销,提数据库操作的效率。连接池可以通过设置最大连接数和最小空闲连接数,自动管理连接的数量,并根据需要动态调整连接的创建和销毁。 在使用Druid连接池连接ClickHouse时,需要先配置连接池的参数,如连接URL、用户名、密码等。然后可以通过从连接池获取连接来进行数据库操作,如执行查询、插入、更新等操作。使用完毕后,需要通过释放连接的方式将连接返回给连接池,以便其他应用程序可以重用该连接。 Druid连接池还提供了一些额外的特性,如连接的健康检查、连接的超时控制、连接的统计信息等,可以帮助我们更好地管理和监控连接的状态和性能。 总而言之,通过使用Druid连接池连接ClickHouse数据库,可以提连接的效率和性能,减少连接创建和销毁的开销,并且提供一些额外的特性来管理和监控连接的状态和性能。 ### 回答2: Druid连接池与ClickHouse的结合为企业提供了强大的数据分析和查询功能。Druid是一个用于实时大数据分析的开源分布式数据存储系统,而ClickHouse是一个列式数据库管理系统,专注于性能的数据存储和查询。 首先,Druid连接池可以通过将ClickHouse作为数据源来实现对ClickHouse数据的访问和查询。通过配置Druid的数据源连接信息,可以将ClickHouse集群加入到Druid的连接池中。这样一来,Druid可以将ClickHouse集群中的数据加载到内存中进行速查询和分析Druid连接池与ClickHouse的结合具有以下几个优点。首先,Druid的分段存储机制使得大部分数据都可以在内存中进行操作,因此查询速度非常快。同时,ClickHouse的列式存储方式可以有效地压缩数据,减小存储空间的占用。这样一来,企业可以实现速的实时数据分析,并且节约存储空间。 其次,Druid与ClickHouse相结合可以实现多维分析Druid连接池可以将ClickHouse中的数据按照多个维度进行分片和聚合,提供多维度的数据分析功能。企业可以基于Druid连接池对ClickHouse数据进行灵活的查询和分析,获取深入的业务洞察。 最后,Druid连接池与ClickHouse的结合还可以支持可扩展性。Druid连接池可以通过与ClickHouse集群的横向扩展来处理大规模的数据查询和分析需求。ClickHouse通过水平扩展节点来增加查询和存储的吞吐量,而Druid连接池可以无缝地与扩容的ClickHouse集群进行对接,满足企业日益增长的数据处理需求。 综上所述,Druid连接池与ClickHouse的结合为企业提供了速、多维的数据分析和查询功能,并支持可扩展性。这种结合可以帮助企业更好地利用和分析大数据,为业务决策提供准确的依据。 ### 回答3: Druid是一个实时分析大数据的开源项目,而ClickHouse是一个快速的列式存储分析数据库。连接Druid和ClickHouse可以将实时数据分析与大数据存储和查询相结合,从而实现更效的数据分析和查询。 Druid连接池是一个用于管理Druid连接的工具,它可以提供一个连接池来保存和管理与ClickHouse的连接。连接池的主要作用是优化连接的创建和销毁过程,减少连接的创建和销毁开销,从而提连接的复用率和效率。 使用Druid连接池连接ClickHouse的步骤如下: 1. 配置Druid连接池:首先,我们需要在Druid的配置文件中设置ClickHouse的连接参数,包括ClickHouse的IP地址、端口、用户名和密码等信息。这样Druid连接池才能正确地建立与ClickHouse的连接。 2. 创建连接:接下来,我们可以通过Druid连接池来创建与ClickHouse的连接。连接池会根据配置文件中设置的参数来创建连接,同时保持连接的可用性和安全性。 3. 使用连接:一旦连接成功建立,我们就可以使用连接来执行各种ClickHouse的操作,例如查询数据、写入数据等。连接池会自动管理连接的生命周期,包括连接的获取、释放和回收等操作。 4. 释放连接:当我们使用完连接后,应该及时释放连接,以便让连接进入连接池进行重复利用。这样可以避免频繁地创建和销毁连接,提连接的复用率和效率。 连接池能够有效地管理连接资源,提连接的利用率。通过连接池连接Druid和ClickHouse,我们可以实现效的实时数据分析和查询,提升数据处理和分析的效率。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值