如果您刚刚开始探索数据库的世界,您可能已经知道两件事:有效使用数据是有利可图的,而选择一个合适的数据库来管理这些数据可能会让人不知所措。
确实如此,数据提升收入的能力正在不断增强。它可以优化用户体验并推动机器学习。但这意味着有数百家供应商在为您存储和分析它。您会如何选择?没错,正如生活中的大多数事情一样,知识就是力量。
阅读并了解数据库领域概览,特别是如何将数据库置于商业背景中。我们将从深入研究许可和数据建模开始。
软件许可,简而言之,是复杂的。不仅仅是知识产权(为此,我建议查阅 Besen & Raskind 的“An Introduction to the Law and Economics of Intellectual Property” 和 Rosen 的“Open Source Licensing: Software Freedom and Intellectual Property Law”),更重要的是,为什么需要关注许可协议,以及开源数据库领域中的趋势,这些趋势对您的业务有着深远的影响。
准备好了吗?
所有软件许可证都有关于如何使用技术的规则和规定,必须遵守这些规定。这意味着您采用的软件许可证可能会对您的业务运作产生实实在在的影响。忽视或违反这些规则可能会使您面临法律风险和经济损失,坦率地说,还会损害您公司的声誉。无论是购买软件还是采用开源技术,许可证最终都会在某种程度上限制代码的使用。综上所述,在开发产品时请注意这些限制,以帮助降低长期法律风险。
其次,请记住许可证不是固定不变的。事实上,现在许多支持开源数据库项目的公司正在修改数据库许可证,使其限制性更强。根据您的用例,这可能意味着,如果您一直免费使用数据库,现在可能会面临法律诉讼。这并不是要吓唬您,而是为了确保您保持警觉。随着这些变化的出现,做出适当的反应非常重要。在某些情况下,更改许可证可能需要重新构建服务架构、采用不同的数据库或与供应商签订商业协议。
经常浏览 Hacker News 或 TechCrunch 的人,对围绕开源和商业数据库软件的讨论一定不会陌生。要点如下:在过去三年中,由于多个因素的交织,如主要公共云供应商的增长,以及以开源为中心的数据库提供商在市场上的成功(或缺乏成功),引发了一场激烈的争论。
话虽如此,自由软件与专有软件之间的关系并非二元对立,从各方面来看,它实际上是一个连续范围:
注意:图示距离并非科学比例,关系的相对性才是更重要的。
从上方的范围来看,在最左端是商业或专有数据库软件许可证,例如 Oracle、IBM Db2 和 Microsoft SQL Server。这些是功能强大、特性丰富的技术,驱动着各行各业的工作负载。当从供应商处购买这款软件,或作为云服务订购时,您实际上是在支付额外费用,以获得以下内容:
代码级支持
强大的工具生态系统
专业服务和顾问
对该数据库路线图的可见性和影响力
右侧是公共领域软件。该软件根本没有版权,这意味着可以不受限制地进行修改、分发或销售。位于范围右端的项目通常由公正无偏的第三方标准进行管理,例如 Apache 软件基金会或 Linux 基金会。
开放源码促进会 (OSI) 维护着一个广泛接受的开源许可证列表,明确列出哪些是开源许可证,哪些不是。一般来说,开源软件的特点是能够“分叉代码”。这意味着,如果项目(软件)的方向与您的需求或愿望相悖,您可以根据自己的需要修改或编辑代码。
使用开源技术具有特别的吸引力,原因在于零许可费用、更高的开发透明度,以及来自多方利益相关者、维护者和问题领域的创新。与商业软件相比,使用开源软件意味着放弃了对产品路线图的影响、关于漏洞修复或安全补丁的保证以及合同条款,但您获得了零供应商锁定和更高的业务灵活性。(你可以看到,这是您和您的团队需要仔细考虑的一个权衡问题)。
沿着上图从左到右的旅程,有不同级别的许可允许性,例如 Apache 2.0、MPL 和 GPL 3.0。
Apache 2.0:Apache Cassandra, Apache CouchDB
Mozilla 公共许可证:RabbitMQ
BSD:Redis
GPL 3.0:Neo4j
专有:IBM Db2、Microsoft SQL Server
在 2000 年代后期,大多数新兴数据库供应商都以“开源”的形式进入市场,以便更容易获得用户的采用和开发者的认可。您可能知道属于这一阵营的公司,例如 Mongo Inc.、Redis Labs 和 Elastic。这些公司开发了 MongoDB、Redis 和 Elasticsearch 等社区项目,但希望通过企业许可版本、托管云实施或专业服务将这些投资变现。
然而,云计算的范式转变使得这种商业模式变得不稳定,因为主要供应商可以轻松地将这些技术作为一流的、平台原生的托管服务提供。这些产品在其各自的云上提供强大的安全、合规、监控和记录整合,但并未向软件创建者提供任何有保障的补偿。
近年来,各公司重新评估了其市场进入策略。现在,我们看到他们采用许可模式来保护他们的开发投资。例如,MongoDB、Redis Labs 和 Confluent,它们在不同程度上都更改了部分代码的许可证,以防止其他公司在未经授权的情况下将其作为服务运行。
“那么,Josh,您有什么建议?”好问题。
使用商业数据库和/或开源数据库都有其合理的理由。重要的是,您要知道自己和公司将面临什么。在构建应用程序之前,务必审查许可证,以确保项目符合规定。如果您是要为开源项目选择许可证,可以查看 GitHub 的“Choose a License”网页。
一个重要的考虑因素是许可证,因为没有人愿意被起诉。另一个则是数据模型类型,但原因不同。当构建应用程序时,了解各种数据模型类型将帮助您为任务选择合适的工具。
现在您已经了解了许可证问题,让我们谈谈选择数据库时的另一个关键因素:数据模型。
当我刚开始在 IBM 工作时,我需要快速了解相关知识,于是我参考了 Martin Fowler 的《NoSQL Distilled》。
在他的著作中,以及在整个行业中,人们通常将数据库分为五个“数据模型”类别:文档、键值、图形、关系型和宽列式。下面是每个类别的简要概述,包括使用场景和特定数据库的例子。这将帮助您根据数据集和业务需求,确定需要哪种数据库。
在这种情况下,数据将采用类似 JSON 的文档进行建模,而不是行和列。这些数据库本质上更看重可用性,而非事务一致性。文档数据库具有简洁性和可扩展性的特点,同时在开发过程中支持快速迭代。
业务用例
需要快速迭代的移动应用程序
事件日志记录、在线购物、内容管理和深度分析处理
包含产品属性的零售目录
示例:
Firebase
这种模型代表了最基础的非关系型数据库,其中数据库中的每一项都作为一个属性名称(称为键)及其对应的值存储。
业务用例:
用户偏好和个人资料存储
基于浏览数据的产品推荐
购物车
示例:
DynamoDB
Redis
Etcd
这里的数据建模为顶点和边(值和连接)。类似于人类思考和处理信息的方式,图数据库能够回溯数据中离散单元之间的关系。这些数据库使得数据及其关系的持久化、探索和可视化变得更加直观。
业务用例:
欺诈检测
实时推荐引擎
主数据管理 (MDM)
网络和 IT 运营
身份和访问管理
示例:
Neo4j
AWS Neptune
由 IBM 研究员 R.F. Codd 提出的关系模型,始终是数据库领域的中流砥柱。数据以表格形式存储,按行和列排列,并通常具有用于分析和探索的复杂查询引擎。关系型数据库支持事务保证和 ACID(原子性、一致性、隔离性和持久性)合规性,而其他四个类别中的大多数数据库则是最终一致性的。
业务用例:
电子商务
企业资源规划
客户关系管理
示例:
IBM Db2
列族数据库通过行键、列名和单元时间戳实现了极速的数据访问。这种类型数据库的灵活模式意味着列不必在记录之间保持一致,可以将列添加到特定的行中,而不必添加到每一条记录中。宽列式存储源自 Google 的 BigTable 论文。这些数据模型不应与列式存储模型混淆,后者更适用于数据仓库技术和分析访问模式,因为它在磁盘上实现了数据压缩的优化,并更高效地利用了 CPU。
业务用例
安全和股票市场分析
点击流分析
IoT 和遥测
示例:
Apache Cassandra
DataStax Enterprise
Google Cloud BigTable
总而言之,每种主要数据模型都有其优缺点(我们在这里仅仅讲解了一些皮毛)。如果仍有疑惑,可以选择一些经过实战检验且广泛使用的数据库,比如 PostgreSQL。想了解更多关于数据模型类别的内容,可以参考 Martin Fowler 的书《NoSQL Distilled》,特别是第 8 到第 11 章。
来吧!如果您希望了解更多信息,根据您能投入的时间,这里有一些学习建议:
15 分钟:“How to Choose a Database”,作者 Ben Anderson
15 分钟:“SQL vs. NoSQL Databases: What’s the Difference?”,作者:Ben Anderson 和 Brad Nicholson
3 小时:Jepsen 对分布式系统安全的分析
一周:《Designing Data-Intensive Applications》,作者:Martin Kleppman。
想要开始构建吗?IBM Cloud 提供丰富的托管数据库服务,帮助您的团队快速启动项目。