本文概述
- 什么是NoSQL数据库?
- NoSQL数据库(非关系数据库)如何工作?
- 为什么我们需要NoSQL数据库?
- 广泛的功能
- SQL(关系)和NoSQL(非关系)的比较
NoSQL数据库(非关系数据库)如何工作?如前所述, 在NoSQL数据库中, 各种数据模型用于访问和管理数据, 包括文档, 图形, 搜索, 使用键值对以及数据存储在内存中。这些类型的数据库针对使用大量数据, 需要低延迟和灵活的数据模型的应用程序进行了优化。所有这些都是通过减轻其他类型数据库的严格数据一致性要求来实现的。
让我们考虑一个简单的书籍数据库的典型架构示例。
-在关系数据库中, 书本条目通常分为几个部分(或” 归一化” )并存储在单独的表中, 它们之间的关系由主键和外键的约束确定。在此示例中, “ 书” 表中的” 作者” 表中有” ISBN” , “ 书名” 和” 问题编号” 列-“ 作者的ID” 和” 作者名” 列以及” 作者” 中–” ISBN” 表-“ 作者” 和” ISBN” 列。关系模型旨在确保数据库中表之间的参考数据的完整性。数据经过标准化处理以减少冗余, 并且通常针对存储进行了优化。
-NoSQL数据库中的书籍记录通常存储为JSON文档。对于每本书或元素, 值” ISBN” , “ 书名” , “ 出版物编号” , “ 作者姓名” 和” 作者ID” 都作为属性存储在单个文档中。在此模型中, 为直观设计和水平可伸缩性优化了数据。
为什么我们需要NoSQL数据库?NoSQL数据库非常适合许多现代应用程序, 例如移动, 游戏和Internet应用程序, 此时需要具有高性能和丰富功能的灵活, 可伸缩的数据库, 以提供最大的可用性。
灵活性
通常, NoSQL数据库提供了灵活的架构, 使你可以更快地开发并为分阶段实施提供机会。由于使用了灵活的数据模型, NoSQL数据库非常适合于部分结构化和非结构化数据。
可扩展
NoSQL数据库旨在使用分布式硬件集群进行扩展, 而不是添加昂贵的可靠服务器。一些云服务提供商在后台执行这些操作, 以提供完全托管的服务。
高性能
NoSQL数据库针对特定数据模型(例如, 文档, 图形或使用键值对)和访问模式进行了优化, 与关系数据库相比, 可以实现更高的性能。
广泛的功能NoSQL数据库为API和数据类型提供了广泛的功能, 这些功能是专门为相关数据模型设计的。
NoSQL数据库类型
基于键值对的数据库。
使用键值对的数据库可保持较高的可分离性, 并提供其他类型的数据库无法实现的前所未有的水平扩展。键值数据库使用的好例子是游戏, 广告软件和物联网应用程序。 Amazon DynamoDB可确保稳定的数据库操作, 并且在任何规模上的延迟都不会超过几毫秒。如此稳定的性能是将Snapchat Stories转移到DynamoDB服务的主要原因, 因为Snapchat的这种可能性与存储中记录的最大负载有关。
文献。
在应用程序代码中, 数据通常以类似于JSON的格式表示为对象或文档, 因为对于开发人员而言, 它是一种高效且直观的数据模型。文档数据库允许开发人员使用他们在应用程序代码中使用的相同文档模型在数据库中存储和检索数据。文档和文档数据库的灵活, 半结构化, 分层的性质使它们可以根据应用程序的需求进行发展。该文档模型可以在目录, 用户配置文件和内容管理系统中很好地工作, 其中每个文档都是唯一的, 并且会随时间变化。 Amazon DocumentDB(与MongoDB兼容)和MongoDB是常见的文档数据库, 它们为敏捷开发提供功能和直观的API。
图形数据库。
图形数据库简化了使用复杂数据集的应用程序的开发和启动。使用图数据库的典型示例是社交网络, 推荐服务, 欺诈检测系统和知识图。 Amazon Neptune是一种完全托管的图形数据库服务。 Neptune支持属性图和资源描述框架(RDF), 提供了两个图API可供选择:TinkerPop和RDF / SPARQL。常见的图形数据库包括Neo4j和Giraph。
内存中的数据库。
通常, 游戏和广告应用程序使用排行榜, 实时会话存储和分析。这种功能需要在几微秒内做出响应, 并且随时都有可能急剧增加流量。 Amazon ElastiCache提供Memcached和Redis用于处理无法使用磁盘存储处理的高性能, 低延迟工作负载。这种工作量是麦当劳网络的特征。专门开发的数据仓库的另一个示例是Amazon DynamoDB Accelerator(DAX)。 DAX使DynamoDB读取数据的速度提高了几倍。
搜索数据库。
许多应用程序会生成日志, 以使开发人员更轻松地进行故障排除和修复问题。 Amazon Elasticsearch Service(Amazon ES)是一项专门开发的服务, 用于通过索引, 汇总和部分搜索结构化日记帐和指标来以近实时模式可视化和分析自动生成的数据流。 Amazon ES还是功能强大的高性能全文搜索引擎。 Expedia为各种特别重要的用例使用了150多个Amazon ES域, 30 TB数据和300亿份文档-从运营监控和故障排除到跟踪分布式应用程序堆栈和优化成本。
SQL(关系)和NoSQL(非关系)的比较数十年来, 关系数据模型已在应用程序开发中发挥了重要作用, 该关系数据模型已用于关系数据库(例如Oracle, DB2, SQL Server, MySQL和PostgreSQL)中。但是在2000年代中后期, 其他数据模型开始获得明显的普及。为了引用新兴的数据库和数据模型类, 引入了术语” NoSQL” 。通常, ” NoSQL” 被用作术语” 非关系” 的同义词。
【使用NoSQL数据库示例】NoSQL数据库的类型很多, 具有各种功能, 但是下表显示了NoSQL数据库和SQL之间的主要区别。
SQL数据库 | NoSQL数据库 | |
合适的工作量 | 关系数据库是为事务性和高度一致的实时事务处理(OLTP)应用程序设计的, 非常适合于实时分析处理(OLAP)。 | NoSQL数据库(基于键值对, 文档, 图形和内存)基于OLTP, 用于各种数据访问模式, 包括低延迟应用程序。 NoSQL搜索数据库旨在分析部分结构化数据。 |
资料模型 | 关系模型将数据标准化并将其转换为由行和列组成的表。模式严格定义了表, 行, 列, 索引, 表之间的关系以及其他数据库项。这样的数据库确保了表之间关系中参考数据的完整性。 | NoSQL数据库使用各种数据模型, 包括文档, 图形, 搜索, 使用键值对以及将数据存储在内存中。 |
酸性质 | 关系数据库提供了一组ACID属性:原子性, 一致性, 隔离性, 可靠性。 -原子性要求完全或完全不执行事务。 -一致性意味着事务完成后, 数据必须立即遵循数据库架构。 -隔离要求并行事务彼此分开执行。 -可靠性是指在意外的系统故障或电源故障后恢复到上次保存状态的能力。 | NoSQL数据库通常会做出妥协, 从而减轻ACID属性的严格要求, 以实现允许水平扩展的更灵活的数据模型。因此, NoSQL DB是高带宽和低延迟使用示例的理想选择, 在这些示例中, 需要水平扩展, 而不仅限于单个实例。 |
性能 | 性能主要取决于磁盘子系统。为了获得最佳性能, 通常需要查询, 索引和表结构优化。 | 性能通常取决于基础硬件的群集大小, 网络延迟和调用应用程序。 |
缩放比例 | 关系数据库通常通过增加硬件的计算能力或添加单独的副本以读取工作负载来扩展。 | 由于基于键值对的访问模式和基于分布式体系结构的可伸缩性, NoSQL数据库通常支持高可分离性。这样可以提高吞吐量, 并在几乎无限的规模上提供一致的性能。 |
API | 写入和提取数据的请求用SQL编写。这些查询由关系数据库分析和执行。 | 面向对象的API使应用程序开发人员可以轻松地编写和检索存储在内存中的数据结构。通过使用分区键, 应用程序可以按键值对, 列集或包含串行对象和应用程序属性的部分结构化文档进行搜索。 |
推荐阅读
- 如何在Symfony 4的Twig视图中从services.yaml中检索特定和所有YAML参数
- 完整的高级移动应用开发工具指南
- 如何禁用Easy Capture Manager
- 如何在Netbeans中禁用文件的矩形虚线选择模式
- 如何使用Winapp2在Windows中扩展CCleaner的清理例程
- 从命令行构建Android - 包似乎已损坏
- Android - zipalign在apksigner之前失败了
- CordovaError(无法找到'ANDROID_HOME'环境变量)
- Gradle依赖管理(如何在android项目中维护新旧版本的依赖项())