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

2021-02-28 12:42:03

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

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

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

数据库支持OLTP工作负载和SQL语言。例如,MySQL支持不同的事务隔离级别,高QPS和低延迟。我们主要使用它来存储交易信息和关键数据,例如订单和VIP信息。

我们使用NoSQL数据库来优化特殊方案。通常,这些数据库具有简单的架构,或者它们是无架构的,具有高吞吐量和低延迟。我们主要将它们用作缓存或键值(KV)数据库。

所有这些都是OLAP大数据分析系统,例如ClickHouse和Impala。通常,它们支持SQL语言,不支持事务。它们具有良好的可伸缩性和较长的响应延迟。我们可以添加机器以扩大数据存储容量,并且响应延迟更长。

这些数据库是中立的,我们称它们为HTAP数据库,例如TiDB。当数据量较小时,它们具有良好的性能。当数据量很大或查询复杂时,它们的性能还不错。通常,为了满足不同的应用程序需求,我们使用不同的存储引擎和查询引擎。

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

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

尝试解决问题而不先更改数据库。您可以根据数据量,QPS和延迟确定需求,但是这些是真正的需求吗?您是否可以找到一种无需涉及数据库即可消除此要求的方法?例如,如果数据量很大,则可以先对数据进行编码或压缩,这可能会减小数据大小。不要将所有需求降低到数据库级别。

考虑选择数据库的真正原因是什么。您选择它是因为它受欢迎吗?还是因为它先进?最重要的问题是:它真的可以解决您的问题吗?例如,如果您的数据量不是很大,则不需要具有大量存储的系统。

在放弃解决方案之前,请仔细考虑。您是否因为系统不起作用而放弃了该系统?还是因为您使用不正确?很难摆脱您的解决方案,所以要清楚为什么要放弃它。例如,在做出决定之前,请比较您的TPC-C或Sysbench基准测试。

保持自我发展的良好态度。当您需要开发自己的数据库时,可以参考并使用一些成熟的产品。如果不需要,请不要从头开始构建。

拥抱开源产品。例如,TiDB是一个开源的分布式SQL数据库。它有一个活跃的社区,目前在GitHub上有26,000星。我们之前的文章描述了TiDB如何帮助我们扩展数据库并实现高可用性。当前,在生产环境中,我们有88个TiDB集群,具有1200多个节点。没有理由您必须独自去做。