概述

MongoDB是一个跨平台,面向文档的数据库。MongoDB创建的数据库可以实现高可用性,高性能,并且能够轻松拓展。 MongodbDB的运行方式主要给予两个概念:集合(collection)和文档(document)

数据库

数据库就是集合的实际容器

集合

集合就是一组MongoDB文档,相当于关系型数据库的表。

文档

文档就是一组键-值对,类似于JSON对象。文档有着动态的模式,这意味着同一集合内的文档不需要具有同样的字段或结构。

关系型数据库与MongoDB数据库在一些术语上的对比

位的字符串,由一组十六进制的字符组成,每个字节两位的十六进制数字,总共用了12字节的存储空间。保障了数据库文档的唯一性!

官方针对ObjectId的规范

  • 位进行提取,然后按照十六进制转为十进制,这个数字就是一个时间戳。
  • Machine 机器。接下来的三个字节就是所在主机的唯一标识符,一般是机器主机名的散列值,这样就确保了不同主机生成不同的机器hash值,确保在分布式中不造成冲突,这也就是在同一台机器生成的objectId中间的字符串都是一模一样的原因。
  • PID 进程ID。上面的Machine是为了确保在不同机器产生的objectId不冲突,而pid就是为了在同一台机器不同的mongodb进程产生了objectId不冲突,接下来的两位就是产生objectId的进程标识符。
  • 的3次方等于16777216条记录的唯一性。

private static readonly int __staticMachine = (GetMachineHash() + GetAppDomainId()) & 0x00ffffff;

private static readonly short __staticPid = GetPid();

private static int __staticIncrement = (new Random()).Next();

 

// public static methods

/// <summary>

/// Generates a new ObjectId with a unique value.

/// </summary>

/// <returns>An ObjectId.</returns>

public static ObjectId GenerateNewId()

{

    return GenerateNewId(GetTimestampFromDateTime(DateTime.UtcNow));

}

 

/// <summary>

/// Generates a new ObjectId with a unique value (with the timestamp component based on a given DateTime).

/// </summary>

/// <param name="timestamp">The timestamp component (expressed as a DateTime).</param>

/// <returns>An ObjectId.</returns>

public static ObjectId GenerateNewId(DateTime timestamp)

{

    return GenerateNewId(GetTimestampFromDateTime(timestamp));

}

 

/// <summary>

/// Generates a new ObjectId with a unique value (with the given timestamp).

/// </summary>

/// <param name="timestamp">The timestamp component.</param>

/// <returns>An ObjectId.</returns>

public static ObjectId GenerateNewId(int timestamp)

{

    int increment = Interlocked.Increment(ref __staticIncrement) & 0x00ffffff; // only use low order 3 bytes

    return new ObjectId(timestamp, __staticMachine, __staticPid, increment);

}

 

MongoDB 支持如下数据类型:

字节的唯一 ID,

{"Key" :ObjectId() }

Boolean

布尔值。用于存储布尔值(真/假)。

{"Key":false}

Date

日期时间。用 UNIX 时间格式来存储当前日期或时间。你可以指定自己的日期时间:创建 Date 对象,传入年月日信息。

{"Key" : new Date()}

Timestamp

时间戳。记录文档修改或添加的具体时间。

{"Key":new Timestamp()}

Regular Expression

正则表达式类型。用于存储正则表达式

采用JavaScript的正则表达式语法:{"Key":/[0-9]{1,2}/}

MaxKey

BSON包括一个特殊类型,表示可能的最大值。

mongodb shell不支持

注意事项:

  • MongoDB不支持表联查(Join)操作,如有相应需求建议通过内嵌文档实现!
  • mongodb 是默认区分大小写的,建议mongodb 的表名和字段名都用小写字母命名
  • 尽量缩短字段名称的长度,由于MongoDB机制的问题导致每笔数据在存储时都会保存他的Key和Value,这样就造成了大量的数据冗余,对应的存储也占用较大的空间
  • ,索引名的长度不能超过125个字符,一个符合索引最多只能有31个

 

MongoDB学习笔记——概述的更多相关文章

  1. MongoDB学习笔记系列

    回到占占推荐博客索引 该来的总会来的,Ef,Redis,MVC甚至Sqlserver都有了自己的系列,MongoDB没有理由不去整理一下,这个系列都是平时在项目开发时总结出来的,希望可以为各位一些帮助 ...

  2. PHP操作MongoDB学习笔记

    <?php/*** PHP操作MongoDB学习笔记*///*************************//**   连接MongoDB数据库  **////*************** ...

  3. MongoDB 学习笔记(原创)

    MongoDB 学习笔记 mongodb 数据库 nosql 一.数据库的基本概念及操作 SQL术语/概念 MongoDB术语/概念 解释/说明 database database 数据库 table ...

  4. mongoDB 学习笔记纯干货(mongoose、增删改查、聚合、索引、连接、备份与恢复、监控等等)

    最后更新时间:2017-07-13 11:10:49 原始文章链接:http://www.lovebxm.com/2017/07/13/mongodb_primer/ MongoDB - 简介 官网: ...

  5. MongoDB学习笔记(转)

    MongoDB学习笔记(一) MongoDB介绍及安装MongoDB学习笔记(二) 通过samus驱动实现基本数据操作MongoDB学习笔记(三) 在MVC模式下通过Jqgrid表格操作MongoDB ...

  6. 【转】MongoDB学习笔记(查询)

    原文地址 MongoDB学习笔记(查询) 基本查询: 构造查询数据. > db.test.findOne() { "_id" : ObjectId("4fd58ec ...

  7. MongoDB学习笔记(六)--复制集+sharding分片 && 总结

    复制集+sharding分片                                                               背景 主机 IP 服务及端口 Server A ...

  8. MongoDB学习笔记(五)--复制集 && sharding分片

    主从复制                                                                                       主从节点开启 主节 ...

  9. MongoDB学习笔记(四)--索引 && 性能优化

    索引                                                                                             基础索引 ...

随机推荐

  1. 食品生鲜调料代理分销拼团商城微信小程序

    食品生鲜调料代理分销拼团商城微信小程序 现在小程序越来越火爆了,一种新的分销拼团模式出现了.一起来分享一下吧 调料商城是一家是专业从事各种调料生产和网上调料商品销售平台,是藤椒油.花椒油.香油.火锅油 ...

  2. Java - 自定义异常(尚学堂第六章异常机制作业计算平均数)

    编写一个计算N个学生分数平均分的程序.程序应该提示用户输入N的值,如何必须输入所有N个学生分数.如果用户输入的分数是一个负数,则应该抛出一个异常并捕获,提示“分数必须是正数或者0”.并提示用户再次输入 ...

  3. shiyan 3

    //info.h#ifndef INFO_H #define INFO_H #include <string> using std::string; class Info { public ...

  4. Python - 购物车代码 (账户登陆,用户个人清单存取,重要信息高亮显示)

    需要掌握open函数. 清单存取时,需要注意编码问题,直接在读取和存储时加上encoding = 'utf - 8' 可以解决gbk - unicode转化时出现的乱码问题. 码农一定要坚强,这份代码 ...

  5. linux下执行Python项目,crontab不能定时执行任务

    问题描述: 在项目下的文件执行脚本,可以手动执行 在其他文件目录下,手动执行脚本报错误,提示不存在该模块. 解决方法: 文件头加上: import sysimport ossys.path += [ ...

  6. Python机器学习库sklearn的安装

    Python机器学习库sklearn的安装 scikit-learn是Python的一个开源机器学习模块,它建立在NumPy,SciPy和matplotlib模块之上能够为用户提供各种机器学习算法接口 ...

  7. TCP连接管理(TCP Connection Management)

    在最近的求职面试过程中,关于"建立TCP连接的三次握手"不止一次被问到了,虽然我以前用同样的问题面试过别人,但感觉还是不能给面试官一个很清晰的回答.本文算是对整个TCP连接管理做一 ...

  8. rem单位怎么使用

    rem这是个低调的css单位,近一两年开始崭露头角,有许多同学对rem的评价不一,有的在尝试使用,有的在使用过程中遇到坑就弃用了.但是我对rem综合评价是用来做web app它绝对是最合适的人选之一. ...

  9. Golang教程:方法

    什么是方法 一个方法只是一个函数,它有一个特殊的接收者(receiver)类型,该接收者放在 func 关键字和函数名之间.接收者可以是结构体类型或非结构体类型.可以在方法内部访问接收者. 通过下面的 ...

  10. 记一次走心One 2 One沟通

    聊的比较零零碎碎,内容比较散,有些solution不错,记一些要点吧(1)要学会汇报,就是坐你身边的人,也未必知道你在干啥 三个人都在砌墙.当人们分别问他们在做什么,他们的答案却不一样:第一个人头也没 ...