Deprecated: imwpcache\f884414bce24ee67f\f73723ec7b1919fa5::__construct(): Implicitly marking parameter $YECBGYFECGEAFWHA as nullable is deprecated, the explicit nullable type must be used instead in /www/wwwroot/www.chuangxiangniao.com/wp-content/plugins/imwpcache-dist/build/f884414bce24ee67ff73723ec7b1919fa5.php on line 2

Deprecated: imwpcache\f884414bce24ee67f\f73723ec7b1919fa5::__construct(): Implicitly marking parameter $BBWFDDBHHYHDXXAB as nullable is deprecated, the explicit nullable type must be used instead in /www/wwwroot/www.chuangxiangniao.com/wp-content/plugins/imwpcache-dist/build/f884414bce24ee67ff73723ec7b1919fa5.php on line 2
MongoDB简单调研_创想鸟

MongoDB简单调研

下面我以mongodb为例,展现一些他的特性和场景,期待NoSQL在当下能被更多的开发者拿来一显身手。mongodb的索引同样也是B树,在一

背景

一直受传统RDB的影响,对于数据库表的设计可能大多数开发者都形成了思维定势。在云计算和大数据背景下,RDBMS正在接近极限,KV存储将受到越来越多的关注。学习NoSQL,不求能革RDBMS的命,但希望在设计思路上能得到一些拓宽,很多场景里,SQL表的设计和计算语句其实蛮难受的。

RDBMS天生不是分布式的,因其保持着ACID的特性发展至今,非常重视数据完整性,,但在机器规模增长的情况下,ACID是不可扩展的。同时,随着数据量和访问频率增加,ACID所要维护的开销在增大。分割数据库,无论水平还是垂直,都是在分散总数据和读取需求,达到优化目的,维护代价和难度也随之上升。而KV的查找本质是散列表,且数据量无论如何增大,查找时间几乎固定不变,即非常适合大规模数据。ACID很注重CAP中的C,而参考现实世界中很多事务,比如快递,从你下单、付款到取货,资金和物品的流转并不严格一致,只要在一段时间内整个交易的最后结果满足一致性就可以了。同样,NoSQL和RDBMS比,更偏向于BASE(Basically Available, Soft-state, Eventually consistent)的折中,重视可用性,但不追求状态的严密性,且满足最终一致性。下面我以mongodb为例,展现一些他的特性和场景,期待NoSQL在当下能被更多的开发者拿来一显身手。

mongodb与RDBMS

mongodb是面向文档的nosql,CouchDB则是这一类数据库的元祖。从总体上看,

mongodb是最亲和RDBMS的一个NoSQL,能解决大部分关系型数据库解决的问题

跟面向列存储的HBase相比,面向文档存储和面向行存储更接近,比如在没有索引的情况下,扫描整个表内记录,同样是扫描全文档,及文档的每个字段

mongodb的索引同样也是B树,在一些索引的优化和设计上会和MySQL比较相似(当然需要遵循mongo的设计来做,不完全划等号)

你可以把mongodb拿RDBMS一样来使用(当然不推荐这么做),无非是将一行记录变成mongodb里的json对,在document(相当于mysql的table)之间,也可以做类似外键一样的引用

mongodb虽然没有严格的事务性操作,但是开发者自己可以做到类似事务的效果。这一点也算是mongodb贴近RDBMS的一个表现吧。

以下会从各个主要关注点来展开mongo的特性,展现角度更偏向于想要调研使用mongodb的人,看看mongodb是否符合自己的业务场景,也希望我的分析会有所帮助。

存储结构怎么样

Mongodb的存储类似JSON,每个db内有多个collection,相当于table,每个collection内是许许多多的document,这个document的schemeless的。本质上,他的面向文档指的是key-value中的value,而这个value可以是一个值(引用id或基本类型),可以是一个数组,也可以是一个文档(嵌套的json对)。

一对多是最常遇到的场景,mysql中要使用两张或以上表的关联甚至join进行查询,在mongo中直接使用嵌套型或引用型(用id)就可以了。没有特殊需求的话,嵌套的方式只要一张”表”就可以实现。比如我这样建立一个人的信息:

{
    id : 1,
    name : “pelick”,
    hobbies : {
        “GameA”, “GameB”, “GameC”
    },
    friends : {
        male : {
              2, 3, 4 # id refer to other person
        },
        female : {
            {
                  name : “Rita”,
                  hobbies : { “dancing” }
            },
            {
                  name : “Kaka”,
                  nickname : “Riva”
            }
          }
      }
}

AI智研社 AI智研社

AI智研社是一个专注于人工智能领域的综合性平台

AI智研社 15 查看详情 AI智研社

上述这样的结构中,展现了无模式、value为数组、嵌套、引用等。

处理好多对多的关系可谓是NoSQL的精髓所在。理论上,可以在一个集合中完成存储。不过实际上这样的情况非常罕见。这是由于查询的多样性所导致的,若是只有一种类型的查询,则这种多对多的关系放在一个良好设计的集合中,虽然会有大量的冗余,但是效率一定是最高的。如何设计这种数据库的关键就是看你有多少种查询,每一种的频率是多少,使用的其他要求是什么样的。对于不同的查询,同样的数据库设计的性能也是大不一样。还有一点,一般不要拆成三个集合,这是传统的关系型数据库的思维方式。而常见的情况就是拆成两个集合,然后有一部分冗余,对最常用的查询做一个索引。

总结就是两张表,一张里面存了另外一张里的id集合,有冗余存放,主要是根据查询场景设计和建索引,不要和RDBMS一样变三张。此外还有个好处是可以进行正反向查询,在各自的字段里加上id数组。

接下来请看第2页精彩内容:

推荐阅读:

 

CentOS编译安装MongoDB

 

CentOS 编译安装 MongoDB与mongoDB的php扩展

CentOS 6 使用 yum 安装MongoDB及服务器端配置

Ubuntu 13.04下安装MongoDB2.4.3

如何在MongoDB中建立新数据库和集合

MongoDB入门必读(概念与实战并重)

linux

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/551860.html

赞 (0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
苹果手机如何查看私密相册
上一篇 2025年11月9日 20:30:05
Meta发布前沿AI框架:会暂停开发其认为风险过高的AI系统
下一篇 2025年11月9日 20:30:06

相关推荐

  • Oracle如何修改时间格式?

    Oracle如何修改时间格式?Oracle如何修改时间格式?Oracle如何修改时间格式?Oracle如何修改时间格式?

    Oracle数据库中时间格式的修改在实际的开发中非常常见,本文将介绍Oracle数据库中如何修改时间格式,并提供具体的代码示例。 在Oracle数据库中,时间数据类型主要有DATE和TIMESTAMP两种类型,其中DATE类型存储日期和时间,而TIMESTAMP类型可以存储更高精度的时间信息。在进行…

    2026年9月28日 • 用户投稿
    200
  • linux开发vm虚拟机开发环境共享

    经过一段时间的沉寂,我终于抽出时间来整理了一个非常有用的工具。这款工具主要面向使用golang、php和java的linux开发环境。尽管java开发者通常使用图形界面工具进行开发,这里就不详细讨论了,但对于golang或php开发者来说,拥有一个与线上环境相似的linux开发虚拟机是非常必要的,因…

    2026年9月28日
    100
  • web服务组件基础入门笔记小结

    web服务组件基础入门笔记小结web服务组件基础入门笔记小结web服务组件基础入门笔记小结web服务组件基础入门笔记小结

    web开发语言包括php、asp.net、jsp等,涵盖了多种用于构建web应用的编程语言。 Web服务系统主要分为Windows和Linux两大类。Windows系统代表有Windows 2003和Windows 2008,常见漏洞包括“永恒之蓝”(MS17-010)和MS08-067(虽然过时但…

    2026年9月28日 • 用户投稿
    100
  • 深入理解RESTful API的无状态性与数据持久化实践

    深入理解RESTful API的无状态性与数据持久化实践深入理解RESTful API的无状态性与数据持久化实践深入理解RESTful API的无状态性与数据持久化实践深入理解RESTful API的无状态性与数据持久化实践

    本教程深入探讨RESTful API的无状态性核心原则,阐明为何不应在服务器内存中维护跨API调用的数据状态。我们将详细介绍RESTful架构的无状态约束,分析在服务器端存储会话或资源状态的弊端,并推荐使用数据库等外部持久化机制来可靠地管理数据,确保API的可伸缩性、可靠性和一致性。 理解RESTf…

    2026年9月28日 • 用户投稿
    100
  • REST API设计原则:理解无状态性与持久化数据管理

    REST API设计原则:理解无状态性与持久化数据管理REST API设计原则:理解无状态性与持久化数据管理REST API设计原则:理解无状态性与持久化数据管理REST API设计原则:理解无状态性与持久化数据管理

    在REST API设计中,跨不同API调用维护服务器端变量(如用户列表)的内存状态与REST的无状态原则相悖。RESTful服务应将每个请求视为独立的事务,不依赖服务器端会话状态。对于需要持久化的数据,应采用数据库、文件系统等外部存储机制,而非在内存中直接维护,以确保系统的可伸缩性、可靠性和一致性。…

    2026年9月28日 • 用户投稿
    200
  • linux jar包怎么运行

    linux jar包怎么运行linux jar包怎么运行linux jar包怎么运行linux jar包怎么运行

    在 Linux 上运行 JAR 包需遵循以下步骤:安装 Java 运行时环境打开终端并导航到 JAR 包所在目录使用 java -jar jar-file-name.jar 命令运行 JAR 包处理 JAR 包的依赖项(如使用类路径、清单文件或模块系统)解决常见问题(例如 Java 找不到、权限问题…

    2026年9月28日 • 用户投稿
    000
  • 乌鲁木齐银行定向采购 Oracle、IBM、Redhat

    2022年2月18日,乌鲁木齐银行发布《正版oracle软件采购项目》公开询价公告,控制价 283 万元。 采购内容:主要目标为以数量授权模式采购,采购Oracle数据库6C,Oracle weblogic 4C,Oracle集群2C,Oracle ADG 2C。 2022年3月1日发布成交公告,新…

    2026年9月28日
    000
  • Oracle服务类型及功能特点概述

    Oracle服务类型及功能特点概述Oracle服务类型及功能特点概述Oracle服务类型及功能特点概述Oracle服务类型及功能特点概述

    Oracle是世界领先的企业级数据库管理系统厂商,其产品服务种类繁多,功能强大,广泛应用于各行各业。本文将就Oracle的服务类型及功能特点进行概述,并提供一些具体的代码示例,方便读者更好地理解。 一、Oracle服务类型及功能特点概述 Oracle数据库服务类型: Oracle数据库服务主要包括O…

    2026年9月27日 • 用户投稿
    100
  • 如何识别Oracle数据库中的表锁定情况

    如何识别Oracle数据库中的表锁定情况如何识别Oracle数据库中的表锁定情况如何识别Oracle数据库中的表锁定情况如何识别Oracle数据库中的表锁定情况

    在Oracle数据库中,表锁定是一种常见的数据库操作情况,当一个会话正在操作某个表时,如果另一个会话也想对同一张表进行操作,就会发生表锁定。表锁定可能会导致数据库性能下降,甚至引发死锁等问题。因此,及时识别和解决表锁定情况对于保证数据库正常运行至关重要。 在Oracle数据库中,可以通过查询Orac…

    2026年9月27日 • 用户投稿
    000
  • Oracle 数据库表空间查询方法详解

    Oracle 数据库表空间查询方法详解Oracle 数据库表空间查询方法详解Oracle 数据库表空间查询方法详解Oracle 数据库表空间查询方法详解

    Oracle 数据库表空间查询方法详解 在使用 Oracle 数据库时,了解数据库表空间是非常重要的。表空间是 Oracle 数据库中用来存储表和索引数据的逻辑结构,它相当于数据库中数据存储的物理组织单元。在进行数据库管理和性能优化时,经常需要查询和了解表空间的使用情况。本文将详细介绍 Oracle…

    2026年9月27日 • 用户投稿
    100
  • Oracle数据库操作指南:快速创建查询用户

    Oracle数据库操作指南:快速创建查询用户Oracle数据库操作指南:快速创建查询用户Oracle数据库操作指南:快速创建查询用户Oracle数据库操作指南:快速创建查询用户

    Oracle数据库操作指南:快速创建查询用户 在Oracle数据库中,为了提高数据库管理的效率和安全性,通常会为不同的用户分配不同的权限和角色。为了在数据库中创建一个具有查询权限的用户,以下是一些具体的代码示例和步骤: 步骤一:登录到Oracle数据库首先,使用管理员权限的用户登录到Oracle数据…

    2026年9月27日 • 用户投稿
    200
  • Oracle数据库性能调优实战技巧

    Oracle数据库性能调优实战技巧Oracle数据库性能调优实战技巧Oracle数据库性能调优实战技巧Oracle数据库性能调优实战技巧

    标题:Oracle数据库性能调优实战技巧 在当今信息时代,数据库已经成为企业数据存储和管理不可或缺的重要组成部分。而Oracle作为业界领先的关系数据库管理系统(RDBMS),在企业中应用广泛。然而,随着数据量的不断增加,数据库性能的优化变得尤为重要。本文将介绍一些Oracle数据库性能调优的实战技…

    2026年9月27日 • 用户投稿
    100
  • Oracle函数的定义和用途深度解析

    Oracle函数的定义和用途深度解析Oracle函数的定义和用途深度解析Oracle函数的定义和用途深度解析Oracle函数的定义和用途深度解析

    Oracle函数是数据库中一种非常重要的对象,它可以接收输入参数并返回一个值。在Oracle中,函数通常用于封装一些公共的逻辑或计算操作,以便在不同的地方重复使用。本文将深度解析Oracle函数的定义和用途,并提供具体的代码示例。 1. Oracle函数的定义 在Oracle数据库中,函数是一种存储…

    2026年9月27日 • 用户投稿
    000
  • Oracle 表空间查询:查看表所在的表空间

    Oracle 表空间查询:查看表所在的表空间Oracle 表空间查询:查看表所在的表空间Oracle 表空间查询:查看表所在的表空间Oracle 表空间查询:查看表所在的表空间

    标题:Oracle 表空间查询:查看表所在的表空间,需要具体代码示例 Oracle数据库是企业级数据库管理系统中常用的一种,其中表空间是数据库中存储数据的逻辑结构,表空间在数据库中起着重要的作用。在Oracle数据库中,要查看表所在的表空间,可以通过执行SQL语句来实现。以下将介绍如何查询表所在的表…

    2026年9月27日 • 用户投稿
    100
  • Oracle数据库优化策略详解

    Oracle数据库优化策略详解Oracle数据库优化策略详解Oracle数据库优化策略详解Oracle数据库优化策略详解

    Oracle数据库优化策略详解 在当今数据爆炸的时代,数据库作为数据存储和管理的关键角色,其性能优化显得尤为重要。Oracle数据库作为世界上应用最广泛的企业级数据库之一,优化其性能无疑将带来巨大的收益。在本文中,我们将深入探讨Oracle数据库优化的策略,并提供具体的代码示例,助您更好地理解和应用…

    2026年9月27日 • 用户投稿
    100
  • Oracle数据库版本更新速览:了解最新的Oracle版本特点

    Oracle数据库版本更新速览:了解最新的Oracle版本特点Oracle数据库版本更新速览:了解最新的Oracle版本特点Oracle数据库版本更新速览:了解最新的Oracle版本特点Oracle数据库版本更新速览:了解最新的Oracle版本特点

    Oracle数据库版本更新速览:了解最新的Oracle版本特点,需要具体代码示例 Oracle数据库一直是企业级数据库管理系统领域的领头羊,持续不断地更新版本以提供更好的性能、安全性和功能。本文将带您速览最新的Oracle数据库版本,探讨其特点,并通过具体的代码示例展示其应用。 1. Oracle …

    2026年9月27日 • 用户投稿
    100
  • Oracle数据库:一个用户是否可以拥有多个表空间?

    Oracle数据库:一个用户是否可以拥有多个表空间?Oracle数据库:一个用户是否可以拥有多个表空间?Oracle数据库:一个用户是否可以拥有多个表空间?Oracle数据库:一个用户是否可以拥有多个表空间?

    Oracle数据库是一种常用的关系型数据库管理系统,许多用户都会遇到关于表空间的使用问题。在Oracle数据库中,一个用户可以拥有多个表空间,这样可以更好地管理数据存储和组织。本文将探讨一个用户如何在Oracle数据库中拥有多个表空间,并提供具体的代码示例。 在Oracle数据库中,表空间是用来存储…

    2026年9月27日 • 用户投稿
    100
  • Oracle用户登录异常,故障排查攻略

    Oracle用户登录异常,故障排查攻略Oracle用户登录异常,故障排查攻略Oracle用户登录异常,故障排查攻略Oracle用户登录异常,故障排查攻略

    故障排查攻略:Oracle用户登录异常 在进行数据库管理与运维过程中,Oracle作为一款广泛使用的数据库管理系统,经常会遇到用户登录异常的情况,可能会给数据库管理带来一定的困扰。因此,本文将分享Oracle用户登录异常的排查攻略,并提供具体的代码示例,帮助读者快速定位与解决问题。 一、排查策略 当…

    2026年9月27日 • 用户投稿
    000
  • SpringCloud 2025微服务架构实战:实现99.99%高可用性的5个关键设计

    SpringCloud 2025微服务架构实战:实现99.99%高可用性的5个关键设计SpringCloud 2025微服务架构实战:实现99.99%高可用性的5个关键设计SpringCloud 2025微服务架构实战:实现99.99%高可用性的5个关键设计SpringCloud 2025微服务架构实战:实现99.99%高可用性的5个关键设计

    要实现99.99%高可用,需融合多区域部署、熔断限流、异步通信、高可用数据存储与自动化运维;通过地理冗余防止单点故障,利用Resilience4j等工具实现服务自我保护,采用消息队列解耦服务并保障最终一致性,确保数据库、缓存、消息队列集群化部署,并依托监控、日志、自动化运维实现快速恢复,构建具备韧性…

    2026年9月27日 • 用户投稿
    100
  • Oracle API使用指南:探索数据接口技术

    Oracle API使用指南:探索数据接口技术Oracle API使用指南:探索数据接口技术Oracle API使用指南:探索数据接口技术Oracle API使用指南:探索数据接口技术

    Oracle是一家全球知名的数据库管理系统提供商,其API(Application Programming Interface,应用程序接口)是一种强大的工具,可帮助开发人员轻松地与Oracle数据库进行交互和集成。在本文中,我们将深入探讨Oracle API的使用指南,向读者展示如何在开发过程中利…

    2026年9月26日 • 用户投稿
    000

发表回复

登录后才能评论
关注微信