该选择哪个开源数据库哪一个更好

该选择哪个开源数据库哪一个更好,第1张

如果打算为项目选择一款免费、开源数据,那么你可能会在MySQL与PostgreSQL之间犹豫不定。MySQL与PostgreSQL都是免费、开源、强大、且功能丰富的数据库。你主要的问题可能是:哪一个才是最好的开源数据库,MySQL还是PostgreSQL呢?该选择哪一个开源数据库呢?

在选择数据库时,你所做的是个长期的决策,因为后面如果再改变决定将是非常困难且代价高昂的。你希望一开始就选择正确。两个流行的开源数据库MySQL与PostgreSQL常常成为最后要选择的产品。对这两个开源数据库的高层次概览将会有助于你选择最适合自己需要的。

MySQL

MySQL相对来说比较年轻,首度出现在1994年。它声称自己是最流行的开源数据库。MySQL就是LAMP(用于Web开发的软件包,包括Linux、Apache及Perl/PHP/Python)中的M。构建在LAMP栈之上的大多数应用都会使用MySQL,包括那些知名的应用,如WordPress、Drupal、Zend及phpBB等。

一开始,MySQL的设计目标是成为一个快速的Web服务器后端,使用快速的索引序列访问方法(ISAM),不支持ACID。经过早期快速的发展之后,MySQL开始支持更多的存储引擎,并通过InnoDB引擎实现了ACID。MySQL还支持其他存储引擎,提供了临时表的功能(使用MEMORY存储引擎),通过MyISAM引擎实现了高速读的数据库,此外还有其他的核心存储引擎与第三方引擎。

MySQL的文档非常丰富,有很多质量不错的免费参考手册、图书与在线文档,还有来自于Oracle和第三方厂商的培训与支持。

MySQL近几年经历了所有权的变更和一些颇具戏剧性的事件。它最初是由MySQL AB开发的,然后在2008年以10亿美金的价格卖给了Sun公司,Sun公司又在2010年被Oracle收购。Oracle支持MySQL的多个版本:Standard、Enterprise、Classic、Cluster、Embedded与Community。其中有一些是免费下载的,另外一些则是收费的。其核心代码基于GPL许可,对于那些不想使用GPL许可的开发者与厂商来说还有商业许可可供使用。

现在,基于最初的MySQL代码还有更多的数据库可供选择,因为几个核心的MySQL开发者已经发布了MySQL分支。最初的MySQL创建者之一Michael "Monty" Widenius貌似后悔将MySQL卖给了Sun公司,于是又开发了他自己的MySQL分支MariaDB,它是免费的,基于GPL许可。知名的MySQL开发者Brian Aker所创建的分支Drizzle对其进行了大量的改写,特别针对多CPU、云、网络应用与高并发进行了优化。

PostgreSQL

PostgreSQL标榜自己是世界上最先进的开源数据库。PostgreSQL的一些粉丝说它能与Oracle相媲美,而且没有那么昂贵的价格和傲慢的客服。它拥有很长的历史,最初是1985年在加利福尼亚大学伯克利分校开发的,作为Ingres数据库的后继。

PostgreSQL是完全由社区驱动的开源项目,由全世界超过1000名贡献者所维护。它提供了单个完整功能的版本,而不像MySQL那样提供了多个不同的社区版、商业版与企业版。PostgreSQL基于自由的BSD/MIT许可,组织可以使用、复制、修改和重新分发代码,只需要提供一个版权声明即可。

可靠性是PostgreSQL的最高优先级。它以坚如磐石的品质和良好的工程化而闻名,支持高事务、任务关键型应用。PostgreSQL的文档非常精良,提供了大量免费的在线手册,还针对旧版本提供了归档的参考手册。PostgreSQL的社区支持是非常棒的,还有来自于独立厂商的商业支持。

数据一致性与完整性也是PostgreSQL的高优先级特性。PostgreSQL是完全支持ACID特性的,它对于数据库访问提供了强大的安全性保证,充分利用了企业安全工具,如Kerberos与OpenSSL等。你可以定义自己的检查,根据自己的业务规则确保数据质量。在众多的管理特性中,point-in-time recovery(PITR)是非常棒的特性,这是个灵活的高可用特性,提供了诸如针对失败恢复创建热备份以及快照与恢复的能力。但这并不是PostgreSQL的全部,项目还提供了几个方法来管理PostgreSQL以实现高可用、负载均衡与复制等,这样你就可以使用适合自己特定需求的功能了。

有开源的数据库为什么不用呢,如果你数据量没达到百万级。mysql完全可以胜任了。录入数据的话普通人 *** 作起来可能比较麻烦,建议开发一个系统专门录入。如果不嫌麻烦安装好mysql,可以安装一个客户端,navicat就足够了。

从 Shard 到 Sharding

Shard 这个词英文的意思是 碎片 而作为数据库相关的技术用语 似乎最早见于大型多人在线角色扮演游戏(MMORPG)中的 Sharding 姑且称之为 分片

Sharding 不是一门新技术 而是一个相对简朴的软件理念 如您所知 MySQL 之后才有了数据表分区功能 那么在此之前 很多 MySQL 的潜在用户都对 MySQL 的扩展性有所顾虑 而是否具备分区功能就成了衡量一个数据库可扩展性与否的一个关键指标(当然不是唯一指标) 数据库扩展性是一个永恒的话题 MySQL 的推广者经常会被问到 如在单一数据库上处理应用数据捉襟见肘而需要进行分区化之类的处理 是如何办到的呢 答案是 Sharding

Sharding 不是一个某个特定数据库软件附属的功能 而是在具体技术细节之上的抽象处理 是水平扩展(Scale Out 亦或横向扩展 向外扩展)的解决方案 其主要目的是为突破单节点数据库服务器的 I/O 能力限制 解决数据库扩展性问题

事关数据库扩展性

说起数据库扩展性 这是个非常大的话题 目前的商业数据都有自己的扩展性解决方案 在过去相对来说比较成熟 但是随着互联网的高速发展 不可避免的会带来一些计算模式上的演变 这样很多主流商业系统也难免暴露出一些不足之处 比如 Oracle 的 RAC 是采用共享存储机制 对于 I/O 密集型的应用 瓶颈很容易落在存储上 这样的机制决定后续扩容只能是 Scale Up(向上扩展) 类型 对于硬件成本 开发人员的要求 维护成本都相对比较高

Sharding 基本上是针对开源数据库的扩展性解决方案 很少有听说商业数据库进行 Sharding 的 目前业界的趋势基本上是拥抱 Scale Out 逐渐从 Scale Up 中解放出来

Sharding 的应用场景

任何技术都是在合适的场合下能发挥应有的作用 Sharding 也一样 联机游戏 IM BSP 都是比较适合 Sharding 的应用场景 其共性是抽象出来的数据对象之间的关联数据很小 比如IM 每个用户如果抽象成一个数据对象 完全可以独立存储在任何一个地方 数据对象是 Share Nothing 的 再比如 Blog 服务提供商的站点内容 基本为用户生成内容(UGC) 完全可以把不同的用户隔离到不同的存储集合 而对用户来说是透明的

这个 Share Nothing 是从数据库集群中借用的概念 举例来说 有些类型的数据粒度之间就不是 Share Nothing 的 比如类似交易记录的历史表信息 如果一条记录中既包含卖家信息与买家信息 如果随着时间推移 买 卖家会分别与其他用户继续进行交易 这样不可避免的两个买卖家的信息会分布到不同的 Sharding DB 上 而这时如果针对买卖家查询 就会跨越更多的 Sharding 开销就会比较大

Sharding 并不是数据库扩展方案的银d 也有其不适合的场景 比如处理事务型的应用就会非常复杂 对于跨不同DB的事务 很难保证完整性 得不偿失 所以 采用什么样的 Sharding 形式 不是生搬硬套的

Sharding与数据库分区(Partition)的区别

有的时候 Sharding 也被近似等同于水平分区(Horizontal Partitioning) 网上很多地方也用 水平分区来指代 Sharding 但我个人认为二者之间实际上还是有区别的 的确 Sharding 的思想是从分区的思想而来 但数据库分区基本上是数据对象级别的处理 比如表和索引的分区 每个子数据集上能够有不同的物理存储属性 还是单个数据库范围内的 *** 作 而 Sharding 是能够跨数据库 甚至跨越物理机器的

lishixinzhi/Article/program/SQL/201311/16326

Sharding 策略

数据 Sharding 的策略与分区表的方式有很多类似的地方 有基于表 ID 范围 数据产生的时间或是SOA理念下的基于服务等众多方式 可选择 而与传统的表分区方式不同的是 Sharding 策略和业务结合的更为紧密 成功的 Sharding 必须对自己的业务足够熟悉 进行众多可行性分析的基础上进行 业务逻辑驱动

Sharding 实现案例分析 Digg 网站

作为风头正劲的 Web 网站之一的 Digg 虽然用户群庞大 但网站数据库数据并非海量 去年同期主数据大约只有 GB 的样子 现在应该更大一些 但应该不会出现数量级上增长 数据库软件采用 MySQL x Digg 的 IO 压力非常大 而且是读集中的应用( %的 IO 是读请求) 因为提供的是新闻类服务 这类数据有其自身特点 最近时间段的数据往往是读压力最大的部分

根据业务特点 Digg 根据时间范围对主要的业务数据做 Sharding 把不到 % 的 热 数据有效隔离开来 同时对这部分数据用以更好的硬件 提供更好的用户体验 而另外 % 的数据因用户很少访问 所以尽管访问速度稍慢一点 对用户来说 影响也很小 通过 Sharding Digg 达到了预期效果

现有的Sharding 软件简介

现在 Sharding 相关的软件实现其实不少 基于数据库层 DAO 层 不同语言下也都不乏案例 限于篇幅 作一下简要的介绍

MySQL Proxy + HSCALE

一套比较有潜力的方案 其中 MySQL Proxy (//fe mysql /wiki/MySQL_Proxy) 是用 Lua 脚本实现的 介于客户端与服务器端之间 扮演 Proxy 的角色 提供查询分析 失败接管 查询过滤 调整等功能 目前的 版本还做不到读 写分离 HSCALE 则是针对 MySQL Proxy 插件 也是用 Lua 实现的 对 Sharding 过程简化了许多 需要指出的是 MySQL Proxy 与 HSCALE 各自会带来一定的开销 但这个开销与集中式数据处理方式单条查询的开销还是要小的

Hibernate Shards

这是 Google 技术团队贡献的项目(// hibernate / ) 该项目是在对 Google 财务系统数据 Sharding 过程中诞生的 因为是在框架层实现的 所以有其独特的特性 标准的 Hibernate 编程模型 会用 Hibernate 就能搞定 技术成本较低 相对d性的 Sharding 策略以及支持虚拟 Shard 等

Spock Proxy

这也是在实际需求中产生的一个开源项目 Spock(// spock /)是一个人员查找的 Web 网站 通过对自己的单一 DB 进行有效 Sharding化 而产生了Spock Proxy(//spockproxy sourcefe net/ ) 项目 Spock Proxy 算得上 MySQL Proxy 的一个分支 提供基于范围的 Sharding 机制 Spock 是基于 Rails 的 所以Spock Proxy 也是基于 Rails 构建 关注 RoR 的朋友不应错过这个项目

HiveDB

上面介绍了 RoR 的实现 HiveDB (// hivedb /)则是基于Java 的实现 另外 稍有不同的是 这个项目背后有商业公司支持

PL/Proxy

前面几个都是针对 MySQL 的 Sharding 方案 PL/Proxy 则是针对 PostgreSQL 的 设计思想类似 Teradata 的 Hash 机制 数据存储对客户端是透明的 客户请求发送到 PL/Proxy 后 由这里分布式存储过程调用 统一分发 PL/Proxy 的设计初衷就是在这一层充当 数据总线 的职责 所以 当数据吞吐量支撑不住的时候 只需要增加更多的 PL/Proxy 服务器即可 大名鼎鼎的 Skype 用的就是 PL/Proxy 的解决方案

lishixinzhi/Article/program/SQL/201311/16327

企业里常用的数据库软件有Mysql、PostgreSQL、MicrosoftSQLServer、Oracle数据库、MongoDB。

1、Mysql。

MySQL原本是一个开放源码的关系数据库管理系统,原开发者为瑞典的MySQLAB公司,该公司于2008年被升阳微系统(SunMicrosystems)收购。2009年,甲骨文公司(Oracle)收购升阳微系统公司,MySQL成为Oracle旗下产品。

MySQL由于性能高、成本低、可靠性好,已经成为最流行的开源数据库,因此被广泛地应用在Internet上的中小型网站中。随着MySQL的不断成熟,它也逐渐用于更多大规模网站和应用。

2、PostgreSQL。

PostgreSQL可以说是目前功能最强大、特性最丰富和结构最复杂的开源数据库管理系统,其中有些特性甚至连商业数据库都不具备。这个起源于加州大学伯克利分校的数据库,现已成为一项国际开发项目,并且拥有广泛的用户群,尤其是在海外,目前国内使用者也越来越多。

PostgreSQL基本上算是见证了整个数据库理论和技术的发展历程,由UCB计算机教授MichaelStonebraker于1986年创建。在此之前,Stonebraker教授主导了关系数据库Ingres研究项目,88年,提出了Postgres的第一个原型设计。

MySQL号称是使用最广泛的开源数据库,而PG则被称为功能最强大的开源数据库。

3、MicrosoftSQLServer。

SQLServer是Microsoft开发的一个关系数据库管理系统(RDBMS),现在是世界上最为常用的数据库。SQLServer 现在是包括内置的商务智能工具,以及一系列的分析和报告工具,可以创建数据库、备份、复制、安全性更好以及更多。

SQLServer是一个高度可扩展的产品,可以从一个单一的笔记本电脑上运行的任何东西或以高倍云服务器网络,或在两者之间任何东西。虽然说是“任何东西”,但是仍然要满足相关的软件和硬件的要求。

4、Oracle数据库。

Oracle数据库系统是美国Oracle(甲骨文)公司提供的以分布式数据库为核心的一组软件产品,是目前最流行的客户/服务器(Client/Server,C/S)或浏览器/服务器(Browser/Server,B/S)体系结构的数据库之一。

Oracle数据库是目前世界上使用最为广泛的数据库管理系统,作为一个通用的数据库系统,它具有完整的数据管理功能;作为一个关系数据库,它是一个完备关系的产品;作为分布式数据库它实现了分布式处理功能。

5、MongoDB

mongoDB是一个介于关系数据库和非关系数据库之间的开源产品,是最接近于关系型数据库的NoSQL数据库。它在轻量级JSON交换基础之上进行了扩展,即称为BSON的方式来描述其无结构化的数据类型。尽管如此它同样可以存储较为复杂的数据类型。

参考资料来源:百度百科——Mysql

参考资料来源:百度百科——PostgreSQL

参考资料来源:百度百科——MicrosoftSQLServer

参考资料来源:百度百科——Oracle数据库

参考资料来源:百度百科——MongoDB

在国产数据库技术发展的初级探索阶段,技术是关键,而在当下的快速发展阶段,生态就成为最重要的一环。

开源是形成初步版本、扩大开发者和用户群体、增强技术影响里的重要一环。开源是对生态的动态推进。

openGauss(2020年6月30日开源)在2019年9 月 19 日,在华为 CONNECT 大会上,华为宣布将开源其 GaussDB 数据库,开源后的产品被命名为 openGauss,这也是openGauss的“open”开头的由来。

2020年10月12日发布第一个正式公开版本——openGauss 101版本,2021年10月发布openGauss 210版本。一款开源关系型数据库管理系统,采用客户端/服务器,单进程多线程架构,支持单机和一主多备部署方式,备机可读,支持双机高可用和读扩展。采用木兰宽松许可证v2发行。2022年4月1号,30版本正式发布。openGauss内核源自PostgreSQL,深度融合华为在数据库领域多年的经验,结合企业级场景需求,持续构建竞争力特性。

另外:OceanBase(2021年6月1号开源)阿里和蚂蚁集团开源的数据库,是完全自研的分布式关系数据库

TiDB(2015年4月开源)PingCAP 公司自主设计、研发的开源分布式关系型数据库,一款同时支持在线事务处理与在线分析处理的融合型分布式数据库产品。

以上就是关于该选择哪个开源数据库哪一个更好全部的内容,包括:该选择哪个开源数据库哪一个更好、如何搭建一个小型的数据库、开源数据库Sharding技术[1]等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9548388.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-29
下一篇 2023-04-29

发表评论

登录后才能评论

评论列表(0条)

保存