• 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。

  • 相关阅读:
    java计算机毕业设计springboot+vue员工管理系统
    【附源码】计算机毕业设计JAVA学习自律养成小程序后台
    【HarmonyOS4学习笔记】《HarmonyOS4+NEXT星河版入门到企业级实战教程》课程学习笔记(二)
    基于Python+MySQL的图书销售管理系统 课程论文+项目源码及数据库文件
    Xilinx microblaze axi can 使用说明
    【Node.js】深度解析常用核心模块-path模块
    软件著作权申请材料及申请流程?
    回归预测|GWO-BPNN-Adaboost算法原理及其实现(Matlab)
    大数据可视化——Sqoop与Hive的安装详解
    C++项目实战——基于多设计模式下的同步&异步日志系统-⑩-异步缓冲区类与异步工作器类设计
  • 原文地址:https://blog.csdn.net/wang92424/article/details/132825179