将 MongoDB 中的 _id 类型更改为整数是否不好?

2024-01-06

MongoDB 使用 ObjectId 类型作为 _id。

如果我将 _id 设置为递增整数会不会很糟糕?

(With this https://github.com/goncalossilva/mongoid-sequence宝石,如果你有兴趣)


不,它一点也不坏,事实上内置的ObjectId在索引中相当大,因此如果您相信自己有更好的东西,那么非常欢迎您更改索引的默认值_id领域到任何。

但是,这是一个大but,在决定放弃默认制定时需要考虑一些因素ObjectId,特别是当使用自动递增 _ids 时,如下所示:https://docs.mongodb.com/v3.0/tutorial/create-an-auto-incrementing-field https://docs.mongodb.com/v3.0/tutorial/create-an-auto-incrementing-field

多线程并不是一个大问题,因为findAndModify原子锁实际上可以解决这个问题,但随后您就遇到了第一个问题。findAndModify不是最快的功能,也不是最轻的功能,定期使用它时会发现性能显着下降。

无论如何,你还必须考虑自己执行此操作的开销,即使没有findAndModify。对于每个插入,您都需要一个额外的查询。想象一下,有一个唯一的 id,每次要插入时都必须查询其唯一性。最终你的插入率会下降到极点,你的锁定时间也会增加。

当然ObjectId非常擅长保持唯一性,而无需在插入之前通过接触数据库来检查或制定其自己的唯一性,因此它没有这种开销。

如果您仍然认为整数 _id 适合您的场景,那么就使用它,但请记住上述开销。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将 MongoDB 中的 _id 类型更改为整数是否不好? 的相关文章

随机推荐

  • 如何在小窗口中打开“zxing条码”扫描屏?

    zxing Barcode 扫描仪在我的应用程序中成功运行 https github com journeyapps zxing android embedded https github com journeyapps zxing and
  • 如何优化elasticsearch percolator索引内存性能

    使用elasticsearch percolator索引时有没有办法提高内存性能 我为我的渗滤器创建了一个单独的索引 我有大约 1 000 000 个用户创建的已保存搜索 用于电子邮件警报 创建此渗透器索引后 我的堆使用率飙升至 100 并
  • 重新打开 gem 提供的 ActiveRecord 模型

    我正在尝试扩展 ActiveRecord 模型 Vote 那是一颗宝石 https github com peteonrails vote fu https github com peteonrails vote fu 提供给我的应用程序
  • “自动释放但没有池”是什么意思?

    我的应用程序结构如下 核心部分是用 C 编写的 并大量使用线程 我正在其上用 Objective C 开发 UI 如果我不执行线程 它工作正常 但我无法禁用 停止线程 UI 在日志中随机崩溃 我可以看到以下消息 NSAutoreleaseN
  • Spark:不支持的文字类型类 scala.collection.immutable.Nil$ List()

    我搜索了与这个问题相关的其他答案 但没有帮助 我正在尝试向数据框中添加一列 该列的数据类型为Seq CaseClass 起初我认为 Spark 可能不支持集合类型列 但事实并非如此 这是我尝试运行的代码示例 我只想向每一行添加一个空的 Se
  • 在没有标题的 UITabBarItem 上设置辅助功能标签

    我有一个像这样的 UITabBarItem Controller tabBarItem UITabBarItem alloc initWithTitle nil image nil tag 0 但是标题为 nil 会删除可访问性和 KIF
  • Spark 数据框列命名约定/限制

    我现在多次遇到 Py Spark 列名称的默认命名 从收到的 csv 文件导入 的问题 混合大小写和 或 在列名称中 所以我决定找出实际保存的列名 并发现以下内容 这个网站 https medium com an chee why usin
  • JavaScript 文件传输 SSH

    我目前正在开发一个基于浏览器的项目 这是我第一次使用 JavaScript HTML 和 CSS 之前没有使用这些语言的经验 基本上该项目涉及以下内容 1 允许用户通过以下代码上传 csv文件
  • 如何在不卸载的情况下使用多个版本的Python

    我面临着一个独特的处境 虽然微不足道 但却很痛苦 我需要使用 Python 2 6 6 因为 NLTK 没有移植到 Python 3 这是我可以收集到的 在不同的代码 同时工作 中 有一个集合计数器函数仅在 Python 3 中可用 但在
  • 类型安全 c++11 枚举类标志的模板

    我正在尝试使用模板创建类型安全的 C 标志 我也想区分一下a旗帜和旗帜s 零个 一个或多个标志 下面的解决方案效果很好 除了EnumFlag
  • Griffon 不创建 Eclipse .project 和 .classpath 文件

    狮鹫 0 9 2 beta 3 执行 griffon create app 演示控制台 后 找不到 project 因此无法将其导入到eclipse sts 中 但文档说 Griffon 自动为您创建 Eclipse project 和 c
  • Intellij IDEA 2018.1 Jdk10无法运行测试

    无法使用 IDEA 2018 1 JDK 10 运行测试 它说 错误 6 1 java source 8 不支持模块 使用 source 9 或更高版本以启用模块 我使用菜单将语言级别提高到 10 文件 gt 项目结构 gt 项目 gt 项
  • ADXL345 与 ESP32 I2C 垃圾值问题

    我已根据以下教程使用 I2C 接口将 ESP32 与 ADXL345 连接起来Tutorial http www esp32learning com code esp32 and adxl345 sensor example php 但是
  • 如何启动jboss 7.1.1服务器并在jboss 7.1.1中部署项目

    我使用 JBoss 7 服务器 因此我下载了 JBoss 7 1 1 版本并解压缩此 zip 文件 然后我转到 bin 文件夹并双击standalone bat但新的 cmd 窗口会在 2 3 秒内打开和关闭 如果我使用 cmd 运行它 我
  • PHP 未定义索引错误

    我是 PHP 新手 我收到此错误 注意 var www test modifyform php 上未定义索引 productid 32号线 注意 未定义索引 在线 var www test modifyform php 中的名称 33 注意
  • Android 广播接收器无法在后台运行

    我有 2 部不同 Android 版本的 Android 手机 第一个手机运行 Kitkat 第二个手机运行 Nougat 我目前正在使用以下代码 5 或 7 小时后 Android 应用程序不再检测事件 有人可以帮我吗 package c
  • OpenShift、python 2.7 和带有 htaccess 的静态文件

    我正在尝试配置 apache 来为 URL 提供静态文件 例如site com img bla jpg Python墨盒 烧瓶 我知道预配置的别名是什么wsg static目录 所以我们可以使用site com static bla jpg
  • 在 pandas/matplotlib/seaborn python 中使用自定义配色方案

    我想对各种绘图使用自定义配色方案 但无法使其工作 对这些绘图使用 seaborn 和 或 matplob pandas flatui 9b59b6 3498db 95a5a6 e74c3c 34495e 2ecc71 ax sns viol
  • 将 XIB 中的按钮链接到 Storyboard 中的视图控制器

    我有一个 XIB 视图控制器 里面有一个按钮 我还有一个 storboard 视图控制器 我想知道是否有一种方法可以将 xib 视图控制器中的按钮链接到故事板视图控制器 简短的回答 不 不使用界面生成器 不过你可以用代码来完成 实例化两个视
  • 将 MongoDB 中的 _id 类型更改为整数是否不好?

    MongoDB 使用 ObjectId 类型作为 id 如果我将 id 设置为递增整数会不会很糟糕 With this https github com goncalossilva mongoid sequence宝石 如果你有兴趣 不 它