架构师必读:10个值得考虑的数据库选择

发表时间: 2020-04-20 20:30

1、PostgreSQL

PostgreSQL听起来比较陌生,其实这种关系数据库解决方案自1997年以来一直存在,并且是Ruby,Python,Go等社区中的首选。

将PostgreSQL作为下一个项目的数据库解决方案,您绝不会失望(国内邮储银行开始全面使用PostgreSQL作为oracle的替代品,腾讯正在大量使用PostgreSQL)。市面上已经有大量不错的SQL客户端可用于连接到PostgreSQL数据库进行管理和开发。

与其他关系数据库(特别是MySQL)相比,PostgreSQL具有一些引人入胜的功能,例如:

  • 数组,Range(范围),UUID,地理位置等的内置数据类型。
  • 支持文档存储(JSON样式),XML以及key-value存储(Hstore)。
  • 同步、异步复制
  • 引入了使用其它程序语言编写函数的能力,可在PL,Perl,Python等中编写脚本
  • 全文搜索

何时使用PostgreSQL

  • 如果您正在开始一个新项目,之前被MySQL事务锁定打败过,那么现在是考虑PostgreSQL的好时机。
  • 如果需要部分NoSQL功能用于混合数据模型,则PostgreSQL也具有明显的优势。由于天然支持文档和key-value存储,因此您无需去寻找,安装,学习和维护另一个数据库解决方案。

2、MariaDB

MariaDB是由开发MySQL的同一人创建的,以替代MySQL。奇怪不?在2010年MySQL被甲骨文接管之后(通过收购Sun Microsystems,这也是甲骨文控制Java的方式),MySQL的追随者们开始了一个新的开源项目MariaDB。

MariaDB是使用与MySQL相同的代码库创建。显而易见,MariaDB可以用作MySQL的完全替代品。从MySQL迁移到MariaDB基本上做到零成本。不过切记,从MariaDB返回MySQL是不可能的,这可能导致永久性数据损坏!

尽管MariaDB本质上是MySQL的克隆,但事实上并非如此。两者之间的差异一直在增长。采用MariaDB必须是您经过深思熟虑的决定。MariaDB中有很多新特性:

  • 真正的自由和开放:由于没有单个公司实体控制MariaDB,无需担心突然而来的掠夺性许可。
  • 满足特定需求的存储引擎。例如,用于分布式事务的Spider引擎;ColumnStore用于海量数据仓库;ColumnStore引擎,用于并行,分布式存储;
  • 与MySQL相比,速度有所提高,尤其是Aria存储引擎可处理复杂的查询。
  • 更好的复制功能(多源复制)
  • JSON数据格式支持
  • 虚拟列。对表的每一行都可以有一个“虚拟列”,该列可以用于保存一个对象的不同属性,每个属性在各行之间可以完全不同,“虚拟列”的个数和内容完全有应用程序来控制和解释。
  • 动态列。动态列允许在一个表中每个行可以存储不同的列的集合。

何时使用MariaDB

如果您想真正地替代MySQL,希望保持创新并且不打算再次返回MySQL,则应该使用MariaDB。例如可以在MariaDB中使用新的存储引擎来补充项目中现有的关系数据模型。

3、CockroachDB

CockroachDB背后的团队似乎由受虐狂组成。有了这样的产品名称"蟑螂"。

估计“蟑螂”的逻辑是无论发生什么事蟑螂都能生存繁殖。CockroachDB背后的团队(由前Google工程师组成)在使用传统SQL解决方案时感到局限性。因为从历史上看,SQL解决方案应该托管在一台机器上(数据不是那么大)。长期以来,没有运行SQL的数据库集群。即使MySQL,PostgreSQL和MariaDB中使用各种复制技术来实现数据库集群。事实上,通过复制功能来实现集群,使用起来还是复杂。

CoackroachDB希望改变这一点,为SQL世界带来轻松的分片,集群和高可用性。

何时使用CockroachDB

如果您一直使用SQL并且对MongoDB的扩展功能有所了解,那么您会喜欢CockroachDB。CockroachDB可以快速设置集群,对集群进行查询,我们终于不需要使用数据库中间件这种临时产物来实现集群数据库了。

4、Neo4j

近十年来最重要的发展之一就是关联数据。几乎事物都相互关联。社交网络是一个很好的例子。使用SQL乃至文档数据库构建类似的数据模型就是一场噩梦。这些解决方案的理想数据结构是图形,它是完全不同的结构。您可以考虑Neo4j这样的图形数据库。

图形数据库本身是独特的,Neo4j几乎是使用图形唯一选择。它具有的任何功能都是独一无二的。

  • 支持事务应用程序和图形分析。
  • 数据转换能力,可将大型表格数据提取为图形。
  • 用于查询图形数据库的专用查询语言(Cypher)
  • 可视化和发现功能

如果您需要数据之间基于图形的关系,则需要Neo4j。

5、MongoDB

MongoDB是第一个在技术行业引起轰动的非关系数据库,并且占据相当大的关注份额。

与关系数据库不同,MongoDB是一个“文档数据库”,这意味着它以大块形式存储数据,而相关数据聚集在同一块中。MongoDB具有一些独特的功能,这些功能使您再也不想使用关系数据库:

  • 适用于特殊/不可预测灵活模式。
  • 简单的分片和聚类。您只需要为集群设置配置。
  • 从集群中添加或删除节点非常简单。
  • 分布式事务锁。早期版本中缺少此功能,最终已经包含。
  • 它针对写入进行了优化,使其非常适合作为缓存系统的分析数据。

何时使用MongoDB

MongoDB是结构化SQL到无序NoSQL的桥梁。您真正需要扩展时。是的,您可以使用云SQL服务来解决数据库扩展问题,最后,有些场景用基于SQL的解决方案根本做不到。例如,如果您正在创建一个像Canva这样的产品,用户可以在其中创建任意复杂的设计,并可以在以后编辑它们,如果选择使用关系数据库,那就呵呵了!

6、RethinkDB

顾名思义,当涉及到实时应用程序时,RethinkDB会 “重新考虑”数据库的思想和功能。

数据库更新后,应用程序将无法及时感知。公认的方法是应用程序在有更新时立即发出通知,该更新通过复杂的网桥推送到前端(PHP-> Redis-> Node-> Socket.io是一个示例)。但是,如果可以将更新直接从数据库推送到前端怎么办?是的,这就是RethinkDB的承诺。

因此,如果您要制作一个真正的实时应用程序(游戏,市场,分析等),Rethink DB值得一看。

7、redis

提起数据库,很容易忽略Redis。这是因为Redis是一个内存数据库,主要用于缓存等支持功能。

Redis是一个简单的K-V存储,存储的是带有到期时间的字符串(当然,可以设置为无穷大)。Redis丧失了部分实用性,获得性能方面巨大提升。由于它完全位于RAM中,因此读写速度非常快(每秒数十万次操作并非闻所未闻)。Redis具有完善的pub-sub系统,该系统使该“数据库”的吸引力提高了N倍。

如果您有一个可以从缓存中受益或具有一些分布式组件的项目,则Redis是首选。

8、SQLite

SQLite是一个轻量级的C库,提供了一个关系数据库存储引擎。该数据库中的所有内容都保存在一个文件中(扩展名为.sqlite),您可以将其放在文件系统中的任何位置。这就是使用它所需要的全部!是的,无需安装任何“服务器”软件,也没有要连接的任何服务。

即使SQLite是MySQL之类的数据库的轻量级替代品,它也带来了很大的冲击。其令人震惊的功能包括:

  • 通过COMMIT,ROLLBACK和BEGIN完全支持事务。
  • 每张表格支持32,000列
  • JSON支持
  • 64路JOIN支持
  • 子查询,全文搜索等
  • 最大数据库大小为140 TB!
  • 最大行大小为1 GB!
  • 比文件I / O快35%

何时使用SQLite

SQLite是一个非常专业的数据库。如果您的应用程序相对简单,并且您不希望拥有庞大的数据库,那么SQLite是一个不错的选择。对于中小型CMS应用、演示应用程序、嵌入式系统,值得您考虑。

9、Cassandra

Cassandra属于所谓的“ columnar”数据库家族。Cassandra中的存储抽象是一列而不是一行。它将所有数据物理上存储在磁盘的同一列上,最大程度地减少查找时间。

独特的功能

Cassandra设计时考虑了一个特定的用例——处理写重负载和对停机时间的零容忍。这些成为其独特的卖点。

  • 极快的写入性能。在处理繁重的写入负载时,Cassandra可以说是目前最快的数据库。
  • 线性可伸缩性。也就是说,您可以继续向群集中添加任意数量的节点,群集的复杂性或脆弱性将零增加。
  • 无与伦比的分区容限。也就是说,即使Cassandra群集中的多个节点出现故障,数据库也可以不丧失完整性。
  • static 类型。(声明为 static 的列只有一个值的,只存储一份)。

何时使用Cassandra

  • 日志记录和分析是Cassandra的两个最佳用例。
  • 当您需要处理非常大的数据量(苹果公司有Cassandra部署,可以处理400 PB以上的数据,而在Netflix,每天处理1万亿个请求)
  • 当您需要停机时间几乎为零(高可用性是Cassandra的标志之一)。

10、Timescale

Timescale时序数据库是物联网(IoT)需要的最好的开源数据库之一。

与传统数据库的区别在于,它主要关注的是海量数据集的分析和可视化。时间序列数据库很少会看到已有的数据的变化;比如:温室中的传感器发送的温度读数-新数据保持每秒积累,这对于分析和报告很重要。

Timescale DB跟同类的其他数据库相比具有一些令人兴奋的功能:

  • 它建立在PostgreSQL之上(目前最好的开源关系数据库)。如果您的项目已经在运行PostgreSQL,Timescale可以重点考虑。
  • 通过熟悉的SQL语法进行查询,从而减少了学习难度。
  • 极快的写入速度-每秒数百万次的插入。
  • 数十亿行或PB的数据,对于Timescale来说没什么大不了的。
  • 模式具有真正的灵活性-可以根据需要选择关系模式或无模式。

如果物联网是您的领域,或者您追求类似的数据库特性,那么Timescale值得一看。