为什么对初学者来说采用NoSQL很难

随着越来越多的技术突破,传统的数据存储方式正在受到挑战。 随着行业巨头采用NoSQL以及NoSQL数据库选项的不断增加,将NoSQL视为关系数据库替代软件进行主流软件开发已成为一种趋势。

但是,当涉及到关系数据库时,它已经存在了数十年。 寻找具有编写SQL查询,设计实体关系,规范化架构和确保ACID属性的知识和经验的开发人员并不难。 NoSQL并非如此,因为它缺乏知识,专业知识和经验。

在不适合使用NoSQL的情况下,这可能会导致错误的设计决策。采用NoSQL的另一个常见错误发生在来自关系数据库背景的开发人员设计遵循关系数据库基础的NoSQL数据库时。

尽管我在本文中谈论的更多是NoSQL,但我确实相信关系数据库在其所属领域具有优势。

因此,如果您现在正在使用关系数据库或打算用于新软件项目,请不要担心,坚持您的决定,它不会在不久的将来消失。 另外,请记住,NoSQL并不意味着'No SQL',它意味着'不仅仅是SQL'。

在本文中,我将重点介绍以下几点,这对于采用NoSQL的初学者很有用。

为什么NoSQL很难?

简而言之,使用NoSQL数据库并不困难。 困难在于以正确的方式在正确的地方使用它。 首先,必须了解NoSQL不会遵循与关系数据库相同的原则,例如固定模式,规范化,对诸如SQL之类的表达性查询的支持。

开发人员经常犯的一个错误是试图规范NoSQL数据库,从而弄乱了整个数据库的设计,从而难以有效地检索项目。

根据NoSQL数据库的类型(文档数据库,键值数据库,图形数据库等)和特定于供应商的实现( MongoDBDynamoDBCassandra等),NoSQL数据库与其他同类数据库完全不同。 因此,在设计数据库模式或适合所有NoSQL数据库类型的查询时,没有通用的最佳实践或原则。 这在设计各自NoSQL数据库类型的唯一性时要面临挑战,要遵循其自身的最佳实践。

例如,如果考虑文档数据库,则需要考虑集合大小限制,如何划分它们,可用的查询类型和索引支持,以便可以有效地检索应用程序所需的项目(或嵌套属性)。 这不是一件容易的事,因为在某些地方可能会出错。

关系数据库的一些最佳实践(例如不在数据库中存储所有内容)仍然适用于NoSQL。 尽管可以在某些NoSQL数据库中存储图像, 转码后的视频等文件,但将它们存储在分布式文件系统中然后使用数据库存储文件元数据更为有意义。

复制数据可能成为最佳做法

如果您是一个开发人员,对于在数据库级别拒绝数据复制有一定的想法,那么该是时候重新考虑NoSQL了。

对于某些类型的NoSQL数据库,在不同表或集合之间重复数据属性甚至可以成为避免复杂查询的最佳实践。

例如,今天的存储并不那么昂贵,而处理能力则相对更昂贵。 因此,以更多形式存储数据并利用更多存储空间进行直接检索可能更有意义,而不是执行计算量大的查询。

因此,您可能想知道,为什么在关系数据库中使用所有这些昂贵的查询,而不是在NoSQL中使用重复存储数据及其关系,从而可以执行直接查找和检索? 答案不是那么简单,因为当数据散布在许多表或集合中时,在NoSQL中创建或更新数据可能会变得更加复杂。

因此,评估应用程序如何使用和更新数据并相应地设计数据库非常重要。

查询NoSQL对于每个NoSQL数据库都是唯一的

这是与NoSQL真正混淆的另一个领域。 这些NoSQL数据库均具有自己的查询语言。 对于以前使用关系数据库的开发人员来说,这确实是一个挑战,因为SQL可以适用于许多具有微小差异的关系数据库实现。 使用NoSQL,您必须参考文档以了解受支持的特定数据类型,查询和功能限制。

对于某些类型的NoSQL数据库(例如,某些文档数据库和键值数据库),看到与关联数据库相比,只能查询关键属性或使用预定义索引,就不会感到惊讶几乎没有任何属性。

NoSQL数据库要考虑的另一个重要点是它们支持的一致性模型。 尽管其中一些数据库支持强一致性,但其他数据库最终可能会受到限制。 一致性支持还可以根据查询的类型(是读,写还是更新)而有所不同。

事务处理方式不同

对于大多数NoSQL数据库,很难创建类似于关系数据库的事务,在关系数据库中,数据库为提交和回滚提供了更高级别的支持。 因此,从NoSQL数据库确定实现事务的支持级别也很重要。

对于大多数NoSQL数据库,您将需要在应用程序级别处理事务和回滚。 但是,许多这些NoSQL数据库都提供了一些基本功能,这些功能将使您的生活更轻松。

例如,某些NoSQL数据库支持诸如条件写入和原子更新之类的功能,这些功能可用于有效地实现事务。

例如,您可以创建一个更新操作,说如果金额仅是'x'金额,请执行项目更新(如果更改了该项目,则引发异常,需要在应用程序中进行相应处理。这样做的好处是集合或事务发生时未锁定表,这对数据库性能产生积极影响。

同时使用NoSQL和Relational

以我的经验,许多Web和移动应用程序功能需要不同的查询功能,而明智的选择是从关系数据库开始。

如果您的应用程序需要对高吞吐量,可用性,存储扩展的特殊支持,那么除了关系数据库之外,您还可以考虑将NoSQL数据库用于相关的使用领域。

在过去的几年中,根据所需的应用程序功能,采用微服务也使其使用多种数据库类型变得合乎逻辑。
例如,您可以考虑将内存中的键值NoSQL数据库(例如Redis)用于会话存储,将关系数据库用于存储业务实体等。

因此,简而言之,将不同的数据库类型一起用于构建应用程序而不是所有人都使用一个数据库已成为一种普遍的做法。

结论

NoSQL和关系数据库之间有许多区别。 尽管我们已经讨论了使用NoSQL的一些挑战,但是在某些用例中使用NoSQL有很多好处。

例如,很少有好处包括能够处理大量数据以进行存储,可伸缩性,灵活的数据收集等功能。

因此,在使用NoSQL之前,必须进行足够的背景研究,获取专业知识并拥有开放的思维,这是很重要的,因为无论您的经验如何,都需要学习一些关于数据库的实践。

From: https://hackernoon.com/why-adopting-nosql-is-difficult-for-beginners-511659fb79d9

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值