`

MongoDB Capped Collections & Custom Collation

阅读更多

 

capped collections 固定集合

 

  • 支持高吞吐量操作:根据插入顺序插入和检索文档。
  • 工作方式类似循环缓冲区:当分配给集合的空间用完,新插入的数据就会覆盖最旧的数据。
  • 可使用 MongoDB 的 TTL 索引(生存时间)替代固定集合,设置 TTL 索引值 & 日期类型字段值 使数据过期并删除。TTL 索引与固定集合不兼容。
  • 插入速度极快,查询输出速度极快,插入最新数据时,淘汰最早的数据。
  • 插入顺序:可确保插入顺序,因此查询不需要索引即可按插入顺序返回文档,没有索引开销,支持更高插入吞吐量。
  • 自动删除最旧文件:无需脚本 or 显式删除操作,自动删除最旧文档给新文档腾出空间。潜在用例:
    1、存储大容量系统生成的日志信息。
    在没有索引的情况下,将文档插入固定集合中的速度接近将日志信息直接写入文件系统的速度。
    此外,内置的先进先出属性可在管理存储使用的同时维护事件的顺序。
    2、在固定集合中缓存少量数据。
    由于读取的是高速而非繁重的缓存,因此您要么需要确保此集合始终保留在工作集中(即在RAM中),要么需要对所需的一个或多个索引进行写惩罚。
     例如,将操作日志存储在副本集中的oplog.rs集合使用了固定集合。从MongoDB 4.0开始,固定集合的操作日志可以超出其配置的大小限制,以避免删除多数提交点。
  • _id 索引:固定集合默认具有 _id 字段和 _id 字段上的索引。
  • 限制和推荐:
    1.更新:若要更新固定集合中的文档,请创建索引,以便更新操作无需集合扫描。
    2.文件大小:如果更新或替换操作更改了文档大小,则该操作将失败。
    3.文件删除:无法删除固定集合中的文档。 只能使用 drop() 方法删除集合并重新创建固定集合。
    4.分片:无法将固定集合分片。
    5.查询效率:使用自然顺序可以有效地从集合中检索最近插入的元素,类似于日志文件。
    6.集合:聚合管道阶段 $out 无法将结果写入固定集合。
    7.事务:从MongoDB 4.2开始,无法在事务中写数据到固定集合,但仍支持读取数据。
  • 创建固定集合
    通过 db.createCollection() 方法( mongo shell 中 create 命令)创建固定集合,必须指定集合的​​最大大小(以字节为单位),MongoDB 将为该集合预先分配最大大小。固定集合的大小包括少量内部开销空间。
    db.createCollection( "log", { capped: true, size: 100000 } )
    如果 size <= 4096,则集合的上限为4096字节。否则 MongoDB 将提高大小使其成为 256 的整数倍。
    此外,您还可使用 max 字段为集合指定最大文档数,如下所示:
    db.createCollection("log", { capped : true, size : 5242880, max : 5000 } )
    即使指定最大文档数,也始终需要 size 参数。如果集合在达到最大文档数之前达到最大大小限制,MongoDB 将删除较旧的文档。
  • 固定集合查询
    如果您在未指定顺序的固定集合上执行 find(),则 MongoDB 保证结果的顺序与插入顺序相同。
    要以相反的插入顺序检索文档,请发出 find().sort() 方法并将 $natural 参数设置为 -1,如下所示:
    db.cappedCollection.find().sort( { $natural: -1 } )
  • 检查集合是否为固定集合
    db.collection.isCapped()
  • 将一个集合转换为固定集合
    db.runCommand({"convertToCapped": "mycoll", size: 100000});
    size 参数以字节为单位指定固定集合的大小。
    在操作期间,它将持有数据库排他锁。 锁定同一数据库的其他操作将被阻止,直到该操作完成。
    请参阅一些常见的客户端操作采取了哪些锁定? 用于锁定数据库的操作。
    下表列出了一些操作以及它们用于文档级锁定存储引擎的锁定类型:
    Operation Database Collection
    Issue a query r (Intent Shared) r (Intent Shared)
    Insert data w (Intent Exclusive) w (Intent Exclusive)
    Remove data w (Intent Exclusive) w (Intent Exclusive)
    Update data w (Intent Exclusive) w (Intent Exclusive)
    Perform Aggregation r (Intent Shared) r (Intent Shared)
    Create an index (Foreground) W (Exclusive) no
    Create an index (Background) w (Intent Exclusive) w (Intent Exclusive)
    List collections r (Intent Shared), Changed in version 4.0. no
    Map-reduce W (Exclusive) and R (Shared) w (Intent Exclusive) & r (Intent Shared)
  • 结尾游标
    可将可结尾游标与固定集合一起使用。与 Unix tail -f 命令类似,结尾游标跟随在固定集合的末尾。 将新文档插入固定集合后,可使用结尾游标继续获取该文档。
    有关创建可尾光标的信息,请参见可尾光标。

 

Use Custom Collation 自定义排序

 

  • 排序允许用户为 String 比较指定特定于语言的规则,如字母大写和重音符号的规则。您可以为集合或视图,索引或支持归类的特定操作指定排序。
  • 文档排序规则
    {
    locale: <string>,
    caseLevel: <boolean>,
    caseFirst: <string>,
    strength: <int>,
    numericOrdering: <boolean>,
    alternate: <string>,
    maxVariable: <string>,
    backwards: <boolean>
    }
    指定排序规则时,locale (区域设置) 字段是必填字段; 所有其他排序规则字段都是可选的。
    默认排序规则参数值取决于您指定的语言环境。

    字段类型说明:
    locale: ICU 语言环境。有关支持的语言环境的列表,请参见支持的语言和语言环境。要指定简单的二进制比较,请将语言环境值指定为“ simple”。

    caseLevel: 强度。可选的。要执行的比较级别。对应于 ICU 比较级别。可能的值为:
    1 - 主要比较。排序规则仅对基本字符进行比较,忽略其他区别,如变音符号和大小写。
    2 - 二级比较。排序规则执行基本字符(主要区别)和变音符号(次要区别)的比较。基本字符之间的差异优先于次要差异。
    3 - 第三层比较。这是默认级别。排序规则将比较基本字符(主要差异),变音符号(次要差异)以及大小写和变体(三次差异)。优先级别依次递减。
    4 - 第四级。限于特定用例,以在1-3级忽略标点符号或处理日语文本时考虑标点符号。
    5 - 相同级别。仅限于平局决胜局的特定用例。
    有关详细信息,请参见 ICU 整理:比较级别。

    caseLevel: 可选的。默认值为false。确定是否包括强度级别1或2的案例比较的标志。
    如果为 true,则包括案例比较;即
    当与 strength=1 一起使用时,排序规则比较基本字符和大小写。
    当使用强度为 2 时,排序规则比较基本字符,变音符号(以及其他可能的次要差异)和大小写。
    如果为false,则不包括级别 1 或 2 的大小写比较。
    有关更多信息,请参阅ICU整理:案例级别。

    caseFirst:可选的。默认值为 off。在第三级比较期间确定大小写差异的排序顺序的字段。
    可能的值为:
    “ upper”:大写在小写之前排序。
    “ lower”:小写在大写之前排序。
    “ off”:类似于“下部”,略有不同。
    有关差异的详细信息,请参见http://userguide.icu-project.org/collat​​ion/customization。

    numericOrdering:可选的。默认为 false。确定将数字字符串比较为数字还是字符串的标志。
    如果为 true,则比较为数字;否则为0。即“ 10”大于“ 2”。
    如果为 false,则比较为字符串;否则为false。即“ 10”小于“ 2”。

    alternate:可选的。默认值为“non-ignorable”。确定排序规则是否应将空格和标点符号视为基本字符以便进行比较的字段。可能的值为:
    “non-ignorable” 空格和标点符号被视为基本字符。
    “ shifted” 空格和标点符号不视为基本字符,仅在强度级别大于 3 时才可区分。
    有关更多信息,请参见ICU整理:比较级别。

    maxVariable:可选的。确定在交替显示时哪些字符可忽略的字段:“ shifted”。如果交替显示,则无效:“non-ignorable”。可能的值为:
    “punct” 空格和标点符号都是“ ignorable”,即不被视为基本字符。
    “ space” 空格是“ ignorable”,即不被视为基本字符。

    backwards:可选的。默认值为 false。用于确定是否带有变音符号的字符串从字符串的后面进行排序的标志,例如某些法语词典的排序。
    如果为 true,则从后到前进行比较。
    如果为 false,则从前到后进行比较。

    normalization:可选的。默认值为 false。用于确定是否检查文本是否需要规范化并执行规范化的标志。通常大多数文本不需要此规范化处理。
    如果为 true,请检查是否完全标准化,然后执行标准化以比较文本。
    如果为 false,则不检查。

    有关详细信息,请参见http://userguide.icu-project.org/collat​​ion/concepts#TOC-Normalization。
  • 支持排序的操作
    您可以为以下操作指定排序规则:
    注意您不能为一个操作指定多个排序规则。 例如,您不能为每个字段指定不同的排序规则,或者如果对排序执行查找,则不能对查找使用一种排序规则,而对排序使用另一种排序规则。
    Commands mongo Shell Methods
    create db.createCollection(),db.createView()
    createIndexes [1] db.collection.createIndex() [1]
    aggregate db.collection.aggregate()
    distinct db.collection.distinct()
    findAndModify db.collection.findAndModify(),db.collection.findOneAndDelete(),db.collection.findOneAndReplace(),db.collection.findOneAndUpdate()
    find cursor.collation() to specify collation for db.collection.find()
    mapReduce db.collection.mapReduce()
    delete db.collection.deleteOne(),db.collection.deleteMany(),db.collection.remove()
    update db.collection.update(),db.collection.updateOne(),db.collection.updateMany(),db.collection.replaceOne()
    shardCollection sh.shardCollection()
    count db.collection.count()
    Individual update, replace, and delete operations in db.collection.bulkWrite().

    某些索引类型不支持排序规则。 有关详细信息,请参见排序规则和不支持的索引类型。
     
  • 本地变体:某些排序规则语言环境具有变体,这些变体采用特定于语言的规则。要指定语言环境变体,请使用以下语法:
    { "locale" : "<locale code>@collation=<variant>" }
    例如,要使用中文排序规则的 unihan 变体:
    { "locale" : "zh@collation=unihan" }
     有关所有归类语言环境及其变体的完整列表,请参见归类语言环境。
  • 排序规则和视图:
  • 您可以在创建时为视图指定默认排序规则。如果未指定排序规则,则视图的默认排序规则为“简单”二进制比较排序规则。也就是说,该视图不会继承该集合的默认排序规则。
  • 视图上的字符串比较使用视图的默认排序规则。尝试更改或覆盖视图的默认排序规则的操作将失败,并显示错误。
  • 如果从另一个视图创建视图,则不能指定与源视图的排序规则不同的排序规则。
  • 如果执行涉及多个视图的聚合,例如使用 $ lookup 或 $ graphLookup,则这些视图必须具有相同的排序规则。
  • 使用排序规则和索引:要将索引用于字符串比较,操作还必须指定相同的排序规则。即,具有排序规则的索引不能支持对索引字段进行字符串比较的操作(如果该操作指定了不同的排序规则)。
    例如,集合 myColl 在具有排序规则区域设置 “ fr” 的字符串字段类别中具有索引。
    db.myColl.createIndex( { category: 1 }, { collation: { locale: "fr" } } )

    以下查询操作指定与索引相同的排序规则,可以使用索引:
    db.myColl.find( { category: "cafe" } ).collation( { locale: "fr" } )

    但是,以下查询操作(默认情况下使用 “simple” 二进制整理程序)不能使用索引:
    db.myColl.find( { category: "cafe" } )
     对于索引前缀键不是字符串,数组和嵌入式文档的复合索引,指定不同排序规则的操作仍可以使用索引来支持索引前缀键的比较。
    例如,集合 myColl 在数字字段 score 和 price 和字符串字段类别上具有复合索引;使用排序规则语言环境 “ fr” 创建索引以进行字符串比较:
    db.myColl.createIndex(
    { score: 1, price: 1, category: 1 },
    { collation: { locale: "fr" } } )

    以下使用 “simple” 二进制排序规则进行字符串比较的操作可以使用索引:
    db.myColl.find( { score: 5 } ).sort( { price: 1 } )
    db.myColl.find( { score: 5, price: { $gt: NumberDecimal( "10" ) } } ).sort( { price: 1 } )

    以下操作将 “simple” 二进制排序规则用于索引类别字段上的字符串比较,该操作可以使用索引仅满足分数:查询的5部分:
    db.myColl.find( { score: 5, category: "cafe" } )
  • 排序规则和不支持的索引类型:以下索引仅支持简单的二进制比较,不支持排序规则:文字索引、二维索引、geoHaystack索引。要在具有非简单排序规则的集合上创建文本索引,二维索引或 geoHaystack 索引,您必须在创建索引时显式指定 {collat​​ion:{locale:“ simple”}}} 。
分享到:
评论

相关推荐

    15、MongoDB建模调优&change stream实战-ev.rar

    15、MongoDB建模调优&change stream实战_ev.rar15、MongoDB建模调优&change stream实战_ev.rar15、MongoDB建模调优&change stream实战_ev.rar15、MongoDB建模调优&change stream实战_ev.rar15、MongoDB建模调优&...

    14、MongoDB存储原理&多文档事务详解-ev.rar

    14、MongoDB存储原理&多文档事务详解_ev.rar14、MongoDB存储原理&多文档事务详解_ev.rar14、MongoDB存储原理&多文档事务详解_ev.rar14、MongoDB存储原理&多文档事务详解_ev.rar14、MongoDB存储原理&多文档事务详解_...

    头歌6.6MongoDB 复制集 & 分片

    头歌6.6MongoDB 复制集 & 分片

    深入学习MongoDB:Scaling MongoDB && 50 Tips and Tricks for MongoDB Developers

    深入学习MongoDB:Scaling MongoDB && 50 Tips and Tricks for MongoDB Developers深入学习MongoDB中文版Scaling MongoDB英文版50 Tips and Tricks for MongoDB Developers英文版高清完整目录3本打包合集

    13、MongoDB分片集群&高级集群架构详解-ev.rar

    13、MongoDB分片集群&高级集群架构详解_ev.rar13、MongoDB分片集群&高级集群架构详解_ev.rar13、MongoDB分片集群&高级集群架构详解_ev.rar13、MongoDB分片集群&高级集群架构详解_ev.rar13、MongoDB分片集群&高级集群...

    mongodb&spring&struts&springdatamongodb整合,带所有jar,需要的拿走

    MongoDB、Spring、Struts和Spring Data MongoDB是Java开发中常用的四大组件,它们分别在数据库存储、应用框架、MVC模式实现以及数据访问层提供强大的支持。本项目整合了这四个技术,使得开发者可以在Java Web应用...

    MongoDB集群部署&开启身份认证部署包

    简单打包分布式部署MongoDB集群,开启身份认证发布工具包示例。 使用参考博客地址 https://blog.csdn.net/csdn710924032/article/details/80713877 内附度盘

    MongoDB学习资料&权威指南及实战教程.rar

    MongoDB是一种流行的开源、分布式文档数据库,用于处理大量的结构化和半结构化数据。它以其灵活性、可伸缩性和高性能而受到广泛欢迎,尤其适用于处理大数据和实时应用程序。本资源包含两部分:《MongoDB权威指南...

    MongoDB 4&5&6单机版安装教程

    MongoDB 是一个流行的开源文档数据库管理系统,用于存储和检索JSON格式的数据。本教程将详细介绍如何在CentOS 7上安装和配置MongoDB的4、5、6三个版本的单机版。 1. **安装准备**: 在安装MongoDB之前,确保你的...

    drop-mongodb-collections:删除所有(非系统)mongodb 集合

    drop-mongodb-collections 删除所有非系统 mongodb 集合。 用于测试。用法 &gt; npm i drop-mongodb-collections --save-dev const dropMongoDbCollections = require ( 'drop-mongodb-collections' ) ( 'mongodb://...

    MongoDB&VS2019.zip

    总的来说,"MongoDB&VS2019.zip"提供的资源简化了在VS2019中开发MongoDB应用的过程,使得开发者可以专注于编写业务逻辑,而无需关心底层驱动的编译和配置。这是一个非常实用的工具,对于初学者和有经验的开发者来说...

    MongoDB Driver -JAVA 2.5.3 API

    MongoDB Driver for Java 2.5.3是官方提供的用于Java开发者与MongoDB数据库交互的API。这个API允许程序员高效地执行各种操作,包括插入、查询、更新和删除MongoDB中的数据。MongoDB是一个高性能、无模式的文档型...

    基于MongoDB的日志系统Mongodb-Log.zip

    MongoDB 的 Capped Collection是一个天生的日志系统,MongoDB自己的oplog就是用它来存储的,Capped Collection的特点是可以指定Collection的大小,当记录总大小超过设定大小后,老的数据会被自动抹掉用于存储新的...

    mongodb3.2.8入门到精通视频教程.zip

    3.Capped Collections介绍及生产环境之疲劳度过滤,日志应用 4.Bson结构解析以及$type和_id原理详细分析 5.mongodb shell使用loadjs与mongodb高速交互分析 6.高频咨询之sql statement 和mongodb statement对照分析和...

    MongoDbMobile_Starter:一个与MongoDB Mobile&Stitch一起使用的入门项目

    MongoDb Mobile Android入门版一个可与MongoDB Mobile& 一起使用的Android入门项目。 在MongoDB World 2018上,Mongo宣布了的beta,该版本使您可以在Android和iOS设备上使用Mongo。 此入门应用程序提供了一种快速...

    MongoDB文档与集合.pdf

    MongoDB 还提供了一种特殊的集合类型——“固定大小集合”(Capped Collections),用于实现高性能的队列功能。Capped Collections 有固定的存储容量,一旦达到上限,新插入的数据会替换最旧的数据,保持集合的大小...

    MongoDB&Cpmpass.zip

    Mac使用——MongoDB安装包,以及Compass可视化工具

    linux安装mongodb教程

    /usr/local/mongodb/mongodb-linux-2.0.7/bin/mongod --dbpath=/usr/local/mongodb/data/db --logpath=/usr/local/mongodb/mongodb-linux-2.0.7/logs/mongodb.log --logappend --port=27017 --fork 知识点 6:配置...

    五、MongoDB 学习PPT

    例如,`use`命令用于切换或创建数据库,`db.dropDatabase()`用于删除当前数据库,`show dbs`列出所有数据库,`show collections`显示当前库中的所有集合。插入文档可以通过`db.collection.insert()`或`db.collection...

Global site tag (gtag.js) - Google Analytics