干货 | 如何为您的应用程序有效地选择正确的数据库

2021-03-29 17:00:27 浏览数 (1)

为您的应用程序找到合适的数据库解决方案并不容易。在全球最大的在线视频网站之一爱奇艺,我们在多个领域的数据库选择方面经验丰富:在线事务处理(OLTP),在线分析处理(OLAP),混合事务/分析处理(HTAP),SQL,和NoSQL。。

今天,我将与您分享:

  • 选择数据库要使用什么条件
  • 我们在爱奇艺使用什么数据库
  • 一些决策模型可帮助您有效地选择数据库
  • 选择数据库的提示

我希望这篇文章可以帮助您轻松找到适合您的应用程序的数据库。

数据库选择标准

选择数据库时,不同的人使用不同的条件:

  • 数据库采购人员更加关注采购成本,包括存储和网络需求。 数据库管理员(DBA)关心以下问题:
    • 潜伏
    • 每秒查询数(QPS)
    • 是否支持更高级的分层存储功能
    • 支持多个数据副本
    • 高度可用的服务
    • 支持多次写入和多活动架构
    • 可靠的监视和警报系统
    • 支持备份和还原
    • 合理的升级和迁移成本
    • 积极的支持社区
    • 轻松进行性能调整
    • 轻松排除故障

运维费用:

  • 服务稳定性
  • 表现
  • 可扩展性:是否易于水平和垂直扩展
  • 安全性:是否满足审核要求并防止SQL注入和信息泄漏

应用程序开发人员关心:

  • 稳定的服务
  • 表现
  • 可扩展性
  • 易于开发数据库界面
  • 轻松修改数据库架构

我们在爱奇艺使用什么数据库

在爱奇艺,我们主要使用以下数据库:

  • MySQL
  • TiDB
  • Redis
  • Couchbase
  • 大数据分析系统,例如Hive和Impala
  • 其他数据库,例如MongoDB,HiGraph和HiKV

由于iQIYI的数据库类型太多,因此应用程序开发人员可能不知道哪个数据库适合其应用程序场景。因此,我们按应用程序场景和数据库接口对这些数据库进行了分类,并构建了一个矩阵:

  • X轴代表应用场景:OLTP与OLAP。
  • Y轴表示数据库接口:SQL与NoSQL。

爱奇艺的所有数据库

该矩阵具有以下特征:

  • 在左边
    • 在左上角 数据库支持OLTP工作负载和SQL语言。例如,MySQL支持不同的事务隔离级别,高QPS和低延迟。我们主要使用它来存储交易信息和关键数据,例如订单和VIP信息。
    • 在左下角 我们使用NoSQL数据库来优化特殊方案。通常,这些数据库具有简单的架构,或者它们是无架构的,具有高吞吐量和低延迟。我们主要将它们用作缓存或键值(KV)数据库。
  • 在右边 所有这些都是OLAP大数据分析系统,例如ClickHouse和Impala。通常,它们支持SQL语言,不支持事务。它们具有良好的可伸缩性和较长的响应延迟。我们可以添加机器以扩大数据存储容量,并且响应延迟更长。
  • 围绕两个轴的交汇点 这些数据库是中立的,我们称它们为HTAP数据库,例如TiDB。当数据量较小时,它们具有良好的性能。当数据量很大或查询复杂时,它们的性能还不错。通常,为了满足不同的应用程序需求,我们使用不同的存储引擎和查询引擎。

实用的决策树,可有效选择数据库

我想推荐我们的数据库选择树。我们根据数据库管理员和应用程序开发人员的经验开发了这些树。

如何有效选择关系数据库

选择关系数据库时,您可以:

  1. 考虑您的数据量和数据库可伸缩性。
  2. 根据以下条件做出决定:
    • 数据库是否具有冷备份系统
    • 是否使用TokuDB存储引擎
    • 是否使用代理

有效选择关系数据库

如何有效地选择NoSQL数据库

当我们选择的NoSQL数据库,我们必须考虑许多因素来决定是否使用主副框架,客户分片,分布式集群,Couchbase,或HiKV。

有效选择NoSQL数据库

选择数据库的提示

我想与您分享一些选择数据库的提示:

  • 尝试解决问题而不先更改数据库。您可以根据数据量,QPS和延迟确定需求,但是这些是真正的需求吗?您是否可以找到一种无需涉及数据库即可消除此要求的方法?例如,如果数据量很大,则可以先对数据进行编码或压缩,这可能会减小数据大小。不要将所有需求降低到数据库级别。
  • 考虑选择数据库的真正原因是什么。您选择它是因为它受欢迎吗?还是因为它先进?最重要的问题是:它真的可以解决您的问题吗?例如,如果您的数据量不是很大,则不需要具有大量存储的系统。
  • 在放弃解决方案之前,请仔细考虑。您是否因为系统不起作用而放弃了该系统?还是因为您使用不正确?很难摆脱您的解决方案,所以要清楚为什么要放弃它。例如,在做出决定之前,请比较您的TPC-C或Sysbench基准测试。
  • 保持自我发展的良好态度。当您需要开发自己的数据库时,可以参考并使用一些成熟的产品。如果不需要,请不要从头开始构建。
  • 拥抱开源产品。例如,TiDB是一个开源的分布式SQL数据库。它有一个活跃的社区,目前在GitHub上有26,000星。我们之前的文章描述了TiDB如何帮助我们扩展数据库并实现高可用性。当前,在生产环境中,我们有88个TiDB集群,具有1200多个节点。没有理由您必须独自去做。

转译自:N.F. Mendoza

--END--

0 人点赞