表是否已打开NoSQL?

2021-01-16 09:46:45

NoSQL在2011年成为系统体系结构中的下一个重要事件,但其总体兴趣近来已趋于平稳。您可能已经听说过它,而忽略了它,因为您可以随时使用SQL命令行,这很安全。但是NoSQL是什么,它与现代开发有什么关系,是否值得在您的项目中实现?

管理大型项目的系统管理员了解有关传统SQL数据库的一些知识。首先,众所周知,它们很难扩展,因此很难在服务或地理区域之间分布数据。单个文件中的一个小错误可能会破坏整个数据库。尽管SQL语句很有趣,但是很容易在删除所有表的同时用键进行注视或使用格式错误的查询破坏整个存储库。

另一方面,NoSQL数据库的目标是通过确保数据以可以在多个服务器之间共享或分片的格式存储,从而确保最终的可伸缩性。 NoSQL数据库比关系数据库(即依赖于跨表共享的各种键的数据库)的线性扩展要远得多。 NoSQL数据库有很多风格:

其中一些甚至以表格格式存储。但是,它们之间的共性是,无论它们以何种格式存储数据,这些数据库都不支持数据之间的关系。

了解NoSQL数据库需要花费一分钟的时间。传统的SQL使用通过ID连接的相关表。单个域实体可能会在多个表之间分散或规范化,这意味着确保记录准确所必需的开销可能很大。 NoSQL允许您创建一个通用的用户对象,该对象包含有关这些用户的所有重要信息,而不是例如一个用于用户ID的表和一个用于地址的表。这样做的好处是您可以轻松地在多个设备之间复制数据库,从而确保了扩展和复制的能力。

此外,NoSQL数据库允许快速访问大量数据。 SQL或关系数据库非常适合数据处理-在数据之间创建精细的连接。 NoSQL数据库非常适合快速查找数据并对其进行操作。几乎没有搜寻;它只是为您提供用户数据。

许多类型的NoSQL数据库都是为快速数据查找而设计的。许多人使用单个值(键,时间戳记,文档)而不是编写复杂的查询,并提取该值下存储的数据。也就是说,如果您希望了解某个用户帐户的详细信息,则可以通过读取该用户的记录来检索所有用户数据。不同记录之间的关系并不重要,并且数据可以更改-一条记录可以容纳多个地址,而另一条记录可以不容纳任何地址。

因为像Google和Amazon这样的公司为自己的海量数据存储创建了这些数据库,所以目标是减少获取数据的时间。实际上,NoSQL放弃了对原子性,一致性,隔离性和持久性(ACID)的传统数据库期望,从而对数据存储的解释更为宽松。

使用NoSQL数据库并不意味着您不能使用SQL。 SQL只是查询语言。实际上,NoSQL和SQL可以互补。某些NoSQL数据库使用SQL搜索数据。可以使用Presto这样的SQL查询引擎来分析那些没有的数据,也可以通过数据管道将其发送到更可分析的数据仓库。公平地说,好的数据管道需要复杂的ETL处理,以使最终数据进入可用状态。

因为SQL数据库使用架构或结构,所以这意味着更改很困难。假设您正在运行一个包含一百万条记录的生产数据库。添加单个字段是一场噩梦,并且可能破坏整个数据库。此外,通过联接连接这些数百万条记录非常昂贵。这意味着当您要查找一些记录和一些表时,可以非常轻松地搜索特定数据并将其与另一数据连接。但是,将其乘以,您会头疼。

像MongoDB这样的NoSQL数据库仅获取数据并将其存储。要添加一个字段吗?将其添加到存储的下一条记录中。要忽略一个字段吗?只是不读。例如,您可以将多个地址添加到用户记录,也可以不添加。您可以添加姓氏,也可以避免添加姓氏。而且,由于可以分拆数据,因此可以将一些数据发送到不受信任管辖区中的服务器,并将其他数据发送到受信任管辖区中。数据库将每个块视为整体的一部分。

查询数据有点困难。 Apache的Cassandra使用Cassandra查询语言或CQL,有趣的是,该语言不允许联接。 MongoDB只是发送JSON对象以响应请求。需要俄亥俄州的所有用户吗? MongoDB发送大量数据。是否要删除西班牙的所有用户? MongoDB将运行搜索并执行操作。

此外,无需对每个服务器执行ping操作即可获取一条数据。最近的服务器将不与其他服务器共享任何内容,而是返回其所拥有的内容。在某些时候,所有数据都会复制,但是每个服务器都处于真空状态。这意味着更改一台服务器上的记录不会影响在另一台服务器上进行的查询。

NoSQL数据库(最流行的是MongoDB)非常适合扩展。由于数据库使用分片对多台计算机上的数据进行分区,因此可以确保在正确的时间将正确的数据放置在正确的位置。此外,一台计算机的故障不会破坏整个网络。随着数据的增长,数据库可以根据需要简单地扩展到另一台设备,如果情况变慢,则可以缩小。例如,您还可以将特定于地理位置的数据存储在特定于地理位置的服务器中,以确保来自特定国家/地区的呼叫可以更快地处理特定于该国家/地区的数据。

接下来,NoSQL数据库提供高可用性。因为数据只是一个文件,所以您可以从网络上的其他服务器复制备份。如果服务器发生故障,则另一台服务器可以接管该服务器的分片并将其合并。数据是不断复制和安全的。

NoSQL数据库在事务管理或实际编码方面没有提供太多功能。它们非常适合存储每次交易中变化不大或变化很小的数据。 NoSQL系统一直使新用户难以接受。尽管可以使用托管解决方案,但是运行自己的简单实例并不像启动MySQL服务器那样容易。

最后,由于整个数据库可以有很多重复的数据,因此实际数据库很大。 NoSQL数据库的类型很多,其中基于文档的解决方案最为普遍。但是,您还可以使用键值数据库(例如Redis)以及表格数据库(例如Hbase和Acculuo)。

像Redis这样的基于密钥的解决方案对于管理员来说是有点熟悉的,并且Redis特别出色,因为它将其大部分数据存储在内存中。根据文档,像Hbase这样的表格数据库提供的系统稍有不同,该系统着重于“非常大的表-数十亿行X数百万列-在商品硬件群集之上”。

如果NoSQL提供了这么多的自由和灵活性,为什么不完全放弃SQL?简单的答案:许多应用程序仍然需要SQL数据库提供的约束,一致性和保护措施。在那些情况下,NoSQL的某些“优势”可能会变成劣势。

长期以来,传统的关系数据库赶上了某些NoSQL数据库所承诺的新颖性。他们已经大大改善了分片功能,因此您不再局限于垂直扩展。他们引入了更宽松的数据类型。您可以立即将JSON存储在PostgreSQL,MySQL,SQL Server中,为您提供类似MongoDB的体验。

NoSQL数据库存在许多问题,第一个问题是缺少可以维护它们的系统管理员。实施NoSQL数据库是一项真正的工作,选择合适的提供程序和管理者很困难。如果您需要庞大的数据库,则可以通过财务来支付这些专业知识,但是较小的公司可能需要等待。

此外,对于习惯于为SQL系统编码的开发人员,了解NoSQL模型是困难的。由于许多结构必须在应用程序中发生,因此开发人员可以进入开发项目,期望能够满足某些约束或错误导致重复行。相反,必须在应用程序本身中管理此逻辑。 NoSQL解决方案提供了更快,性能更高的数据存储,仅此而已。您(开发人员)必须介入以管理各种关系。

最后,由于NoSQL不一致,因此如果出现问题,则无法回滚。此外,数据库的某些部分可能返回不一致的信息-专家提供的一个示例是,SQL数据库将始终返回正确的银行余额,而NoSQL解决方案可能会根据服务器返回不同的余额。如果听起来很吓人,您可能要重新考虑您的选择。在现实生活中,当您在亚马逊等电子商务网站上搜索订单时,就会发生这种情况。在某些情况下,数据需要花费几秒钟的时间显示,因为必须在整个网络中进行填充。

首先,我们必须记住NoSQL数据库可能对Amazon和Google很有用,但对您的忙碌却不是那么好。数据库规模越大,性能优势越明显。实施它们听起来很有趣,这是一种熟悉全新技术的好方法,但是您可以通过阅读一些常见问题解答并亲自尝试安装MongoDB来实现。对于小型电子商务网站或推荐引擎使用NoSQL解决方案可能效果不佳。在会议和博客上已经达成共识,认为SQL是黄金标准-着重于PostgeSQL-您应该默认使用它,只有在您有充分理由使用NoSQL的情况下才应使用。

就是说,需要NoSQL提供这种速度的大公司使用这些数据库,并且需要NoSQL技能。如果您可以支持其他人的NoSQL数据库,则可以赚到不错的薪水。当您准备在端项目中或在大型数据存储上实施自己的NoSQL解决方案时,您将充分了解其优缺点,并且用肯尼·罗杰斯(Kenny Rogers)的话来说,您会知道何时分片,知道何时加入它们,知道何时使用模式,何时不使用模式。

标签:数据库,noSQL