• pgsql/mysql/clickhouse性能对比


    目前公司使用的关系型数据库版本较老,有计划对关系型数据库进行一次升级。有两个方案,一是将现在的mysql5.7升级到8.0,二是将数据库替换成pgsql15,所以对这两个库的查询写入和资源损耗进行一次对比。

    前置准备

    服务器

    两台配置相同的服务器。配置参数如下:

    CPU:

    内存:32GB

    磁盘:

    网络:千兆网络

    数据库版本

    MySQL 8

    PostgreSQL 15

    程序

    使用 springboot + mybatis-plus 框架进行数据插入和查询。部分代码如下:

    数据插入:

    1.      @Test
    2.      public void test01() {
    3.  
    4.          String importer = "FEHMİ EROĞLU DIŞ TİCARET ANONİM ŞİRKETİ";
    5.          String exporter = "MUNDIAL IMPORTAÇAO E EXPORTAÇAO EIRELI";
    6.          String hsCode = "081310000000";
    7.          String countryOfDestination = "brazil";
    8.          String countryOfOrigin = "turkey";
    9.          double weight = 40000.0000;
    10.          double sumOfUSD = 263000.0000;
    11.          double weightUnitPrice = 6.58;
    12.          double qty = 0.0000;
    13.          String qtyUnit = "KG";
    14.  
    15.          List group = new ArrayList<>();
    16.          for (long i = 0; i < 1000000; i += 1000) {
    17.              group.add(i);
    18.         }
    19.  
    20.          group.stream().parallel().forEach(num -> {
    21.              long point = num + 1000;
    22.              List list = new ArrayList<>();
    23.              for (long i = num; i < point; i++) {
    24.                  Analysis analysis = Analysis.builder()
    25.                         .date(new Date())
    26.                         .importer(importer + (num + i))
    27.                         .exporter(exporter + (num + i))
    28.                         .hsCode(hsCode + (num + i))
    29.                         .countryOfDestination(countryOfDestination + (num + i))
    30.                         .countryOfOrigin(countryOfOrigin + (num + i))
    31.                         .weight(BigDecimal.valueOf(weight + (num + i)))
    32.                         .sumOfUSD(BigDecimal.valueOf(sumOfUSD + (num + i)))
    33.                         .weightUnitPrice(BigDecimal.valueOf(weightUnitPrice + (num + i)))
    34.                         .qty(BigDecimal.valueOf(qty + (num + i)))
    35.                         .qtyUnit(qtyUnit + (num + i))
    36.                         .build();
    37.                  list.add(analysis);
    38.             }
    39.              analysisService.saveBatch(list);
    40.         });
    41.  
    42.          System.out.println(analysisService.count());
    43.     }

    数据查询:

         
    1. @Test
    2.      public void test002() {
    3.          Page page = new Page<>(1, 1000000);
    4.          Page response = analysisService.page(page);
    5.     }

    性能对比

    数据插入

    上述程序均运行在同一台个人电脑(性能较差)上,共计插入数据 1000000 条。执行耗时如下:

    MySQLPostgreSQL
    第一次5m22s1m21s
    第二次5m37s1m15s
    第三次5m20s1m18s

    结论:PostgreSQL插入性能约为MySQL的4倍

    数据查询

    上述程序均运行在同一台个人电脑(性能较差)上,执行耗时如下:

    MySQLPostgreSQL
    100w查10w2s103ms2s338ms
    100w查20w3s160ms3s313ms
    100w查30w3s872ms3s881ms
    100w查40w5s673ms4s588ms
    100w查50w6s534ms5s697ms
    100w查100w14s685ms8s33ms
    200w查10w2s83ms2s621ms
    200w查20w3s228ms3s166ms
    200w查30w4s265ms3s760ms
    200w查40w5s921ms4s670ms
    200w查50w6s682ms5s312ms
    200w查100w13s156ms8s697ms
    200w查200w35s380ms15s593ms
    300w查10w2s101ms2s720ms
    300w查50w6s954ms5s761ms
    300w查100w12s479ms8s854ms
    300w查200w34s361ms16s727ms
    300w查300wOOM23s128ms
    服务器上查询对比mysql/pgsql/clickhouse性能对比

    mysql和pgsql单表数据500W,clickhouse单表数据3000W,单条的数据长度相同,clickhouse服务器配置略高于mysql和pgsql

    mysql pgsqlclickhouse
    100万3.9s3.4s1.1s
    300万11.1s8.7s2.2s
    500万19.7s15.7s4.3s
    1千万9.2s
    3千万21s

    结论:大数据量单表查询场景,mysql、pgsql两个数据库的查询性能相较于clickhouse差别较大,与clickhouse不是一个级别的。

    结论

    单表50W以下mysql与pgsql相差较小,在10W级别甚至要优于pgsql。

    超过50W数据量,mysql性能远不及pgsql。

    clickhouse查询性能确实强悍,百万以下数据几乎都能在1S以内查出结果。

    clickhouse对服务器配置要求较高,特别是cpu配置要求较高。 

    最终决定将业务系统数据库替换成pg15。

  • 相关阅读:
    DC/DC开关电源学习笔记(四)开关电源电路主要器件及技术动态
    【ELK 使用指南 1】ELK + Filebeat 分布式日志管理平台部署
    GoLand 文件增加头部注释
    网站监控的重要性及实施策略
    自大型人格分析,如何改变自大型性格?
    java毕业设计——基于java+JDBC+sqlserver的POS积分管理系统设计与实现(毕业论文+程序源码)——POS积分管理系统
    Activiti学习(一)之工作流的介绍和使用
    我的递归从不爆栈
    Linux-软件安装/项目部署
    第八章:动态内存申请
  • 原文地址:https://blog.csdn.net/wang92424/article/details/132825179