SQL vs nosql:如何选择
钥匙要点
-
SQL数据库非常适合具有定义明确的,相关的数据要求以及数据完整性至关重要的项目。它们通常用于在线商店和银行系统。 NOSQL数据库更适合具有无关,不断发展或不确定的数据要求的项目,而速度和可扩展性是关键的。它们通常用于社交网络,客户管理和Web分析系统。
NOSQL数据库在数据存储方面具有灵活性,允许随意添加或删除字段。他们将有关个人的所有数据存储在单个文档中,从而使数据检索和全文搜索更加简单。但是,他们没有实施数据完整性规则或支持多个文档的交易。
- > SQL数据库对于需要强大的数据完整性和交易支持(例如仓库管理系统)是必需的。他们将相关数据存储在表中,在使用之前需要一个模式,并支持表加入。但是,该模式是刚性的,数据可能会分散,这使开发人员或系统管理员检查数据库的具有挑战性。
- 在上一篇文章中,我们讨论了SQL和NOSQL数据库之间的主要差异。在此后续行动中,我们将把知识应用于特定方案,并确定最佳选择。 回顾: SQL数据库:
- 在表中存储相关数据
- 之前定义表的架构
- 鼓励归一化以减少数据冗余
- 支持表连接以从单个命令中的多个表中检索相关数据 实施数据完整性规则
- 提供交易,以确保两个或更多更新成功或失败,因为原子单位
- > 可以缩放(一定的努力)
- > 使用强大的声明语言来查询
- 提供大量的支持,专业知识和工具。
- NOSQL数据库:
- 在类似JSON的名称值文档中存储相关数据
- 可以存储数据而无需指定模式
- >通常必须将其义词化,以便有关项目的信息包含在单个文档中
- 不需要加入(使用符合的文档) 允许随时保存任何数据,而无需验证
- 保证对单个文档的更新 - 但不能多个文档
- 提供出色的性能和可伸缩性
- >使用JSON数据对象进行查询
- 是一项更新,令人兴奋的技术。
-
SQL是数字的。它最适合具有确切规格的明确定义的离散项目。典型的用例是在线商店和银行系统。
- > NoSQL是类似物。它最适合具有流体需求的有机数据。典型的用例是社交网络,客户管理和Web分析系统。
- 很少有项目完全合适。如果您拥有较浅或自然的数据规范化数据,则两种选项都可可行。但是,请注意这些简化的示例场景,并具有广泛的概括!您比我更了解您的项目,而且我不建议您从SQL切换到NOSQL,反之亦然,除非它提供了相当大的好处。这是您的选择。考虑项目开始时的利弊,您不会出错。 方案一:联系人列表
id
- >标题
- > firstName
- > lastname
- 性别
- >电话
- 电子邮件
- 地址1
- 地址2
- 地址3
- 城市
- 区域
- > zipcode
- 国家
- 问题一:
- 很少有人有一个电话号码。我们可能至少需要三个土地线,移动和工作场所,但是我们分配多少人都不重要 - 某人,某个地方会想要更多。让我们创建一个单独的电话表,以便触点可以随心所欲。这也使我们的数据归一化 - 我们不需要无数的联系人null:
- (诸如土地线,移动工作等文本)
- 数字
- >问题二:我们在电子邮件地址遇到同样的问题,因此让我们创建一个类似的电子邮件表:
- contact_id
- >问题三:
- >我们可能不希望输入(地理)地址,或者我们可能希望输入多个工作,家庭,度假屋等多个地址。因此,我们需要一个新的地址表: contact_id
- 名称 (诸如家庭,办公室等文本)
- 地址3
- 城市 区域
- > zipcode
- 国家
- 我们的原始联系表已减少为:
- id
- > firstName
- > lastname
- 性别
在此示例中,我们尚未存储联系人的标题或性别,并且添加了不需要适用于其他任何人的数据。没关系 - 我们的NOSQL数据库不会介意,我们可以随意添加或删除字段。 由于联系人的数据包含在单个文档中,因此我们可以使用单个查询来检索一些或所有信息。全文搜索也更简单;在MongoDB中,我们可以在所有触点上定义一个索引 文本字段使用:
然后使用以下方式执行全文搜索<span>{ </span> <span>name: [ </span> <span>"Billy", "Bob", "Jones" </span> <span>], </span> <span>company: "Fake Goods Corp", </span> <span>jobtitle: "Vice President of Data Management", </span> <span>telephone: { </span> <span>home: "0123456789", </span> <span>mobile: "9876543210", </span> <span>work: "2244668800" </span> <span>}, </span> <span>email: { </span> <span>personal: "bob@myhomeemail.net", </span> <span>work: "bob@myworkemail.com" </span> <span>}, </span> <span>address: { </span> <span>home: { </span> <span>line1: "10 Non-Existent Street", </span> <span>city: "Nowhere", </span> <span>country: "Australia" </span> <span>} </span> <span>}, </span> <span>birthdate: <span>ISODate</span>("1980-01-01T00:00:00.000Z"), </span> <span>twitter: '@bobsfakeaccount', </span> <span>note: "Don't trust this guy", </span> <span>weight: "200lb", </span> <span>photo: "52e86ad749e0b817d25c8892.jpg" </span><span>}</span>
登录后复制
登录后复制
db<span>.contact.createIndex({ "$**": "text" });</span>
登录后复制
db<span>.contact.find({ </span> <span>$text: { $search: "something" } </span><span>});</span>
登录后复制
大多数数据更新都有一个原始点:用户。我们不太可能一次更新两个或多个记录,因此不需要类似于交易的功能。
- >
- 尽管有些用户可能会想到,但状态更新失败不太可能导致全球崩溃或财务损失。该应用程序的界面和性能比强大的数据完整性更高。 NOSQL似乎很合适。该数据库允许我们快速实施存储不同类型数据的功能。例如,所有用户的日期状态更新都可以放在状态集合中的单个文档中:
<span>{ </span> <span>name: [ </span> <span>"Billy", "Bob", "Jones" </span> <span>], </span> <span>company: "Fake Goods Corp", </span> <span>jobtitle: "Vice President of Data Management", </span> <span>telephone: { </span> <span>home: "0123456789", </span> <span>mobile: "9876543210", </span> <span>work: "2244668800" </span> <span>}, </span> <span>email: { </span> <span>personal: "bob@myhomeemail.net", </span> <span>work: "bob@myworkemail.com" </span> <span>}, </span> <span>address: { </span> <span>home: { </span> <span>line1: "10 Non-Existent Street", </span> <span>city: "Nowhere", </span> <span>country: "Australia" </span> <span>} </span> <span>}, </span> <span>birthdate: <span>ISODate</span>("1980-01-01T00:00:00.000Z"), </span> <span>twitter: '@bobsfakeaccount', </span> <span>note: "Don't trust this guy", </span> <span>weight: "200lb", </span> <span>photo: "52e86ad749e0b817d25c8892.jpg" </span><span>}</span>
登录后复制
登录后复制
考虑一个监视仓库商品的系统。我们需要记录:
- >到达仓库并分配给特定位置/海湾
- 的产品 仓库内的货物运动,例如重新安排库存,因此相同的产品在相邻的位置
- 订单和随后从仓库中删除产品以进行交付。
- 我们的数据要求: 可以存储
- >必须最大程度地减少错误。我们不能让产品消失或移至已经存储不同产品的位置。
- > 以最简单的形式,我们正在记录项目从一个物理区域到另一个物理区域的转移 - 或从位置A删除并放置位置B。这是相同动作的两个更新。
揭露自己!
我希望这些方案有所帮助,但是每个项目都不同,最终您需要做出自己的决定。 (尽管我们的开发人员都擅长证明我们的技术选择,而不管他们有多好!)) 最佳建议:使自己了解尽可能多的技术。这些知识将使您对SQL或NOSQL做出理性和情感公正的判断。祝您好运。经常询问有关SQL vs nosql
的问题(常见问题解答)> SQL和NOSQL数据库之间的关键差异是什么?
sql和NOSQL数据库在几种方面有所不同。 SQL数据库是关系的,这意味着它们在表和行中组织了数据。他们使用结构化查询语言(SQL)来定义和操纵数据。另一方面,NOSQL数据库是非依赖的,可以以几种方式存储数据:基于文档的,基于列,基于图形或键值对。它们对于使用大量分布式数据特别有用。>我何时应该在nosql? sql数据库上使用SQL,当您具有清晰的架构并且数据完整性为时是一个不错的选择最重要的。当您需要执行复杂的查询时,它们也很有益。 SQL数据库是酸性的,可确保可靠的交易。>
何时NOSQL比SQL? nosql数据库是一个更好的选择。随着时间的流逝不清楚或变化。它们提供了灵活性,可伸缩性和速度,使其成为实时应用程序和大数据的理想选择。>
有哪些流行的SQL和NOSQL数据库?什么是CAP定理,它如何适用于SQL和NOSQL?
cap定理指出,分布式数据存储不可能同时提供以下三个保证中的两个以上的保证:一致性,可用性,可用性,可用性和分区耐受性。 SQL数据库优先级一致性和可用性,而NOSQL数据库优先考虑可用性和分区耐受性。>
> sql和nosql如何处理交易?用于交易。另一方面,NOSQL数据库通常不提供所有酸性。取而代之的是,他们专注于基础(基本上可用,柔软的状态,最终是一致)。行交易,例如会计系统或需要复杂查询的系统。 NOSQL数据库非常适合需要处理大量数据并水平扩展的应用程序,例如内容管理系统,实时分析和IoT应用程序。
以上是SQL vs nosql:如何选择的详细内容。更多信息请关注PHP中文网其他相关文章!
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章
R.E.P.O.能量晶体解释及其做什么(黄色晶体)
1 个月前
By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
1 个月前
By 尊渡假赌尊渡假赌尊渡假赌
刺客信条阴影:贝壳谜语解决方案
2 周前
By DDD
R.E.P.O.如果您听不到任何人,如何修复音频
1 个月前
By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.聊天命令以及如何使用它们
1 个月前
By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

热门话题

网站建设只是第一步:SEO与反向链接的重要性 建立网站只是将其转化为宝贵营销资产的第一步。您需要进行SEO优化,以提高网站在搜索引擎中的可见度,吸引潜在客户。反向链接是提升网站排名的关键,它向谷歌和其他搜索引擎表明您的网站权威性和可信度。 并非所有反向链接都有利:识别并避免有害链接 并非所有反向链接都有益。有害链接会损害您的排名。优秀的免费反向链接检查工具可以监控链接到您网站的来源,并提醒您注意有害链接。此外,您还可以分析竞争对手的链接策略,从中学习借鉴。 免费反向链接检查工具:您的SEO情报员

此基于GO的网络漏洞扫描仪有效地确定了潜在的安全弱点。 它利用了GO的并发功能的速度功能,包括服务检测和漏洞匹配。让我们探索它的能力和道德

该试点程序是CNCF(云本机计算基础),安培计算,Equinix金属和驱动的合作,简化了CNCF GitHub项目的ARM64 CI/CD。 该计划解决了安全问题和绩效
