基于MySQL的关系型数据库完成情况_SQLite vs MySQL vs PostgreSQL:关系型数据库比较...

2023-11-07

自1970年埃德加·科德提出关系模型之后,关系型数据库便开始出现,经过了40多年的演化,如今的关系型数据库种类繁多,功能强大,使用广泛。面对如此之多的关系型数据库,我们应该如何权衡找出适合自己应用场景的数据库系统呢?O.S. Tezer最近在DigitalOcean上发表了一篇博文,对比了SQLite、MySQL和PostgreSQL这三个常用的、流行的关系型数据库管理系统(RDBMS),希望能对你有所帮助。\

O.S. Tezer分别从数据库支持的数据类型、优势、劣势、何时应该使用以及何时不应该使用该数据库这5个方面对SQLite、MySQL和PostgreSQL做了比较。\

SQLite\

SQLite是一款轻型数据库,它遵守ACID,能够嵌入到使用它的应用程序中。作为一个自包含的、基于文件的数据库,SQLite提供了非常出色的工具集能够处理所有类型的数据,与托管在服务器上基于进程的关系型数据库相比它的约束更少,也更易用。\

当应用程序使用SQLite时,SQLite并非作为一个独立进程通过某种通信协议(例如socket)与应用程序通信,而是作为应用程序的一部分,应用程序通过调用SQLite的接口直接访问数据文件。感谢类库的底层技术,它让SQLite变得非常快速、高效并且十分强大。\

SQLite支持的数据类型\

SQLite支持的数据类型包括:NULL、INTEGER、REAL、TEXT、BLOB。\

注意:如果你想了解与SQLite数据类型相关的更多内容,可以参阅官方文档。\

SQLite的优点\

基于文件\

整个数据库完全由磁盘上的一个文件构成,这使得它的可移植性非常好。\ \

标准化\

尽管它看起来像一个“简化版”的数据库实现,但是SQLite确实支持SQL。它省略了一些功能(RIGHT OUTER JOIN和FOR EACH STATEMENT),但同时也增加了一些额外的功能。\ \

非常适合开发甚至是测试\

在大多数应用程序的开发阶段,大部分开发人员可能都非常需要一个能够支持并发扩展的解决方案。SQLite 包含丰富的功能,所能提供的特性超乎开发所需,使用起来也非常简洁——只需要一个文件和一个C链接库。\ \

SQLite的缺点\

没有用户管理\

高级数据库都支持用户系统,例如管理连接对数据库和表的访问权限。鉴于SQLite的目的和性质(没有多客户端并发的高层设计),它并不包含这些功能。\ \

缺少通过优化获得额外性能的空间\

还是由于设计方面的原因,无法通过优化SQLite获得大量的额外性能。这个类库非常容易调整、也非常容易使用。它并不复杂,所以从技术上无法让它变得更快,因为它已经很快了。\ \

何时应该使用SQLite\

嵌入式应用程序\

所有需要可移植性、不需要扩展的应用程序,例如单用户的本地应用、移动应用或者游戏。\ \

替代磁盘访问\

在很多情况下,需要直接读写磁盘文件的应用程序可以切换到SQLite从而受益于SQLite提供的额外功能以及使用结构化查询语言(SQL)所带来的简便性。\ \

测试\

对大部分应用程序而言没必要使用额外的进程测试业务逻辑(例如应用程序的主要目标:功能)。\ \

何时不应该使用SQLite\

多用户应用程序\

如果有多个客户端需要访问并使用同一个数据库,那么最好使用功能完整的关系型数据库(例如MySQL),而不是选择SQLite。\ \

需要高写入量的应用程序\

写操作是SQLite的一个局限。该DBMS在同一时刻仅允许一个写操作,因而也限制了其吞吐量。\ \

MySQL\

MySQL是最受欢迎的一个大规模数据库服务器。它是一款功能丰富的开源产品,许多网站和在线应用程序都使用该数据库。MySQL的入门相对比较简单,开发者可以从Internet上获取到大量与该数据库相关的信息。\

注意:鉴于该产品的受欢迎程度,使用该数据库可以让我们受益于大量第三方应用程序、工具以及集成类库。\

尽管MySQL并没有尝试实现完整的SQL标准,但是它依然为用户提供了大量功能。作为一个独立的数据库服务器,应用程序需要与MySQL守护进程通信才能访问数据库——不同于SQLite。\

MySQL支持的数据类型\

MySQL支持的数据类型包括TINYINT、SMALLINT、MEDIUMINT、INT或INTEGER、BIGINT、FLOAT、DOUBLE、DOUBLE PRECISION、REAL、DECIMAL、NUMERIC、DATE、DATETIME、TIMESTAMP、TIME、YEAR、CHAR、VARCHAR、TINYBLOB, TINYTEXT、BLOB, TEXT、MEDIUMBLOB、MEDIUMTEXT、LONGBLOB, LONGTEXT、ENUM、SET。\

MySQL的优点\

易用\

很容易安装。第三方工具,包括可视化工具,让用户能够很容易入门。\ \

功能丰富\

MySQL支持关系型数据库应该有的大部分功能——或者直接支持、或者间接支持。\ \

安全\

支持很多安全特性,有些非常高级,并且是内置于MySQL中。\ \

可扩展也非常强大\

MySQL能够处理大量数据,并且在需要的时候可以规模化使用。\ \

快速\

放弃某些标准让MySQL能够非常高效、简捷地工作,因而速度更快。\ \

MySQL的缺点\

已知限制\

MySQL从一开始就没有打算做所有事情,因而它在功能方面有一定的局限性,并不能满足一些先进应用程序的要求。\ \

可靠性问题\

MySQL对某些功能(例如引用、事务、审计等)的实现方式使得它与其他的关系型数据库相比缺少了一些可靠性。\ \

开发停滞\

尽管MySQL依然是一款开源产品,但是自从它被收购之后人们就对其开发进展有很多抱怨。需要注意的是有一些基于MySQL的、完整集成的数据库在标准的MySQL之上附加了其他价值,例如MariaDB。\ \

何时应该使用MySQL\

分布式操作\

如果SQLite不能满足你的需求,那么将MySQL引入到开发栈中,就像任何其他独立的数据库服务器一样,它能够给你带来大量的操作自由度以及一些先进的功能。\ \

高安全性\

MySQL的安全机制通过一种简单的方式为数据的访问和使用提供了可靠的保护。\ \

网站和Web应用\

尽管有一些约束,但是绝大部分网站和Web应用都可以简单地运行在MySQL上。相关的灵活可扩展的工具非常易于使用和管理——事实证明这些工具在长期运行时非常有用。\ \

定制解决方案\

MySQL有丰富的配置项和运行模式,如果你需要一个高度量身定制的解决方案,那么MySQL能够非常容易地尾随并执行你的规则。\ \

何时不应该使用MySQL\

SQL遵从性\

因为MySQL并没有打算实现完整的SQL标准,所以它并不完全符合SQL。如果你可能需要与这样的关系型数据库集成,那么从MySQL切换过去可能并不容易。\ \

并发性\

尽管MySQL和一些其他的存储引擎能够非常好地执行读操作,但是并发读写可能会有问题。\ \

缺少功能\

MySQL缺少某些功能,例如全文本搜索。\ \

PostgreSQL\

PostgreSQL是一款先进的、开源的对象关系型数据库管理系统,它的主要目标是遵从标准和可扩展。PostgreSQL,或者说Postgres,试图将ANSI/ISO SQL标准及其修正结合起来。\

与其他关系型数据库相比,PostgreSQL独特的地方是它支持高度需要的、完整的面向对象以及关系型数据库的功能,例如完全支持可靠性事务。\

由于其强大的底层技术,PostgreSQL能够非常高效地处理很多任务。得益于多版本并发控制(MVCC),它能够在没有读锁的情况下实现并发并保证ACID。\

PostgreSQL是高度可编程的,因此扩展性非常好,它支持称为“存储过程”的自定义程序。用户可以创建这种函数简化重复的、复杂的以及经常需要的数据库操作的执行。\

尽管该数据库非常强大,但是它却没有像MySQL那么流行,即便如此依然有很多优秀的第三方工具和类库可以让我们更容易地使用它。\

PostgreSQL支持的数据类型\

PostgreSQL支持的数据类型包括:bigint、bigserial、bit [(n)]、bit varying [(n)]、boolean、box、bytea、character varying [(n)]、character [(n)]、cidr、circle、date、double precision、inet、integer、interval [fields] [(p)]、line、lseg、macaddr、money、numeric [(p,s)]、path、point、polygon、real、smallint、serial、text、time、timestamp、tsquery、tsvector、txid_snapshot、uuid、xml\

PostgreSQL的优点\

开源且遵从SQL标准\

PostgreSQL是一款开源的、免费的、功能非常强大的关系型数据库。\ \

强大的社区\

由一个忠实的、经验丰富的社区支持,用户可以通过知识库和Q\u0026amp;A网站获得全天候的免费服务。\ \

强有力的第三方支持\

除了非常先进的特性之外,PostgreSQL还有很多优秀的、开源的第三方工具可以辅助系统的设计、管理和使用。\ \

可扩展\

可以通过存储过程扩展PostgreSQL的功能。\ \

面向对象\

PostgreSQL不仅是一个关系型数据库,它还是一个面向对象的数据库——支持嵌套等功能。\ \

PostgreSQL的缺点\

性能:\

对于简单繁重的读取操作,使用PostgreSQL可能有点小题大做,同时性能也比MySQL这样的同类产品要差。\ \

流行程度\

尽管有大量的部署,但是鉴于该数据库的性质,它的受欢迎程序并不高。\ \

托管\

由于上面提到的几点,很难找到提供托管PostgreSQL实例的主机或者服务提供商。\ \

何时应该使用PostgreSQL\

数据完整性\

当绝对需要可靠性和数据完整性的时候,PostgreSQL是更好的选择。\ \

复杂的定制程序\

如果需要数据库执行定制程序,那么可扩展的PostgreSQL是更好的选择。\ \

集成:\

如果将来可能需要将整个数据库迁移到其他合适的解决方案上(例如Oracle),那么PostgreSQL可能兼容性最好也更容易切换。\ \

复杂的设计\

与其他开源且免费的数据库相比,对于复杂的数据库设计PostgreSQL在功能方面最全面,潜力最大,不需要你放弃其他有价值的资产。\ \

何时不应该使用PostgreSQL\

速度\

如果你只需要快速读取操作,那么PostgreSQL并不合适。\ \

简单\

除非你需要绝对的数据完整性,ACID遵从性或者设计复杂,否则PostgreSQL对于简单的场景而言有点多余。\ \

复制\

对于缺少数据库和系统管理经验的人而言使用MySQL实现复制要更简单,除非你愿意花费时间、精力和资源。\ \

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

基于MySQL的关系型数据库完成情况_SQLite vs MySQL vs PostgreSQL:关系型数据库比较... 的相关文章

  • 什么是实体关系图(ERD)?

    什么是实体关系图 ERD 转载自 https www visual paradigm com cn guide data modeling what is entity relationship diagram 数据库是软件系统中不可或缺的
  • 基于DTW动态时间规整算法的时间序列特征分类matlab仿真

    目录 1 算法仿真效果 2 MATLAB源码 3 算法概述 4 部分参考文献 1 算法仿真效果 matlab2022a仿真结果如下 lt
  • Python GUI 设计(二)—Widget组件详解

    本篇是关于Tkinter模块中的组件及其用法的介绍 涉及Label Button Entry组件 1 1 Label标签组件 Label组件是窗口中比较常用的组件 通常用来添加文字和图片 同时还可以定义文字和图片的排列方式 它的语法格式如下
  • TCP/IP网络编程(1)

    1 套接字 套接字是由操作系统提供的网络数据通信软件设备 即使对网络数据传输原理不了解 也能够使用套接字完成网络数据传输 为了与远程计算机进行数据传输 需要连接到英特网 套接字就是进行网络连接的工具 服务端 接收连接请求的套接字创建流程如下
  • Unity 报错 UnauthorizedAccessException: Access to the path“”is denied.

    根据能查到的各种解释综合分析 导致该报错出现的原因有以下几点 1 第一次文件写入操作未结束就进行了第二次操作 2 路径中的文件没有写入权限 3 当前用户无访问权限
  • 了解 GNU GPL/GNU LGPL/BSD/MIT/Apache协议

    文章来源 http iflonely com wordpress 2010 07 E4 BA 86 E8 A7 A3 gnu gplgnu lgplbsdmitapache E5 8D 8F E8 AE AE 越来越多的开发者与设计者希望将
  • ORM框架 Dapper

    一 介绍 Dapper是一款轻量级ORM工具 如果你在小的项目中 使用Entity Framework NHibernate 来处理大数据访问及关系映射 未免有点杀鸡用牛刀 你又觉得ORM省时省力 这时Dapper 将是你不二的选择 ORM
  • 黑盒测试中的决策表设计

    前言 在软件开发中 测试是不可或缺的一个环节 其中 黑盒测试是一种比较常用的测试方法 它强调测试人员不需要知道程序内部结构 只需根据程序规格说明书来设计测试用例进行测试 本文将介绍黑盒测试中的一种决策表设计方法 同时 我也为大家准备了一份软
  • 前端WebSocket详解

    websocket是H5才开始提供的一种在单个TCP连接上进行全双工通讯的协议 主要作用就是建立服务器和客户端的长连接能更好的节省服务器资源和带宽 服务器向浏览器推流实现实时通信 复制代码 和http一样 WebSocket也是应用层协议
  • mysql create trigger 触发器已存在

    1 CREATE TRIGGER 时显示触发器以存在 2 DROP TRIGGER IF EXISTS 也失败 解决 1 通过my ini 查到 datadir的路径 找到数据文件路径 2 找到相关数据库目录 删除相关触发器文件 如触发器名
  • eclipse_cpp 配置mingw

    1 MinGW 5 1 6的安装 首先下载 然后双击安装 过程如下 这一步如果你只想用Eclipse编译C C程序的话 只选上面三项即可 当然你可以都安装上 接下来就等着慢慢下载和安装吧 如果你的网速比较快的话 那么你是非常幸运的 2 配置
  • 宽度优先搜索(BFS)详解,以及双向广搜

    百度百科的官方解释 宽度优先搜索算法 又称广度优先搜索 是最简便的图的搜索算法之一 这一算法也是很多重要的图的算法的原型 Dijkstra单源最短路径算法和Prim最小生成树算法都采用了和宽度优先搜索类似的思想 其别名又叫BFS 属于一种盲
  • td 字典表_mysql常用字典表(完整版)

    本节内容 mysql数据库中的常用字典表 1 显示数据库列表 复制代码 代码示例 mysql gt show databases 说明 其中字典库是 information schema 其中常用字典表 INFORMATION SCHEMA
  • java 面向对象编程 --- 类及类的成员

    目录 学习面向对象内容的三条主线 面向过程与面向对象 面向过程 POP 与 面向对象 OOP 面向对象的三大特征 例子 人把大象装进冰箱 面向对象的思想概述 类和对象 面向对象的思想概述 Java类及类的成员 类的语法格式 创建Java自定
  • SqlServer千万级以上的数据表查询优化方案《冷热数据库分离》的思路

    1 是分库而不是分表 分表即需要考虑引入分表算法 又影响后续查询 2 热数据只占全部数据的一部分 因此每次优先查询热库 以下情况才查询冷库 a 当查询条件未命中 结果集为空 时 查询冷库 b 当查询条件部分命中时 查询冷库 3 为了区分部分
  • Android解决问题的思路

    1 前言 授人以鱼不如授人以渔 当向别人请教了问题且被解答了疑惑后 或许也想知道对方是如何思考 如何按照一定的的逻辑得出最终的答案 故想分享一下我这6年Android开发中是如何解决问题的 一家之言 请同学们多多指教 2 指导性原则 第一点
  • Java通过反射运用自定义注解案例

    Java和大数据系列 注 大家觉得博客好的话 别忘了点赞收藏呀 本人每周都会更新关于人工智能和大数据相关的内容 内容多为原创 Python Java Scala SQL 代码 CV NLP 推荐系统等 Spark Flink Kafka H
  • nvcc fatal : A single input file is required for a non-link phase when an outputfile is specified

    nvcc fatal A single input file is required for a non link phase when an outputfile is specified 错误原因 我想用VS编译colmap3 8 于是
  • Android无埋点数据收集SDK关键技术解析

    前言 本文基于网易乐得无埋点数据收集SDK 无埋点数据收集SDK用于向大数据平台提供全量 完整 准确的客户端数据 Android端无埋点数据收集SDK实现中涉及到比较关键的技术点有 用字节码插桩的方式实现Android端的AOP Hook

随机推荐

  • 自学python记录001-使用PyCharm创建项目

    启动PyCharm后如下所示 点击新建项目 选择项目存放路径 可以勾选创建main py文件 点击创建 创建完成后可以看到main py里面有一些提示的代码 比如说Shift F10可以运行项目 Ctrl F8可以直接添加断点 双击Shif
  • 强烈推荐的机器学习,深度学习课程以及python库

    本文知乎链接 强烈推荐的机器学习 深度学习课程以及python库 本着两条原则发一波车 1 不建议报辅导班 不是因为我们不应该为学习知识付费 而是因为有更好的资源 而这些资源恰好免费 报辅导班学习浪费钱倒是次要的 主要是时间有限 所以我们要
  • 程序分析技术理解(一)

    1 基本块 Basic Block 和流图 flow graph 将一段程序划分为基本块 Basic Block BB 每个基本块满足以下条件 a 控制流只能从基本块的第一个指令进入 b 除了基本块的最后一条指令 控制流在离开基本块前不会停
  • 移动端代码质量管理与安全检测评估

    在前面的文章中已经详细介绍过Jenkins Sonarqube的安装 配置及使用 对于Web端的代码质量管理通常相对容易 Jenkins配套Sonarqube很方便就能搞定 但是对于移动端来说 尤其iOS 集成和使用的复杂性会大幅提高 目前
  • PostgreSQL系列1:PostgreSQL 10.23 离线安装

    1 安装前准备 1 1创建用户 useradd postgres passwd postgres 1 2创建数据目录和日志目录 mkdir p data db pg data mkdir p data db pg logs chown R
  • 字符串分割(split),将字符串按照指定字符进行分割。split(String regex)和split(String regex, int limit)

    一 split String regex 字符串分割 将字符串按照指定字符进行分割 返回的是一个字符串数组 public String split String regex return split regex 0 原理 参数名称是rege
  • 【狂神说Java】HTML快速入门

    目录 1 初识HTML 2 网页基本信息 3 网页基本标签 4 图像标签 5 超链接标签应用 6 行内元素和块元素 7 列表标签 8 表格标签 9 媒体元素 10 页面结构分析 11 iframe内联框架 12 初始表单post和get提交
  • 两台linux文件拷贝

    scp就是secure copy 是用来进行远程文件拷贝的 数据传输使用ssh1 并且和ssh1使用相同的认证方式 提供相同的安全保证 与rcp不同的是 scp会要求你输入密码如果需要的话 最简单的应用如下 scp 本地用户名 IP地址 文
  • angular的ElementRef和Renderer2

    Angular ElementRef 简介 angular angular 2018 09 22 Angular 的口号是 一套框架 多种平台 同时适用手机与桌面 One framework Mobile desktop 即 Angular
  • opencv3.3.0在线读取网络图片图像资源

    说明 上一篇博客中描写了imread 的用法 请参见 http blog csdn net m0 37606112 article details 78524234 这一篇来描述cv2 videoCapture 的用法 照例打开opencv
  • vue插槽的基本使用

    1 什么是插槽 插槽 Slot 是 vue 为组件的封装者提供的能力 允许开发者在封装组件时 把不确定的 希望由用户指定的部分定义为插槽 2 体验插槽的基础用法 在封装组件时 可以通过元素定义插槽 从而为用户预留内容占位符 示例代码如下 如
  • 深度学习 - 模型的优化和过拟合问题

    优化函数 学习速率与反向传播算法 学习速率 learning rate 梯度就是表明损失函数相对参数的变化率 对梯度进行缩放的参数被称为学习速率 learning rate 学习速率是一种超参数或对模型的一种手工可配置的设置 需要为它指定正
  • 《Graph Neural Networks Foundations,Frontiers and Applications》第一部分第二章第2.3.1.1节翻译和解读

    书名 Graph Neural Networks Foundations Frontiers and Applications 图神经网络的基础 前沿和应用 出版社 Springer Berlin Heidelberg 作者 Lingfei
  • Python 函数的定义

    视频版教程 Python3零基础7天入门实战视频教程 函数 函数是执行特定任务的一段代码 程序通过将一段代码定义成函数 并为该函数指定一个函数名 这样即可在需要的时候多次调用这段代码 比如我们前面学到的range 函数 就是系统内置的函数
  • Appium自动化框架从0到1之 基类的封装

    这里只封装了4个基类 其他的大家可以自己丰富 直接上代码 baseView py coding utf 8 auth carl DJ time 2020 7 9 class BaseView object 封装一些基类 def init s
  • wazuh安装,单机部署3.13

    Wazuh涉及两个主要组件的安装 Wazuh服务器和Elastic Stack 此外 Wazuh agent需要部署到受监视的主机上 Wazuh server 运行Wazuh管理器和API 它从已部署的代理收集和分析数据 Elastic S
  • Java多线程基础

    原文链接 https blog csdn net weixin 43704599 article details 107379994 1 线程简介 1 1 多任务 现实中太多这样同时做多件事情的例子了 看起来是多个任务都在做 其实本质上我们
  • 一个SQLiteReadOnlyDatabaseException的问题

    最近测试同事上报了随机的一个crash问题 看日志是SQLiteReadOnlyDatabaseException的问题 发生在update数据库的时候 我自己写的ContentProvider代码就是在程序目录下放置数据 所以不是网上常见
  • ROS1与ROS2的安装教程

    目录 一 准备工作 1 ros1对应ubuntu版本 2 ros2对应ubuntu版本 3 Ubuntu的安装 二 ROS1的安装 1 官方安装ROS的说明 http wiki ros org Installation Ubuntu dis
  • 基于MySQL的关系型数据库完成情况_SQLite vs MySQL vs PostgreSQL:关系型数据库比较...

    自1970年埃德加 科德提出关系模型之后 关系型数据库便开始出现 经过了40多年的演化 如今的关系型数据库种类繁多 功能强大 使用广泛 面对如此之多的关系型数据库 我们应该如何权衡找出适合自己应用场景的数据库系统呢 O S Tezer最近在