• MongoDB学习笔记——概述


    概述

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

    数据库

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

    集合

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

    文档

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

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

    关系型数据库(mysql)

    MongoDB

    数据库

    数据库

    集合(collection

    文档(document

    字段

    Join

    内嵌文档

    主键

    主键(ObjectId

    自动主键(ObjectId):ObjectId是一个24位的字符串,由一组十六进制的字符组成,每个字节两位的十六进制数字,总共用了12字节的存储空间。保障了数据库文档的唯一性!

    官方针对ObjectId的规范

    • time 时间戳。将刚才生成的objectid的前4位进行提取,然后按照十六进制转为十进制,这个数字就是一个时间戳。
    • Machine 机器。接下来的三个字节就是所在主机的唯一标识符,一般是机器主机名的散列值,这样就确保了不同主机生成不同的机器hash值,确保在分布式中不造成冲突,这也就是在同一台机器生成的objectId中间的字符串都是一模一样的原因。
    • PID 进程ID。上面的Machine是为了确保在不同机器产生的objectId不冲突,而pid就是为了在同一台机器不同的mongodb进程产生了objectId不冲突,接下来的两位就是产生objectId的进程标识符。
    • INC 自增计数器。前面的九个字节是保证了一秒内不同机器不同进程生成objectId不冲突,这后面的三个字节是一个自动增加的计数器,用来确保在同一秒内产生的objectId也不会发现冲突,允许2563次方等于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 支持如下数据类型:

    类型

    描述

    示例

    MinKey

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

    mongodb shell不支持

    Null

    用于创建空值

    {"Key":null}

    Integer

    整型数值。用于存储数值。根据你所采用的服务器,可分为 32 位或 64 位。

    {"Key":1}

    Double

    双精度浮点值。用于存储浮点值

    {"Key":1.0}

    Symbol

    符号。该数据类型基本上等同于字符串类型,但不同的是,它一般用于采用特殊符号类型的语言。

     

    String

    字符串。存储数据常用的数据类型。在 MongoDB 中,UTF-8 编码的字符串才是合法的

    {"Key":"stringdata"}

    Object

    用于内嵌文档

    {"Key":{"A":1,"B":"string"}}

    Array

    用于将数组或列表或多个值存储为一个键

    {"Key":[1,2,3]}

    BinData

    二进制数据。用于存储二进制数据

    mongodb shell中无法使用

    ObjectId

    对象id是文档的12字节的唯一 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机制的问题导致每笔数据在存储时都会保存他的KeyValue,这样就造成了大量的数据冗余,对应的存储也占用较大的空间
    • 集合中索引总数不能超过64,索引名的长度不能超过125个字符,一个符合索引最多只能有31

     

  • 相关阅读:
    Linux A机器免密码SSH登录B机器
    Linux 系统命令笔记
    整理笔记有感而发
    Linux(Centos)快速搭建SVN
    APP接口自动化测试JAVA+TestNG(三)之HTTP接口测试实例
    Windows服务器环境下jenkins下载和安装
    Win10系统如何在防火墙里开放端口
    Java 通过地址获取经纬度
    一、springBoot简介与环境搭建
    2018年尚硅谷《全套Java、Android、HTML5前端视频》
  • 原文地址:https://www.cnblogs.com/AlvinLee/p/6050267.html
Copyright © 2020-2023  润新知