本文转载自公众号“读芯术”(ID:AI_Discovery) 在大数据时代,大数代下的新数据是候熟信息系统的核心,数据组织和运营的数据效率是任何公司都关心的问题,业务专长和对现有技术解决方案的大数代下的新理解是非常必要的。因此,候熟公司必须同时继续评估和选择能够满足其未来需求和支持其增长的数据数据库。 关系数据库已经被用于存储数据几十年了,大数代下的新它们仍是候熟许多用例的可行解决方案。而NoSQL数据库则是数据针对关系数据库技术的局限性而创建的。 与关系型数据库相比,大数代下的新NoSQL数据库具有更强的候熟可扩展性和更好的性能,它弥补了关系型数据库的数据一些不足。 NoSQL数据库旨在解决大数据环境中的服务器租用大数代下的新海量,多源和多格式的候熟数据处理问题。它们提供了一种新的数据方法来满足容量需求以及新的数据类型。如今,NoSQL数据库的数量变得越来越重要。了解了它们之间的差异是至关重要的,你才能采用正确的技术进行正确的应用。 本文将阐述从RDBMS迁移到NoSQL的困难、过程和好处。 1. 简介 SQL: SQL是结构化查询语言的缩写。IT工程师在大型关系数据库(DBMS)中快速搜索信息已经有很长一段时间了。 SQL如今被广泛使用,因为它是最结构化、最快的数据库组织和查询设备之一;不同的名字代表不同的改进版本,如Oracle的MySQL和微软的云南idc服务商SQL Server。此外,SQL具有预定义的结构和模式,是许多公司最推荐的选择。 NoSQL: “NoSQL”这个缩略语有两种不同的解释,目前尚不明确: 这个术语既与技术特征有关,也与20世纪10年代出现的历史性一代DBMS有关。导致NoSQL发明的主要原因是,它解决了这样一个问题,即一个网站上的同一个数据库可以在全世界范围内被数百万用户同时使用;像亚马逊这样的公司就存在这种典型问题…… 笔者试图通过NoSQL来降低查询语言的云服务器复杂性,简化数据库的体系结构。这些数据库包括面向列、面向文档、面向图形和面向键/值的数据。NoSQL由各种产品组成,每个产品都有一组独特的功能。 主要差别: 2. 历史因素 (1) 关系型DBMS的历史支配地位 (2) NoSQL模型的先驱 大型web公司必须处理非常大的数据量,这就是为什么它们首先要面对传统关系型DBMS的固有限制。 这些系统严格应用ACID属性(原子性、一致性、隔离性、持久性),通常设计为在单台计算机上运行,很快就出现了可伸缩性问题。为了满足这些限制,一些公司已经开始开发自己的数据库管理系统,这些系统可以在分布式硬件架构上运行,可以处理大量数据: 通过简单增加服务器数量,性能保持良好,这是降低成本的合理解决方案,特别是如果收入随着活动的增长而增长的话。 3. 流行的数据库 为了选择合适的管理系统,了解市场上存在什么是很重要的。看看下面5个流行的SQL和NoSQL数据库,其中有付费的也有免费的。 (1) SQL数据库产品: (2) NoSQL数据库产品: 4. NoSQL数据库设计 NoSQLDBMS的主要特点,在于支持对大量数据的操作和水平可伸缩性。然而,目前大多数公司面临的困难是,如何用最适当的技术解决问题,使应用作出反应。 图源:unsplash 要解决这个问题,首先要很好地理解不同类型的NoSQL数据库。 有一个普遍的误解,所有的NoSQL数据库都是平等创建的。实际上,这些数据库可以分为四类:面向文档的数据库、键/值数据库、列数据库和面向图形的数据库。它们都有一个共同点:支持比传统关系数据库更灵活和更动态的模型。 事实上,每个类别都有自己的属性和限制。没有数据库可以解决所有问题。必须根据项目的需要选择数据库。 必须考虑将操作什么类型的数据,以及应用程序最终将如何使用这些数据。 (1) 面向文档的数据库:混合结构 面向文档的NoSQL数据库将数据存储和提取为键/值对,但是值部分存储为文档。文档以JSON或XML格式存储。 MongoDB, Apache CouchDB, MarkLogic是面向文档的数据库 (2) 键/值数据库: 面向键值的数据库有大量的键和值散列。它代表了NoSQL数据库的最简单形式。将唯一的键与数据中的值相关联,目的是基于相对简单的数据集极大地提高应用程序的性能。 Redis, Riak, Memcached 和 Aerospike 就是键值数据库的例子。 (3) 列数据库: 列数据库将数据保存在具有大量列的表中。每个存储块包含来自单个列的数据,并且每个列被单独处理。它们在诸如COUNT、SUM、AVG、MAX等聚合查询上有很高的性能,因为数据很容易从列中取出。 HBase, Cassandra 和 Accumulo 就是列数据库的例子。 (4) 面向图形的数据库: 基于图的数据库是一种网络数据库,它将数据元素存储在“图”结构中,使得在节点之间创建关联成为可能,最终成为推荐引擎或社交网络的基础。 从图形数据库中可以获得很多信息。例如,可以使用图形技术根据不同人的兴趣来确定他们之间的关系。 图源:neo4j. Neo4J, InfiniteGraph 和 FlockDB 就是面向图形数据库的例子。 5. 为应用程序选择适当的数据库类型的5个标准 如何选择哪种类型的数据库最适合一个项目?可以根据以下清单做决定: 6. 从RDBMS转向NoSQL 无论选择哪种NoSQL数据库设计,将数据迁移到其中都会遇到一些严峻的挑战。NoSQL中数据模型的设计具有额外的复杂性,你需要知道数据的最终用途。仅仅知道应用程序将处理账单和客户信息是不够的,还必须知道这些数据将如何展示给最终用户。 因此,NoSQL数据库中的数据建模除了需要对最终用户的使用有深入的了解外,还需要真正的技术专长。 图源:unsplash 是时候用NoSQL解决方案替换SQL了吗? 在笔者看来,这是一个很难回答的问题。因为在大多数情况下,不是用NoSQL解决方案替换SQL,而是在应用程序和用例显示需要更改时,从一种解决方案转换到另一种解决方案。 通常,在构建现代Web和移动应用程序时,对灵活性和可伸缩性的需求将推动这种转变。 许多公司试图在其web应用程序中支持负载,因此选择简单地将web服务器添加到负载平衡器之后以支持更多用户。 毫无疑问,在日益重要的云计算世界中,扩展能力是一个基本的竞争优势,可以轻松地添加或删除虚拟机实例,以满足变化不定的需求。 关系型数据库(RDBMS)不允许简单的扩展,也不提供灵活的数据模型。管理更多的用户意味着添加更大的服务器,而大型服务器非常复杂和昂贵,不像低成本的硬件、“商品硬件”和云架构。 组织开始看到现有或新应用程序的关系数据库的性能问题。特别是随着用户数量的日益增加,他们意识到对更快速、更灵活的数据库的需求变得非常重要。是时候转移到NoSQL了! 从SQL到NoSQL的转换需要哪些主要步骤? 应用程序/项目可能因每个组织而有很大的差异,因此转换将取决于使用用例。以下是一些关于过渡的通用准则: (1) 理解应用的核心需求 以下是与NoSQL数据库的需求相对应的一些要求: (2) 了解NoSQL提供的不同类型 如前所述,有不同类型的NoSQL数据库管理系统。例如面向文档的NoSQL数据库—Couchbase和MongoDB是两个最著名和最广泛采用的例子。 此外,Cassandra可能也是一个解决方案,可以使用它的柱状模型进行数据分析。Neo4j是一个图形数据库,对于需要存储实体间关系的应用程序来说,它可能是一个完美的数据库。 (3) 建立一个原型 一旦缩小了数据库类型的可能选择范围,就可以尝试开发一个集成了应用程序主要特征的原型。这个原型将帮助评估响应时间、吞吐量方面的性能和易于扩展的能力。 (4) 文档建模与开发 对于面向文档的数据库,请花几天时间从固定的表格图开始对数据建模,以获取灵活的文档模型。 (5) 部署然后生产 操作稳定性是交互式web应用程序的一个非常重要的方面。对部署进行一次又一次的测试,就像对通常使用传统RDBMS系统的应用程序进行测试一样。 (6) 紧跟最新趋势 今天,有大量的高质量培训提供了NoSQL的实践课程,确保NoSQL成功实现的最佳方法是更新最新版本。 不要担心,你会很容易接受某些NoSQL技术,特别是如果熟悉JSON文档格式。广泛使用SQL的开发人员可能需要适应和学习文档建模方法。重新思考如何使用文档在逻辑上构造数据,而不是将数据规范化为固定的数据库模式,这是一个重要的方面。 7. 结论 本文旨在介绍存在的主要差异,以帮助读者做出正确的决策并塑造信息系统(或简单应用程序)的未来。 可以看到,SQL和NoSQL数据库最终做的是几乎相同的事情(存储数据),但方式不同。数据库管理系统(DBMS)的选择对于任何数据项目来说都是一个重要的和结构化的时刻。当然,总是可以选择一个选项,然后切换到另一个选项。但是在项目开始时进行一点概念分析和思考将节省时间和金钱。 今天的市场上到处都是NoSQL数据库——每天都要面对两三个这样的数据库,因为对于开发人员来说,转到NoSQL有很多优势。更灵活的数据模型和摆脱僵化模式是一个很大的优势。还可以看到性能的显著提高和水平伸缩。 图源:unsplash 但大多数NoSQL产品仍处于产品周期的早期阶段。在复杂连接之类的特性上,开发人员可能更喜欢使用传统的RDBMS。对于某些项目,混合方法可能是最佳选择。最后,根据项目的需求,每个公司都有自己的偏好。 因此,确定需求和数据库,甚至使用混合方法,为项目的开发提供集成支持才是最合适的做法。