自1970年埃德加·科德提出关系模型之后,关系型数据库便开始出现,经过了40多年的演化,如今的关系型数据库种类繁多,功能强大,使用广泛。面对如此之多的关系型数据库,我们应该如何权衡找出适合自己应用场景的数据库系统呢?O.S. Tezer最近在DigitalOcean上发表了一篇博文,对比了SQLite、MySQL和PostgreSQL这三个常用的、流行的关系型数据库管理系统(RDBMS),希望能对你有所帮助。
O.S. Tezer分别从数据库支持的数据类型、优势、劣势、何时应该使用以及何时不应该使用该数据库这5个方面对SQLite、MySQL和PostgreSQL做了比较。
SQLiteSQLite是一款轻型数据库,它遵守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在同一时刻仅允许一个写操作,因而也限制了其吞吐量。
MySQLMySQL是最受欢迎的一个大规模数据库服务器。它是一款功能丰富的开源产品,许多网站和在线应用程序都使用该数据库。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对某些功能(例如引用、事务、审计等)的实现方式使得它与其他的关系型数据库相比缺少了一些可靠性。
开发停滞