
数据库对于现代IT至关重要--无论是传统的本地数据库还是较新的云数据库,都有助于各种应用的运行。起初,数据库市场主要被单个供应商拥有和控制的专有技术所主导。这类产品仍被广泛使用,但开源数据库也得到了广泛的用户接纳。
开源软件为用户组织提供了源代码公开可用,并通常在社区过程中进行开发的承诺。目标是扩大参与开发过程的人数,而不是将用户锁定在特定供应商的技术中。开源数据库的使用增加部分是由于Linux和基于云的系统的流行度上升,这些系统通常依赖于开源操作系统。它还受到NoSQL数据库的出现的推动,其中许多数据库坚持或符合开源模型。
什么是开源数据库?
开源数据库是在开源许可证下开发和发布的。虽然“开源”有时被用作营销术语,但在软件许可证方面,它有非常具体的定义。要成为真正的开源技术,数据库需要使用由开源倡议组织批准的许可证。开源倡议组织是决定许可证是否符合开源定义(OSD)的管理机构,OSD是开源许可的指导文档。
然而,情况变得更为复杂。越来越多创建开源数据库的供应商采用了基本符合OSD原则但未经开源倡议组织批准的许可证。最常见的情况是,他们要求提供数据库即服务(DBaaS)技术实现的云提供商公开发布修改或相关源代码,并使用相同的许可证。这种许可证通常被称为“源代码可用”的许可证。尽管如此,使用这些许可证的数据库通常仍然被列为替代专有,封闭源代码数据库的选择。
开源和源代码可用数据库的广泛类别包含各种类型的数据库软件。这包括SQL-based 关系数据库,这是最广泛使用的类型,以及四个主要的NoSQL技术--键值存储、文档数据库、宽列存储和图数据库。特殊用途系统的开源版本,如向量数据库和时间序列数据库,也可用。此外,许多供应商现在提供支持多种数据模型的多模型数据库。
使用开源数据库的潜在优势
开源数据库提供了许多潜在的优点,其中一些优点也适用于源代码可用的技术。以下是主要用户组织的主要优势:
易于开始。开源方法的核心前提是技术是免费可用的。结果,用户可以轻松尝试和部署开源数据库,而无需首先为其付费,尽管许多情况下供应商确实提供付费支持以及带有额外功能的数据库的封闭源代码版本。
社区支持和参与。开源或源代码可用的代码通常都有一群参与其中的用户和贡献者,他们可以帮助新用户理解这项技术。它还能让用户参与代码开发过程。例如,用户可以提交错误报告和功能请求,并成为贡献者。
可理解的源代码。当源代码是开放的,任何人都可以查看时,更有可能理解数据库的工作方式,以及如何有效地使用它来满足业务需求。
灵活性和定制。对于某些开源许可证,开发人员可以自由修改数据库软件,以满足特定的自定义需求。
提高安全性。因为源代码是开放的,开发人员、用户和安全研究人员可以彻底审查它,以找出漏洞。这使得在发现漏洞后能够快速修补漏洞。
以下列出的技术是一些最突出的开源和源代码可用数据库。该列表是由TechTarget编辑基于对数据库市场的研究编制的,包括Gartner的供应商排名和DB-Engines网站上的数据库管理系统(DBMS)受欢迎度排名。然而,该列表本身是无排名的。它包括五个关系型开源数据库,三个NoSQL数据库和四个源代码可用的技术,按该顺序组织。
关于每项技术的详细描述提供了关键特性、潜在用例、许可和商业支持选项的详情,以帮助组织选择符合其应用需求的正确的开源数据库。
1. MySQL
MySQL是最广泛部署的开源数据库之一。它于1996年首次发布,由Michael "Monty" Widenius和其他两位开发者独立领导,他们共同创立了MySQL AB来创建这个数据库。该公司在2008年被Sun Microsystems收购,后在2010年被Oracle收购。从那时起,MySQL一直是Oracle数据库产品组合的核心部分,同时作为开源软件得到维护。
MySQL是一种关系数据库,最初被定位为在线事务处理(OLTP)系统。尽管现在Oracle的MySQL HeatWave云数据库服务也支持分析和机器学习应用,但它仍主要针对事务性使用。MySQL在早期主要因作为开源技术LAMP堆栈的基石而受到欢迎,LAMP包括Linux、Apache、MySQL以及PHP、Perl或Python,它们推动了第一代web开发。现在,MySQL仍然是许多网站的底层数据库。
*常见用例:**和其他关系数据库一样,MySQL符合ACID属性--原子性、一致性、隔离性和持久性,以确保数据的完整性和可靠性。因此,它支持广泛的应用。例如,它通常被用作web应用服务器,也被用来运行云应用和内容管理系统。
*许可证:**MySQL在GPL版本2的开源许可证和Oracle的许可证下双重许可,以供希望将数据库与商业应用一同分发的组织使用。
源代码仓库:https://github.com/mysql/mysql-server
2. MariaDB
MariaDB于2009年作为MySQL的一个分支首次亮相,该分支是由Widenius领导的团队创建的,Widenius在那年早些时候离开了Sun,因为他对MySQL的方向和开发感到担忧。他在Sun工作时就开始了MariaDB的工作,它最初设计为MySQL的替代品。但这只完全适用于两个数据库的5.5版本。之后,MariaDB增加了MySQL中没有的新功能,并在后续版本中使用了不同的编号。
然而,即使有了新的更新,从MySQL迁移到MariaDB也相对容易。后者的数据文件通常与MySQL的数据文件二进制兼容,数据库的客户端协议也兼容。在许多情况下,用户只需卸载MySQL并安装MariaDB。MariaDB PLC通过MariaDB Foundation领导软件的开发,维护了与MySQL的不兼容性和特性差异的列表。
常见用途:MariaDB通常用于与MySQL相同的用途,包括在涉及事务处理和分析工作负载的Web和云应用程序中。
*许可:**免费的MariaDB Server软件--被公司称为MariaDB Community Server--根据GPLv2许可发布。
源代码仓库:https://github.com/MariaDB/server
3. PostgreSQL
PostgreSQL于1986年在加利福尼亚大学伯克利分校以Postgres的名字开始。Postgres项目由关系数据库先驱Michael Stonebraker发起,当时他是学校的一名教授,作为Ingres的更高级替代品,Ingres是一种专有的RDBMS,他也在开发中起了主导作用。软件在1995年开源,当时也添加了一个SQL语言解释器,并在1996年正式更名为PostgreSQL。然而,几十年后,开发者、供应商和用户仍然交替使用PostgreSQL和Postgres来指代数据库。
PostgreSQL提供了完整的RDBMS特性,包括ACID合规性、SQL查询和支持过程语言查询以在数据库中创建存储过程和触发器。像MySQL、MariaDB和许多其他数据库技术一样,它也支持多版本并发控制(MVCC),因此不同的用户可以同时读取和更新数据。此外,PostgreSQL支持的数据库对象类型比标准关系表更多,它在开源项目的网站上被描述为对象关系型DBMS。
常见用途:PostgreSQL通常被定位为专有的Oracle数据库的开源替代品。它广泛用于支持需要复杂事务和高并发性的企业应用程序,有时也用于数据仓库。
授权:该软件根据OSI批准的PostgreSQL许可证提供。
源代码仓库:https://git.postgresql.org/gitweb/?p=postgresql.git;a=summary
4. Firebird
Firebird开源关系数据库的技术根源可追溯到1980年代初,当时创建了专有的InterBase数据库。在InterBase被多个供应商收购后,商业产品开发结束,最后的发布在2000年以开源许可证提供。不到一周,Firebird项目创建,以继续开发这项技术的分支。
Firebird支持ACID兼容的事务,外部用户定义的函数和各种标准SQL功能,它包括一个多代架构,提供MVCC功能。该软件具有相对较小的占用空间,并且提供嵌入式单用户版本,但也可用于运行具有数百个并发用户的多兆字节数据库。它不应与Firestore和Firebase实时数据库混淆,这两个是Google开发的商业NoSQL数据库。
常见用途:Firebird可以处理运营和分析应用程序。它在各种类型的企业应用程序中使用,包括ERP和CRM系统。
许可证:Firebird根据InterBase公共许可证(IPL)和初始开发者公共许可证(IDPL)提供。两者都是Mozilla公共许可证版本1.1的变种,尽管现在已被版本2.0取代,但已获得OSI批准。IPL涵盖了原始的InterBase源代码,而IDPL适用于作为Firebird项目一部分开发的增加或改进的代码。
源代码仓库:https://github.com/FirebirdSQL/firebird
5. SQLite
SQLite是一个轻量级的嵌入式RDBMS,它运行在应用程序内部。它是在2000年由计算机分析师和程序员D. Richard Hipp在支持美国海军项目的政府合同工作时创建的,该项目需要一个可以在资源极为有限的环境中运行,无需数据库管理员(DBA)的数据库。Hipp继续通过他的软件工程公司Hipp, Wyrick & Company Inc.(简称Hwaci)担任项目架构师,领导该软件的开发。
作为一种嵌入式数据库,SQLite是自包含的,即它在其驱动的应用程序内部就可以完全运行。该软件是一个库,内嵌了一个支持ACID事务的全功能SQL数据库引擎。没有单独的数据库服务器进程。数据的读取和写入直接在普通磁盘文件上进行,包括表、索引、触发器和视图在内的完整SQLite数据库可以包含在一个文件中。
*常见用途:**由于SQLite的体积小,且能够在没有单独服务器进程的情况下运行,因此它常用于移动应用、网页浏览器和物联网设备中。
*许可证:**SQLite的源代码属于公有领域,可以免费使用、修改和分发,无需许可证。然而,出于法律原因,希望获得永久使用许可证的组织可以向Hwaci购买拥有权保证。
源代码仓库:https://sqlite.org/src/doc/trunk/README.md
6. Apache Cassandra
Cassandra宽列存储追溯到2007年,当时它最初由Facebook开发,以支持正在添加到社交网络的新的收件箱搜索功能。NoSQL数据库在2008年开源,并在2009年成为Apache软件基金会的一部分,最初作为孵化器项目,然后在次年升级为顶级项目状态。
Cassandra是一种容错分布式数据库,可用于在由众多商品服务器组成的集群中存储和管理大量数据。该软件在多个服务器节点上复制数据以避免单点故障,并且可以通过根据处理需求向集群添加更多服务器来动态扩展。Cassandra目前提供最终一致性,由于临时数据不一致,可能会限制其交易使用,但Apache项目正在努力增加对ACID事务的支持。
常见用例:Cassandra设计用于需要快速性能,可扩展性和高可用性的用途。它被部署用于各种应用程序,包括库存管理,电子商务,社交媒体分析,消息系统和电信等。
授权:Cassandra软件受Apache License 2.0覆盖。
源代码仓库:https://github.com/apache/cassandra/tree/trunk
7. Apache CouchDB
CouchDB 是一种 NoSQL 文档数据库,由软件工程师 Damien Katz 在 2005 年首次发布,并在 2008 年成为 Apache 项目。名称中的“Couch”部分是“集群的不可靠商品硬件”的首字母缩写,这源于项目的原始目标:创建一个可靠的数据库系统,可以在普通硬件上高效运行。CouchDB 可以部署在一个服务器节点上,也可以跨多个节点作为一个单一的逻辑系统在集群中,通过添加更多服务器来根据需要进行扩展。
该数据库使用 JSON 文档来存储数据,并使用 JavaScript 作为其查询语言。其他关键特性包括对 MVCC 和个别文档中的 ACID 属性的支持,尽管对存储在多个数据库服务器上的数据使用了最终一致性模型 -- 这是一种权衡,优先考虑可用性和性能而非绝对的数据一致性。数据通过增量复制功能在服务器之间同步,这个功能可以设置为双向任务,并用于支持移动应用和其他离线优先的应用。
常见使用案例:CouchDB 用于各种目的,包括数据分析,时间序列数据存储和需要离线存储和功能的移动应用。
许可证:CouchDB 根据 Apache License 2.0 授权。
源代码仓库:https://github.com/apache/couchdb
8. Neo4j
Neo4j 是一款 NoSQL 图形数据库,非常适合呈现和查询高度连接的数据集。Neo4j 使用了由节点和关系组成的属性图数据库模型,节点代表单个数据实体,关系(也被称为边)定义了不同节点的组织和连接方式。节点和关系也可以包含属性,或者以键值对的形式描述它们的属性。
Neo4j 首次作为开源软件在 2007 年发布,由数据库供应商 Neo4j Inc. 进行监督。它原本只是一个基于 Java 的图形数据库,但已经扩展了额外的功能,包括向量搜索和数据存储。主要特性包括完全的 ACID 一致性,通过自治集群架构实现的水平可扩展性,以及 Cypher 查询语言。Neo4j Inc. 计划将 Cypher 与 GQL 合并,GQL 是一种由国际标准化组织在 2024 年 4 月发布的标准图查询语言,其语法基于 SQL 和 Cypher。
*常见用例:**Neo4j 的典型用途包括社交网络,推荐引擎,网络和 IT 操作,欺诈检测和供应链管理,通过向量搜索功能,现在也支持生成AI 应用。
*许可:**Neo4j 社区版根据 GPL 第 3 版进行许可。一个名为 openCypher 的 Cypher 的开源版本也可根据 Apache 许可证 2.0 获取。
源代码库:https://github.com/neo4j/neo4j
9. Couchbase Server
Couchbase Server是一种NoSQL文档数据库,具有多模型功能,可以将数据存储在JSON文档和键值对中。这项技术源于2011年两家开源数据库公司的合并:CouchOne,由CouchDB创始人Damien Katz创立,提供基于该数据库的系统;和Membase,由memcached分布式缓存技术的开发者建立,用来构建键值存储。合并后的公司成为Couchbase,从而导致了Couchbase Server的开发。
尽管Couchbase Server和CouchDB的名称相似,且部分起源相同,但它们并没有直接的关系或兼容性--它们是具有自己代码和API的不同数据库技术。Couchbase Server支持强一致性,分布式ACID事务以及SQL++,这是一种用于JSON数据查询的类似SQL的语言。它还包括向量和全文搜索功能,以及一个多维度扩展功能,该功能允许根据工作负载需求隔离和单独扩展不同的数据库功能。
*常见用途:**Couchbase Server通常用于支持分布式应用程序的工作负载,以及用于移动,边缘和物联网应用程序。
*许可证:**Couchbase Server最初在Apache License 2.0下提供,但在2021年切换到了Business Source License (BSL) 1.1,这是一种源可用许可证,限制了其他供应商对软件的商业使用。数据库版本在发布四年后会重新转为Apache开源许可证。
源代码仓库:https://github.com/couchbase/manifest
10. MongoDB
MongoDB 是另一个NoSQL文档数据库,最初作为开源软件开发,现在是一种源可用技术。MongoDB首次发布于2009年,它以名为BSON的JSON类似的文档格式存储数据,BSON是Binary JSON的缩写。如全名所示,BSON以二进制结构编码数据,该结构旨在支持比JSON提供的更多数据类型并且索引和查询性能更快。
这个数据库通常被视为对那些想要在没有固定模式限制下构建应用程序的开发者的有吸引力的选择。除了它的文档数据模型之外,MongoDB还原生支持图、地理空间和时间序列数据。MongoDB Atlas,由首席开发者MongoDB Inc.提供的云数据库服务,还提供了可以在本地环境中免费用于开发和测试的向量和全文搜索特性。MongoDB的其他关键特性包括多文档ACID事务、用于水平可伸缩性的分片和自动负载平衡。
*常见用例:**MongoDB广泛用于AI、边缘计算、物联网、移动、支付和游戏应用,以及网站个性化、内容管理和产品目录。
*许可:**自2018年以来,MongoDB Community Server的新版本和以前版本的补丁已经在Server Side Public License (SSPL) Version 1下提供,这是由MongoDB Inc.创建的一个源可用许可。
源代码仓库:https://github.com/mongodb/mongo
11. Redis
Redis是一个NoSQL内存数据库,于2024年3月转为源可用技术。Redis项目由软件程序员Salvatore Sanfilippo(被称为antirez)在2009年创建,以帮助解决一个实时网站日志分析工具的数据库扩展问题。Redis(远程字典服务器)最初被定位为提供键值数据存储作为一种缓存技术,以加速现有的数据库和应用工作负载。
数据库缓存功能仍然是Redis的基础,其特性包括内置复制、硬盘上的数据持久性和对复杂数据类型的支持。但是,该平台已被扩展以包括额外的功能,例如支持存储JSON文档以及向量和时间序列数据。还添加了一个图数据库模块,但是主要开发者Redis Inc.在2023年停止了它的开发。
*常见用例:**虽然Redis可以用作完全的数据库,但它最常见的用途仍然是作为数据库查询缓存层。它也经常用于通过集成的pub/sub功能支持实时通知,并作为会话存储来帮助管理网络和移动应用程序的用户会话。
*许可:**自2024年3月以来,核心Redis软件已在Redis Source Available License 2.0和SSPL v1下双重许可。自2022年以来,新增的数据库模块和一个将它们组合在一起的Redis Stack包已经被这些许可所覆盖。
源代码仓库:https://github.com/redis/redis
12. CockroachDB
CockroachDB是一个源可用的分布式SQL数据库,它的开发灵感主要来自Google的Spanner数据库。CockroachDB主要由Cockroach Labs开发,首次在2015年发布,两年后推出了初始生产版本。就像它被命名的昆虫一样,CockroachDB的一个核心设计目标是难以被杀死。这个云原生数据库被构建为一个容错的,弹性的和一致的data management平台。
CockroachDB可以水平扩展,并且可以在各种类型的设备故障下以对用户最小的干扰并且不需要DBA手动干预的方式生存,根据其开发者的说法。关键特性包括自动修复和恢复,支持具有强一致性的ACID事务,一个SQL API和数据的地理分区以提升应用性能。它还有一个"多活动可用性"模型,该模型使用户可以从任何集群节点读取和写入数据,没有冲突。
*常见用例:**CockroachDB非常适合高容量的OLTP应用和跨多个数据中心和地理区域的分布式数据库部署。
*许可:**自2019年以来,CockroachDB的大部分核心功能已经在一个版本的BSL下许可,该许可要求其他供应商如果想要提供一个商业数据库服务,他们需要从Cockroach Labs购买一个许可。其他核心功能由Cockroach Community License (CCL)覆盖,该许可允许源代码被查看和修改,但不能在没有与Cockroach Labs达成协议的情况下被重用。在新数据库发布后三年,根据BPL许可的功能将转为Apache License 2.0并成为开源,这个变更不适用于CCL的功能。
源代码仓库:https://github.com/cockroachdb/cockroach

未来的数据库管理员:变革中的机遇与挑战

从Oracle迁移到PostgreSQL的可行性研究

SQL:开发人员与DBA的基础技能与不可或缺的工具

数据库从选型到POC的洞见

DBA如何平衡Oracle与国产数据库的工作需求
评论
