本文转载自公众号《阅芯》(ID:AI_Discovery)大数据时代,数据是信息系统的核心,数据组织和运行的效率是任何企业都关心的问题。了解技术解决方案至关重要。因此,企业必须同时继续评估和选择能够满足其未来需求并支持其发展的数据库。几十年来,关系数据库一直用于存储数据,对于许多用例而言,它们仍然是可行的解决方案。另一方面,创建NoSQL数据库是为了解决关系数据库技术的局限性。与关系数据库相比,NoSQL数据库具有更强的可扩展性和更好的性能,弥补了关系数据库的一些不足。NoSQL数据库旨在解决大数据环境中的海量、多源和多格式数据处理问题。它们提供了一种满足容量需求和新数据类型的新方法。如今,NoSQL数据库的数量变得越来越重要。了解它们之间的差异至关重要,这样您才能针对正确的应用采用正确的技术。本文将阐述从RDBMS迁移到NoSQL的难点、过程和好处。1.SQL简介:SQL是StructuredQueryLanguage的缩写。长期以来,IT工程师一直在大型关系数据库(DBMS)中快速搜索信息。SQL在今天被广泛使用,因为它是最结构化和最快的数据库组织和查询设备之一;不同的名称代表不同的改进版本,如甲骨文的MySQL和微软的SQLServer。此外,SQL具有预定义的结构和模式,是许多公司最推荐的选择。NoSQL:首字母缩略词“NoSQL”有两种不明确的不同解释:对某些人来说它是“NoSQL”,即使用除SQL之外的另一种查询语言。对于其他人来说,它不仅仅是“SQL”,即SQL与其他信息检索工具相结合。该术语既涉及技术特征,也涉及1910年代出现的具有历史意义的DBMS。导致NoSQL发明的最主要的事情是它解决了一个网站上的同一个数据库可以被全世界数百万用户同时使用的问题;亚马逊等公司的典型问题...作者试图通过NoSQL降低查询语言的复杂性并简化数据库的体系结构。这些数据库包括面向列、面向文档、面向图形和面向键/值的数据。NoSQL由多种产品组成,每种产品都具有一组独特的功能。主要区别:SQL数据库具有预定义的模式,而NoSQL数据库具有用于非结构化数据的动态模式。SQL数据库是垂直可扩展的,而NoSQL数据库是水平可扩展的。SQL数据库通过增加硬件(如CPU、RAM或SSD)的功能来扩展。NoSQL数据库通过增加数据服务器的数量来减少负载。这就像在同一建筑物中添加更多楼层,而不是在相邻区域添加更多建筑物。SQL数据库使用SQL(结构化查询语言)来定义和操作数据,功能非常强大。在NoSQL数据库中,查询的重点是文档集合。有时也称为UnQL(非结构化查询语言)。不同的NoSQL数据库使用UnQL的语法差异很大。SQL数据库是基于表的数据库,而NoSQL数据库是基于键值对的数据库。这意味着SQL数据库以表的形式表示数据,表由一定数量的行表示数据组成,而NoSQL数据库是键值对、文档、图数据库等的集合。2、历史因素(1)历史关系型DBMS的主导地位1970年代创建的关系型DBMS逐渐成为主流,并在90年代初期成为非常普遍的主流数据库范式。在1990年代,许多物流公司的销售人员开始使用它来存储业务数据。事实上,它们既没有鼠标也没有用户界面来搜索存储在服务器上的某些信息,通常通过专业线连接并且相距很远,它们用于通过键盘输入SQL命令并能够在几秒钟内检索有关的信息特定产品或原材料的可用性。出现了其他几种数据库模型,例如面向对象的数据库管理系统、分层数据库管理系统、对象-关系数据库管理系统,但它们的使用非常有限。本世纪以来,随着谷歌、亚马逊等大型互联网公司的发展,涌现出大量非结构化数据,其增长速度远超不再符合RDBMS关系模型的结构化数据。集群计算也得到发展,关系模型的主导地位因其对新实践的限制而受到质疑。(2)NoSQL模型的先驱大型网络公司必须处理非常大的数据量,这就是为什么他们首先面临传统关系DBMS的固有局限性。这些系统严格应用ACID属性(原子性、一致性、隔离性、持久性),通常设计为在单台计算机上运行,??可扩展性问题很快就会出现。为了满足这些限制,一些公司已经开始开发自己的可以运行在分布式硬件架构上并且可以处理大量数据的数据库管理系统:Google(BigTable)、Amazon(DynamoDB)、LinkedIn(Voldemort)、Facebook(Cassandra和HBase)、百度(Hypertable)通过简单地增加服务器数量来保持良好的性能,这是降低成本的合理解决方案,尤其是当收入随着活动而增长时。3.流行的数据库为了选择合适的管理系统,重要的是要知道市场上有什么。请看下面5个流行的SQL和NoSQL数据库,有付费的也有免费的。(1)SQL数据库产品:MySql:免费,即使是免费的数据库引擎也提供了很多功能。Postgres:这个数据库管理引擎是可扩展的,可以处理数TB的数据,并具有各种预定义的功能。Oracle:Oracle数据库管理工具是最新思想和特性的强大组合。SQLServer:非常快速和稳定,与其他Microsoft产品配合良好。SQLite:SQLite数据库设置起来非常快捷,它还可以用于将数据存储在智能手机应用程序(iPhone或Android)的实际数据库中。(2)NoSQL数据库产品:MongoDB:MongoDB是一个灵活/可靠的数据库,将吸引读者进入NoSQL的世界。管理维护非常简单快捷。Hbase:它是一个面向列的数据库,有助于提高查询性能和集合。Cassandra:Cassandra提供的线性可扩展性,允许通过简单地添加/删除服务器轻松扩展/收缩集群。Redis:非常简单易用。下载Redis并在接下来的五分钟内开始使用它。CouchDb:由于能够存储序列化(JSON格式)非结构化数据和RestfulHTTPAPI,CouchDB非常适合用于Web和移动应用程序。4.NoSQL数据库设计NoSQLDBMS的主要特点是支持大数据量的操作和横向扩展。然而,目前大多数公司面临的困难是如何使用最合适的技术来解决问题,让应用程序做出响应。来源:Unsplash要解决这个问题,首先要对不同类型的NoSQL数据库有很好的了解。有一种常见的误解,认为所有NoSQL数据库生而平等。实际上,这些数据库可以分为四类:面向文档的数据库、键/值数据库、列式数据库和面向图的数据库。它们都有一个共同点:支持比传统关系数据库更灵活和动态的模型。事实上,每个类别都有自己的属性和局限性。没有数据库可以解决所有问题。数据库必须根据项目的需要来选择。必须考虑将要操作的数据类型以及应用程序最终将如何使用该数据。(1)面向文档的数据库:混合结构的面向文档的NoSQL数据库将数据存储和提取为键/值对,但值部分存储为文档。文档以JSON或XML格式存储。MongoDB、ApacheCouchDB、MarkLogic是面向文档的数据库(2)Key/value数据库:面向Key-value的数据库有大量的key和valuehash。它代表了最简单的NoSQL数据库形式。将唯一键与数据中的值相关联,旨在极大地提高基于相对简单数据集的应用程序的性能。Redis、Riak、Memcached和Aerospike是键值数据库的示例。(3)列数据库:列数据库将数据保存在具有大量列的表中。每个存储块包含来自单个列的数据,并且每个列都被单独处理。它们在COUNT、SUM、AVG、MAX等聚合查询上具有高性能,因为数据很容易从列中获取。HBase、Cassandra和Accumulo是列式数据库的示例。(4)面向图的数据库:基于图的数据库是一种网络数据库,它以“图”结构存储数据元素,使得在节点之间建立关联成为可能,最终成为推荐引擎或社交网络的基础。可以从图数据库中获取很多信息。例如,图形技术可用于根据不同人的兴趣来确定他们之间的关系。资料来源:neo4j。Neo4J、InfiniteGraph和FlockDB是面向图的数据库的示例。5.5为应用程序选择合适的数据库类型的标准如何选择最适合项目的数据库类型?可以根据以下清单做出决定:要存储的数据类型:SQL数据库不适合分层数据存储。然而,NoSQL数据库更适合分层数据存储,因为它遵循键值对方法或图形方法。NoSQL数据库是大型数据集的首选。可扩展性:在大多数情况下,SQL数据库是垂直可扩展的。可以通过增加单个服务器上的处理器、RAM、SSD等来管理增加的负载。另一方面,NoSQL数据库是可横向扩展的。只需将一些额外的服务器添加到NoSQL数据库基础架构即可处理繁重的数据流。因此,可以根据设备选择合适的数据库类型。高事务性应用:SQL数据库更稳定,能保证原子性和数据完整性,因此更适合密集使用的事务型应用。虽然可以将NoSQL用于事务性目的,但它仍然不能与SQL相提并论,但可以用于复杂的事务性应用程序。复杂查询:SQL数据库非常适合需要大量查询的环境,而NoSQL数据库不适合复杂查询。所以NoSQL中的查询不如SQL查询语言强大。属性:SQL数据库强调ACID属性(原子性、一致性、隔离性、持久性),而NoSQL数据库遵循BrewersCAP定理(一致性、可用性和分区容错性)。6.从RDBMS迁移到NoSQL无论您选择哪种NoSQL数据库设计,将数据迁移到其中都会带来一些严峻的挑战。NoSQL中数据模型的设计有额外的复杂性,你需要知道数据的最终用途。仅仅知道应用程序将处理账单和客户信息是不够的,您还必须知道这些数据将如何呈现给最终用户。因此,NoSQL数据库中的数据建模除了深入了解最终用户的使用情况外,还需要真正的技术专长。来源:unsplash是时候用NoSQL解决方案取代SQL了吗?在我看来,这是一个很难回答的问题。因为在大多数情况下,不是用NoSQL解决方案替换SQL,而是当应用程序和用例表明需要更改时从一种解决方案切换到另一种解决方案。通常,这种转变是由构建现代Web和移动应用程序时对灵活性和可扩展性的需求驱动的。许多公司正试图在他们的Web应用程序中支持负载,因此选择简单地在负载均衡器后面添加Web服务器以支持更多用户。毫无疑问,在日益重要的云计算世界中,扩展能力是一项基本的竞争优势,因为可以轻松添加或删除虚拟机实例以满足不断变化的需求。关系数据库(RDBMS)不允许轻松扩展,也不提供灵活的数据模型。管理更多用户意味着增加更大的服务器,而大型服务器既复杂又昂贵,这与低成本硬件、“商品硬件”和云架构不同。组织开始发现现有或新应用程序的关系数据库存在性能问题。特别是随着用户数量的日益增加,他们意识到对更快、更灵活的数据库的需求变得非常重要。是时候转向NoSQL了!从SQL过渡到NoSQL所需的主要步骤是什么?应用程序/项目因组织而异,因此转换将取决于用例。以下是一些过渡的一般准则:(1)了解应用程序的核心需求下面是一些与NoSQL数据库需求相对应的要求:可扩展性快速应用程序开发:不断变化的市场需求和持续的数据修改性能稳定性:响应时间短为了更好的用户体验操作可靠性:管理错误的高可用性,对应用程序的影响最小,集成监控API以实现更好的维护(2)了解NoSQL提供的不同类型,例如如前所述,有不同类型的NoSQL数据库管理系统。例子包括面向文档的NoSQL数据库——Couchbase和MongoDB是最著名和最广泛采用的两个例子。此外,Cassandra也可能是使用其柱状模型进行数据分析的解决方案。Neo4j是一个图形数据库,可能是需要存储实体之间关系的应用程序的完美数据库。(3)构建原型一旦缩小了数据库类型的可能选择范围,就可以尝试开发一个集成了应用程序主要功能的原型。该原型将有助于评估响应时间、吞吐量和可扩展性方面的性能。(4)文档建模和开发对于面向文档的数据库,从一个固定的表格图表开始,花几天时间对数据进行建模,以获得一个灵活的文档模型。(5)先部署再生产运行稳定性是交互式网络应用的一个非常重要的方面。对部署进行一次又一次的测试,就像对通常使用传统RDBMS系统的应用程序进行测试一样。(6)紧跟最新趋势如今,有大量提供NoSQL实战课程的高质量培训,保证NoSQL实施成功的最好方法就是更新最新版本。别担心,您会接受某些NoSQL技术,特别是如果您熟悉JSON文档格式。大量使用SQL的开发人员可能需要适应和学习文档建模方法。一个重要的方面是重新思考如何使用文档在逻辑上构建数据,而不是将数据规范化为固定的数据库模式。7.结论本文旨在介绍存在的主要差异,以帮助读者做出正确的决定并塑造信息系统(或简单的应用程序)的未来。如您所见,SQL和NoSQL数据库最终做的事情几乎相同(存储数据),但方式不同。数据库管理系统(DBMS)的选择对于任何数据项目来说都是一个重要的结构化时刻。当然,总是可以选择一个选项然后切换到另一个选项。但是在项目开始时进行一点概念分析和思考会节省时间和金钱。当今市场上充斥着NoSQL数据库——每天都有两三个,因为开发人员转向NoSQL有很多优势。更灵活的数据模型和摆脱僵化的模式是一个很大的优势。您还可以看到性能和水平扩展方面的显着提高。来源:unsplash但大多数NoSQL产品仍处于产品周期的早期阶段。对于复杂连接等功能,开发人员可能更喜欢使用传统的RDBMS。对于某些项目,混合方法可能是最佳选择。最后,每个公司根据项目的需要有自己的偏好。因此,确定需求和数据库,甚至使用混合方式为项目的开发提供集成支持是最合适的。
