加入收藏 | 设为首页 | 会员中心 | 我要投稿 济源站长网 (https://www.0391zz.cn/)- 数据工具、数据仓库、行业智能、CDN、运营!
当前位置: 首页 > 站长资讯 > 评论 > 正文

Java中的数据类型

发布时间:2021-02-06 14:37:00 所属栏目:评论 来源:互联网
导读:查看Linux内核git提交记录,发现在 3.13.0 的内核版本上还没有实现适用于多队列的IO调度算法,且此时还没完全切到多队列架构,因此使用单队列的 sda 设备依然存在传统的noop,deadline和cfq调度算法,而使用多队列的 vda 设备(virtio)的IO调度算法只有none。

查看Linux内核git提交记录,发现在 3.13.0 的内核版本上还没有实现适用于多队列的IO调度算法,且此时还没完全切到多队列架构,因此使用单队列的 sda 设备依然存在传统的noop,deadline和cfq调度算法,而使用多队列的 vda 设备(virtio)的IO调度算法只有none。为了使用mq-deadline调度算法把内核升级的风险似乎很大。因此IO调度算法方面没太多可优化的。

但Request层优化只能这样了?既然IO调度算法无法优化,我们是否可以修改queue相关的参数?例如加大Request队列的长度,加大预读的数据量。

在/sys/block/vda/queue中有两个可写的文件nr_requests和read_ahead_kb,前者是配置块层最大可以申请的request数量,后者是预读最大的数据量。默认情况下,
 

单队列的架构,一个块设备只有一个全局队列,所有请求都要往这个队列里面塞,这在多核高并发的情况下,尤其像服务器动则32个核的情况下,为了保证互斥而加的锁就导致了非常大的开销。此外,如果磁盘支持多队列并行处理,单队列的模型不能充分发挥其优越的性能。

多队列的架构下,创建了Software queues和Hardware dispatch queues两级队列。Software queues是每个CPU core一个队列,且在其中实现IO调度。由于每个CPU一个单独队列,因此不存在锁竞争问题。Hardware Dispatch Queues的数量跟硬件情况有关,每个磁盘一个队列,如果磁盘支持并行N个队列,则也会创建N个队列。在IO请求从Software queues提交到Hardware Dispatch Queues的过程中是需要加锁的。理论上,多队列的架构的效率最差也只是跟单队列架构持平。

咱们回到当前待优化的服务器,当前使用的是什么IO调度器呢?
 

Request层

在异步写的场景中,当脏页达到一定比例,就需要通过通用块层把页缓存里的数据回刷到磁盘中。bio层记录了磁盘块与内存页之间的关系,在request层把多个物理块连续的bio合并成一个request,然后根据特定的IO调度算法对系统内所有进程产生的IO请求进行合并、排序。那么都有什么IO调度算法呢?

网上检索IO调度算法,大量的资料都在描述Deadline,CFQ,NOOP这3种调度算法,却没有备注这只是单队列上适用的调度算法。在最新的代码上(我分析的代码版本为 5.7.0),已经完全切换到multi-queue的新架构上了,支持的IO调度算法就成了mq-deadline,BFQ,Kyber,none。

关于不同IO调度算法的优劣,网上有非常多的资料,本文不再累述。

在《Linux-storage-stack-diagram_v4.10》 对 Block Layer 的描述可以形象阐述单队列与多队列的差异。
 

从功能上说,PostgreSQL可以与Oracle数据库媲美。Oracle数据库是目前功能最强大的商业数据库,PostgreSQL则是功能最强大的开源数据库。Oracle在集群功能如RAC、ASM方面比较强,但PostgtreSQL也有一些比Oracle强的特性,如在索引和可扩展等方面。

PostgreSQL与Oracle有很多相似之处,它们都是使用共享内存的进程结构,客户端与数据库服务器建立一个连接后,数据库服务器就启动一个进程来为这个连接服务。这与MySQL的线程模型不一样。

PostgreSQL与Oracle一样,PostgreSQL的WAL日志与Oracle的Redo日志都是用于记录物理块数据的变化的,这与MySQL的binlog是不一样的。

PostgreSQL在主备库方面非常完善,可以搭建同步备库、异步备库、延迟备库,在同步备库中可以配置数据同步到任意个备库上。只读备库在查询与应用日志的冲突解决方面提供了更多的参数控制,让DBA更容易控制只读备库的查询冲突。在配置备库的过程中,PostgreSQL比Oracle简单很多,备库的搭建也更灵活。

PostgreSQL与Oracle的不同之处在于,PostgreSQL有更多支持互联网特征的功能。如PostgreSQL数据类型支持网络地址类型、XML类型、JSON类型、UUID类型以及数组类型,且有强大的正则表达式函数,如where条件中可以使用正则表达式匹配,也可以使用Python、Perl等语言写存储过程等。

另外,PostgreSQL更小巧。PostgreSQL可以在内存很小的机器上完美运行起来,如在512MB的云主机中,而Oracle数据库基本要在数GB的云主机中才可以运行起来。

Oracle安装包动辄几个GB以上级别,而PostgreSQL的安装包只有几十MB大小。PostgreSQL在任何一个环境都可以轻松地安装。Oracle数据库安装花费的时间是在小时级别,而PostgreSQL在分钟级别就可以完成安装。

(编辑:济源站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读