前言

唠嗑一下。都在说去O或者开源,但是对于数据库选型来说,很多人却存在着误区。例如,去O,狭义上讲,是去Oracle数据库。但是从广义上来说,是去Oracle公司产品或者具有漂亮国垄断地位和需要商业授权的数据库产品。

去O,目前国内有一个现象,就是很多公司或个人听到去O,第一反应是改用Mysql,实际上Mysql也是Oracle公司的。而且Mysql虽然是开源的,但是需要遵循GPL开源协议,这个协议里面(大概意思)含有这么两点就可以窥见一斑:

1、如果用Mysql源码进行二次修改,修改后的产品也必须开源,例如目前国产分布式数据库TiDB就遵循该协议进行开源;

2、如果要对Mysql二次封装或者修改后进行实现商业版本,就必须取得甲骨文公司授权。以上这两条,就足以让Mysql这款开源数据库并不具备“开源优势”,将来该被制裁还是会被制裁。

目前去O,还有一款备选开源数据库是PostgreSQL,它是基于BSD开源协议的,该开源协议是四大开源协议里面最“开放”和自由的,不会受到商业版权化影响,并且组织或个人也可以通过它的源码进行二次封装或者进行发行商业版,例如华为的OpenGuass是基于该开源版本进行二次开发的,并且基于PostgreSQL或者基于OpenGuass进行二次封装成商业版本的数据库(国产、非国产等)也比比皆是。

以上只是吐个槽,本篇文章主要是想通过.NET6+EF CORE + 三大数据库,进行一个在同等环境下的简单的读写性能测试。

【备注】由于各种原因,接下来的测试结果可能会不准确,以下仅供学习或参考使用。

数据库运行环境:Cent OS 7.5

PostgreSQL版本:14

MySQL数据库版本:8.0

Oracle数据库:12C 64位

客户端环境:WIN 10 专业版

运行时环境:.NET 6

ORM:EF CORE

开发语言:C#

CentOS环境安装PostgreSQL

远程服务器上已有授权的Oracle环境和Mysql环境,所以具体安装细节不再进行描述,如果感兴趣的小伙伴也可以自行百度一下Oracle和Mysql的安装教程,应该非常多。由于服务器上暂时还没有PostgreSQL环境,我暂且也把安装PostgreSQL的安装步骤也顺手记录下。

PostgreSQL安装:

下载地址:

https://www.postgresql.org/download/linux/redhat/

选择版本以后,会有对应提示的安装方式命令,就不发出来了,可自行参考。

以下是安装以后的一些配置。

安装完毕,并且启动pgsql服务以后,此处我先创建一个测试用的数据库:testdb

使用命令:su - postgres 可以进行默认的登录,默认无密码。

登陆以后使用命令:psql  可以进入到可执行SQL的命令的页面,以postgres=# 开头。其他命令和有关创建用户的SQL语句如图所示。

修改配置文件: /var/lib/pgsql/14/data/postgresql.conf

将注释的listen_addresses打开,设置值为 ‘*’

路径上的14代表版本,如果是13版本就是13,以此类推,下同。

修改/var/lib/pgsql/14/data/pg_hba.conf配置文件,对IPV4访问新增一行配置如下:

然后要重启pgsql服务,以用于生效。

由于pgsql默认的端口是5432,为了可以跨远程访问,此处把远程服务器上的端口开放出来。命令:firewall-cmd --zone=public --add-port=5432/tcp --permanent

然后重载防火墙,命令:firewall-cmd --reload

测试数据库有关表结构。以下表均没有设置索引,仅单表测试,结果仅供参考。

Mysql表结构:

PostgreSQL表结构:

Oracle表结构:

.NET 6开发测试代码

先创建一个minimal api项目,以及一个服务类库项目。类库引用需要操作Oracle数据库、MySQL数据库以及Postgresql数据库有关的组件。

对服务类设置为启动项,然后新增三个文件夹(MyModel,OraModel和PgModel),用于分别存放三个数据库的实体类。然后在程序包管理控制台上,通过命令:

Scaffold-DbContext “mysql连接字符串" Pomelo.EntityFrameworkCore.MySql -OutputDir MyModel -Force

自动生成指定的mysql数据库实体类。其中,MyModel是需要生成的目标目录文件夹。

通过命令:

Scaffold-DbContext "Oracle连接字符串" Oracle.EntityFrameworkCore -OutputDir OraModel -Force

自动生成Oracle数据库实体类。

通过命令:

Scaffold-DbContext "pgsql连接字符串" Npgsql.EntityFrameworkCore.PostgreSQL -OutputDir PgModel -Force

自动生成PostgreSQL数据库实体类。

新建一个测试服务类DatabaseTestService,提供简单插入和更新功能:

在minimai api项目里,新增两个简单的测试API用于测试。为了简单,就直接实例化一下进行访问,然后返回执行结果。

以上方法可能执行适合会导致耗时而失败,为了直观一点,改成控制台里面输出。

实现里面也做点调整。

测试插入和更新

运行程序以后,对三个数据库分别插入数据并计时。

先看Oracle物理表情况。

插入总共数据条数:

部分数据结果集:

然后是mysql物理表数据。

插入数据总数:

部分数据结果集:

最后是PostgreSQL。插入总条数:

部分数据结果集:

以下是通过EF CORE进行插入的结果:

接下来进行一轮更新操作,为了防止数据量太大,所以只进行批量更新10000条数据。结果如下:

看下数据更新结果是不是正常。

Oracle数据:

MySQL数据:

PGSQL数据:

数据库数据清空,屏蔽掉C#代码一些实体赋值时间,重新执行两次仅统计批量插入数据库部分的执行的时间进行重新测试,仅测试批量插入耗时结果。

第一回测试结果:

接下来不删除数据,重新执行一轮。

Oracle估计哪儿有问题,数据让人很尴尬啊。接下来只比较MySQL和PgSQL

来一波批量插入:

再来一波三次的批量更新:

以上测试至此就结束了。结论可能有点尴尬,也许跟环境配置有关,也可能跟ef core操作数据库的支持与实现有关。并且当前仅在单表环境下测试,并没有通过多表测试、存过测试、压力测试等,结果仅供娱乐和参考。同时欢迎各位大佬们提供更多测试内容,也欢迎各位大佬转发或评论或点赞等一键三连。

本文原链接:https://www.cnblogs.com/weskynet/p/16097151.html

如果有兴趣一起探讨.NET技术,也可以点击我的原博客地址,然后点击最下方加入QQ群聊按钮加入Q群聊,或者也可以加我个人微信号【WeskyNet001】,通过后也可以拉你进微信群一起学习。

【.NET 6】使用EF Core 访问Oracle+Mysql+PostgreSQL并进行简单增改操作与性能比较的更多相关文章

  1. 国产化之路-统信UOS + Nginx + Asp.Net MVC + EF Core 3.1 + 达梦DM8实现简单增删改查操作

    专题目录 国产化之路-统信UOS操作系统安装 国产化之路-国产操作系统安装.net core 3.1 sdk 国产化之路-安装WEB服务器 国产化之路-安装达梦DM8数据库 国产化之路-统信UOS + ...

  2. net Core 通过 Ef Core 访问、管理Mysql

    net Core 通过 Ef Core 访问.管理Mysql 本文地址:http://www.cnblogs.com/likeli/p/5910524.html 环境 dotnet Core版本:1. ...

  3. .NET 5/.NET Core使用EF Core 5连接MySQL数据库写入/读取数据示例教程

    本文首发于<.NET 5/.NET Core使用EF Core 5(Entity Framework Core)连接MySQL数据库写入/读取数据示例教程> 前言 在.NET Core/. ...

  4. EF Core下利用Mysql进行数据存储在并发访问下的数据同步问题

    小故事 在开始讲这篇文章之前,我们来说一个小故事,纯素虚构(真实的存钱逻辑并非如此) 小刘发工资后,赶忙拿着现金去银行,准备把钱存起来,而与此同时,小刘的老婆刘嫂知道小刘的品性,知道他发工资的日子,也 ...

  5. Asp.net Core 通过 Ef Core 访问、管理Mysql

    本文地址:http://www.cnblogs.com/likeli/p/5910524.html 环境 dotnet Core版本:1.0.0-preview2-003131 本文分为Window环 ...

  6. ASP.NET CORE 使用 EF CORE访问数据库

    asp.net core通过ef core来访问数据库,这里用的是代码优先,通过迁移来同步数据库与模型. 环境:vs2017,win10,asp.net core 2.1 一.从建立asp.net c ...

  7. 8天掌握EF的Code First开发系列之2 简单的CRUD操作

    本文出自8天掌握EF的Code First开发系列,经过自己的实践整理出来. 本篇目录 创建控制台项目 根据.Net中的类来创建数据库 简单的CRUD操作 数据库模式更改介绍 本章小结 本人的实验环境 ...

  8. 使用ef core自动生成mysql表和数据编码的问题

    mysql默认的编码是不支持中文的,需要改成utf8编码格式. 而我使用的Pomelo.EntityFrameworkCore.MySql组件生成mysql库和表,他是使用默认编码的. 网上大多说修改 ...

  9. oracle函数自治事务解决不能增改删的语句操作

    CREATE OR REPLACE FUNCTION SEQ3 (v_bname in VARCHAR2) return NUMBER is pragma autonomous_transaction ...

随机推荐

  1. MySQL 8.0无法通过Navicat远程连接 1045 - Access denied for user 'root'@'::1' (using password: YES) 的解决办法

    用navicat远程连接数据库的时候无法连接,提示信息:1045 - Access denied for user 'root'@'::1' (using password: YES). 是由于密码策 ...

  2. ASP.NET CORE 项目搭建(2022 年 3 月版)

    ASP.NET CORE 项目搭建(2022 年 3 月版) 自读 沉淀了多年的技术积累,在 .NET FRAMEWORK 的框架下尝试造过自己的轮子. 摸索着闭门造过 基于 OWIN 服务后端. 摸 ...

  3. 【系列】关于NJUPT电赛自控方向第一次积分赛的总结

    本人是NJUPT电子科学与技术专业大一摸鱼狗一枚.本博客旨在总结与分享个人准备电赛所学知识,同时也是为了防止遗忘,锻炼写文章的能力.目前电赛方向为自控方向.主要研究方向为单片机.图像处理.自动控制相关 ...

  4. SQL基础语法_周志城

    一:建库建表语法,字段数据类型 1:建库建表语法 create  (创建,关键字) database (数据库,关键字) IF NOT EXISTS  作用:如果需要创建的库已存在,将不会创建 DEF ...

  5. ldap常用命令

    单独查询用户信息 ldapsearch -D "cn=admin,dc=hrbeu,dc=edu,dc=cn" -b "ou=hbr,dc=hrbeu,dc=edu,dc ...

  6. web服务器-Nginx下载限速

    web服务器-Nginx下载限速 一. 限速介绍 在生产环境中,为了保护WEB服务器的安全,我们都会对用户的访问做出一些限制,保证服务器的安全及资源的合理分配. 限流(rate limiting)是N ...

  7. web服务器-nginx配置文件

    web服务器-nginx配置文件 一 nginx配置文件 #启动子进程程序的默认用户 #user nobody #一个主进程和多个工作进程.工作进程是单进程的,且不需要特殊授权即可运行:这里定义的是工 ...

  8. Python GUI tkinter 学习笔记(三)

    草稿 # -*- coding: utf-8 -*- from Tkinter import * root = Tk() Label(root, text = "First").g ...

  9. python编程笔记--字符编码

    ASCII码.Unicode.utf-8 ASCII(American Standard Code for Information Interchange,美国标准信息交换代码)是基于拉丁字母的一套电 ...

  10. VT 入门番外篇——初识 VT

    写在前面   此系列是本人一个字一个字码出来的,包括示例和实验截图.由于系统内核的复杂性,故可能有错误或者不全面的地方,如有错误,欢迎批评指正,本教程将会长期更新. 如有好的建议,欢迎反馈.码字不易, ...