当前位置: 首页 > news >正文

韩国建设部网站沈阳互联网公司

韩国建设部网站,沈阳互联网公司,wordpress中headcode,h5制作工具网站深入浅出#xff1a;MongoDB中的背景创建索引 想象一下#xff0c;你正忙于将成千上万的数据塞入你的MongoDB数据库中#xff0c;你的用户期待着实时的响应速度。此时#xff0c;你突然想到#xff1a;“嘿#xff0c;我应该给这些查询加个索引#xff01;” 没错…深入浅出MongoDB中的背景创建索引 想象一下你正忙于将成千上万的数据塞入你的MongoDB数据库中你的用户期待着实时的响应速度。此时你突然想到“嘿我应该给这些查询加个索引” 没错有了索引查询速度将大大提升。但问题是创建索引需要时间而这段时间里你的数据库性能可能会有所下降。该怎么办呢别急让我向你介绍一种神奇的操作——背景创建索引。 问题背景 在我们深入探讨背景创建索引之前先来快速回顾一下索引的作用。索引就像是一本书的目录可以让你快速找到相关内容。如果没有索引MongoDB需要扫描整个集合来找到相关文档这显然很慢。因此索引的存在就显得尤为重要。 一般而言创建索引的过程可能会消耗大量资源特别在数据量较大的情况下在创建索引时数据库的其他操作性能会受到影响。 背景创建索引的意义 背景创建索引Background Indexing则提供了一个优雅的解决方案。它的最大作用是**在创建索引的同时不会阻塞你的读写操作。**简单来说就是你可以边喝咖啡边趟业务看着索引在“后台”慢慢地构建不影响你正常的工作流。 与一般索引创建方式的区别 一般的索引创建方式是前台操作Foreground Indexing它会锁住你的集合直到索引创建完成。在这个期间所有对该集合的操作都被阻塞。这会带来明显的问题特别是如果你的系统正被大量请求轰炸。 示例与代码实现 我们来通过代码示例更直观地了解二者之间的区别。 前台创建索引 from pymongo import MongoClient, ASCENDING# 连接MongoDB client MongoClient(mongodb://localhost:27017/) db client[mydatabase] collection db[mycollection]# 前台创建索引 collection.create_index([(myfield, ASCENDING)]) logger.info(前台索引创建完成)在上面的代码中调用 create_index 创建索引但在这整个创建过程中mycollection 集合会被锁住。如果你有大量的读写操作这段时间会相当难熬。 背景创建索引 from pymongo import MongoClient, IndexModel, ASCENDING# 连接MongoDB client MongoClient(mongodb://localhost:27017/) db client[mydatabase] collection db[mycollection]# 背景创建索引 index IndexModel([(myfield, ASCENDING)], namemyfield_index, backgroundTrue) collection.create_indexes([index]) logger.info(背景索引创建开始——你可以继续你的操作)在这个例子中我们使用 IndexModel 来指定背景创建索引。你会发现索引创建的同时mycollection 集合仍然处于可读写状态对用户几乎没有影响。 预先创建索引效率对比-实例测试 前面是写入正在进行时创建索引的情况现在是写入前先创建索引的对比测试 from pymongo import MongoClient, ASCENDING import timedef measure_insert_time_with_foreground_index(collection):# 清空集合collection.drop()# 创建普通索引start_index_time time.time()collection.create_index([(myfield, ASCENDING)])end_index_time time.time()print(f普通索引创建时间: {end_index_time - start_index_time} 秒)# 记录插入时间start_insert_time time.time()for i in range(10000):collection.insert_one({myfield: i, otherfield: fvalue_{i}})end_insert_time time.time()print(f普通索引插入时间: {end_insert_time - start_insert_time} 秒)def measure_insert_time_with_background_index(collection):# 清空集合collection.drop()# 创建背景索引start_index_time time.time()collection.create_index([(myfield, ASCENDING)], backgroundTrue)end_index_time time.time()print(f背景索引创建时间: {end_index_time - start_index_time} 秒)# 记录插入时间start_insert_time time.time()for i in range(10000):collection.insert_one({myfield: i, otherfield: fvalue_{i}})end_insert_time time.time()print(f背景索引插入时间: {end_insert_time - start_insert_time} 秒)# 进行测试 print(普通索引测试:) measure_insert_time_with_foreground_index(mongo_client[test][ForegroundIndex])print(\n背景索引测试:) measure_insert_time_with_background_index(mongo_client[test][BackgroundIndex])普通索引测试: 普通索引创建时间: 0.3452725410461426 秒 普通索引插入时间: 43.225260972976685 秒 背景索引测试: 背景索引创建时间: 0.30878233909606934 秒 背景索引插入时间: 37.60098671913147 秒 小结 总的来说背景创建索引提供了在高并发条件下优化数据库性能的最佳实践。尽管它可能需要更多的时间来完成索引创建但这个时间带来的性能自由完全是值得的。 本文通过详细解释和简单示例希望帮助你更好地理解MongoDB中的背景创建索引。记得选择背景创建索引就像选择一条优雅的小径不仅能到达目的地还能在旅途中享受一路的风景 无论你是新手还是老手希望这篇博客都能为你的数据库之旅带来一丝幽默与轻松。继续探索吧技术之路永无止境
http://www.w-s-a.com/news/991175/

相关文章:

  • 做网站的目标是什么产品宣传片制作公司
  • 柳州建设公司网站辽宁建设工程信息网评标专家入库
  • 合肥建设学校官方网站excel导入wordpress
  • 禹城网站设计做网站需要考虑哪些
  • 深圳做营销网站建设wordpress添加文章封面
  • 阿里云的网站建设方案织梦和wordpress哪个安全
  • 聊城网站建设公司电话wordpress怎么重新配置文件
  • 创业如何进行网站建设泰州公司注册
  • 免费网站建设培训学校手机百度高级搜索入口在哪里
  • 建站经验安徽六安发现一例新冠阳性检测者
  • 滨州内做网站系统的公司汕头网络营销公司
  • 苏州制作网站的公司哪家好wordpress google搜索
  • c语言做项目网站wordpress博客被书为什么还
  • 企业建站用什么系统网站建设补充协议模板
  • 常州网站关键字优化淘客网站怎么做排名
  • 全flash网站制作教程网站做进一步优化
  • 建设网站步骤是如何做自媒体和网站签约赚点击
  • 网站建设的闪光点网站 备案 拍照
  • 那些企业需要做网站九洲建设集团网站
  • 中山企业做网站昆明做网站价格
  • wordpress 新网站 代码网站可以做系统还原吗
  • 百度给做网站公司餐饮设计装饰公司
  • 专门卖医疗器械的网站网站建设方案一份
  • 吉林省建设安全监督站网站wordpress 4.7.5下载
  • 网页制作视频的网站建设营销策划公司
  • 玉雕网站建设八点品牌设计公司招聘
  • 服务器可以自己的网站吗flash 网站 源码
  • 湖南做网站 搜搜磐石网络网站注册收入
  • 北京软件网站开发装修设计培训机构
  • 哪个网站能帮助做路书网站建设的技巧