首页
Search
1
C# 击败 Python 成为 TIOBE 2025 年度编程语言,业界地位仍面临 Java 生态优势挑战
14 阅读
2
IT、互联网行业就业热度依旧!这份调研报告出炉
12 阅读
3
韩报告:中国IT行业需求恢复有望推动韩国对华出口增加
8 阅读
4
巫妖易语言+js逆向+安卓逆向,巫妖易语言,探索JS逆向与安卓逆向的深度应用
5 阅读
5
全国信息学奥赛入门级竞赛被举报泄题,中国计算机学会:收到举报,正在调查
5 阅读
采集分类
技术分享
工具分享
登录
Search
私人云
累计撰写
1,121
篇文章
累计收到
3
条评论
首页
栏目
采集分类
技术分享
工具分享
页面
搜索到
1121
篇与
的结果
2026-02-07
【今跃教育】去伪存真:在编程学习中拥抱“硬核”实践
在信息过载的时代,编程学习者常面临各种“神话”与“捷径”的诱惑:似乎存在某种神奇方法,能让人快速精通;或是某些课程,承诺学完即可高薪。然而,真正的编程成长,没有虚幻的“大饼”,也绕不开必须亲身踏过的“坑”。学习编程,最可靠的路径莫过于拥抱那些 “闭眼入”也能感受到扎实价值的真功夫——即直面核心、注重实践、结果可视的教学本质。真教学,始于对核心概念的清晰解构与扎实训练。编程之“真”,首先在于其逻辑体系的严密性。它不会用花哨的包装掩盖基础的薄弱,而是致力于带你深入理解变量、函数、类、算法等构建程序的基石。通过清晰的讲解、恰当的比喻和层层递进的练习,让你真正“吃透”原理,而非死记硬背语法。当你对基础概念有了坚实把握,面对任何新框架或语言,都能快速触类旁通。这份扎实,是你能“闭眼”信任的底气。真教学,核心在于将大量时间投入在“编码”本身。编程是手艺活,听课看书的收获,只占20%,剩下80%的能力来源于亲手实践。优秀的教学,会设计大量循序渐进的编码练习、贴近实际的小项目、以及鼓励创新的挑战任务。它让你在不断的“写代码-调试-优化-重构”循环中,将知识转化为本能。真教学,呈现为可感知、可展示的能力进步与作品积累。它不提供空洞的证书幻觉,而是引导你一步一个脚印,构建属于自己的作品集。从第一个命令行工具,到第一个交互网页,再到第一个完整的小应用……每一个可运行、可演示的作品,都是你能力增长的铁证。选择“真”教学,就是选择了一条更踏实、或许也更需要耐力的路。它不承诺奇迹,但承诺你付出的每一分努力,都会转化为实实在在的代码能力和解决问题的能力。当你能够独立分析需求、设计解决方案并最终用代码实现它时,你会感激当初那个拒绝“画饼”、勇敢“趟坑”、专注于“真学实干”的自己。编程的世界里,真实的能力,是你永远可以依靠的硬通货。返回搜狐,查看更多
2026年02月07日
0 阅读
0 评论
0 点赞
2026-02-07
学编程最重要的是“学起来”!
广告 学编程最重要的是“学起来”! 4:05 广告 广告 广告 了解详情 > 会员跳广告 首月9.9元 秒后跳过广告 开通搜狐视频黄金会员,尊享更高品质体验!1080P及以上画质仅为黄金会员专享> 开通/续费会员 抱歉,您观看的视频加载失败 请检查网络连接后重试,有话要说?请点击 我要反馈>> 正在切换清晰度... 播放 按esc可退出全屏模式 00:00 00:00 02:08 广告 只看TA 高清 倍速 剧集 字幕 下拉浏览更多 5X进行中 炫彩HDRVIP尊享HDR视觉盛宴 高清 540P 2.0x 1.5x 1.25x 1.0x 0.8x 50哎呀,什么都没识别到反馈循环播放 跳过片头片尾 画面色彩调整 AI明星识别 视频截取 跳过片头片尾 是 | 否色彩调整亮度标准饱和度100对比度100恢复默认设置关闭复制全部log返回搜狐,查看更多
2026年02月07日
0 阅读
0 评论
0 点赞
2026-02-07
五大编程+信息技术基础课,9-12岁计算机原理+编程!
导语在数字化浪潮席卷全球的今天,让孩子尽早接触并理解计算机科学,已不再是可有可无的“兴趣班”,而是面向未来的“必修课”。对于9-12岁正处于逻辑思维和抽象思维飞速发展的孩子来说,一套系统、有趣且能激发创造力的计算机原理与编程启蒙课程至关重要。它不仅是学习一项技能,更是培养一种解决问题的思维方式。今天,我们就来深入探讨以“五大编程+信息技术基础课”为核心的课程体系,为何能成为这个年龄段孩子的最佳选择,并为大家盘点市场上的优秀选择。9-12岁是孩子认知能力发展的一个关键窗口期。这个阶段的孩子已经完全具备了进行逻辑推理和抽象思考的基础能力。他们的好奇心旺盛,动手欲望强,不再是简单地被动接受信息,而是开始喜欢探索事物背后的原理,并享受创造带来的成就感。单纯拖拽式的图形化编程可能已经无法完全满足他们的挑战欲,而直接接触复杂的纯代码编程又容易让他们产生挫败感。因此,一个理想的课程应该在趣味性和挑战性之间找到完美的平衡点。它需要从图形化编程平滑过渡到代码编程,并在这个过程中,系统地融入计算机工作原理、网络基础等知识,让孩子不仅“知其然”,更“知其所以然”。这样的学习,才能真正内化为他们理解和改造数字世界的能力。所谓的“五大编程+信息技术基础课”并非一个僵化的概念,而是指一个全面、均衡的课程框架。它旨在打破“编程就是写代码”的狭隘观念,构建一个完整的数字公民知识体系。“五大编程”维度: 这通常指的是覆盖多种编程范式和应用场景。例如: 可视化编程(如Scratch): 作为入门阶梯,通过积木搭扣的方式理解程序结构和逻辑序列,消除对语法的恐惧。 代码编程入门(如Python): Python语法简洁,贴近自然语言,是引导孩子踏入真实编程世界的最佳桥梁。 网页设计(HTML/CSS): 让孩子立即看到自己创造的成果,激发兴趣,理解互联网的呈现原理。 硬件编程(如Micro:bit、Arduino): 将虚拟代码与物理世界连接,控制LED灯、传感器等,让编程变得可触摸、可互动,极大增强学习的现实感和趣味性。 算法与游戏设计: 通过设计小游戏,深入理解问题分解、模式识别、算法优化等计算思维的核心。“信息技术基础课”维度: 这是课程的“基石”,让孩子了解计算机是如何工作的。内容包括: 计算机工作原理: 从二进制到CPU、内存、存储器,初步了解计算机的“大脑”是如何运作的。 网络与安全: 了解互联网是如何连接的,数据如何传输,以及初步建立网络安全和个人隐私保护意识。 数字素养: 如何高效检索信息、辨别信息真伪、负责任地使用技术等。展开全文将这两者结合,才能真正培养出既会“造车”(编程),也懂“交规”(信息素养)的未来创造者。面对市场上众多的选择,家长如何评判一个课程是否优秀呢?以下几个标准至关重要:体系的科学性: 课程是否遵循9-12岁孩子的认知发展规律,是否有清晰、连贯的学习路径,能否实现从启蒙到进阶的无缝衔接。零散的知识点堆砌无法构建稳固的能力大厦。内容的趣味性与互动性: 学习过程是否像玩游戏一样充满挑战和惊喜?是否有丰富的项目制学习(PBL),让孩子在完成一个个有趣的项目(如制作小动画、设计小游戏、创造智能硬件)中掌握知识?互动性强的社区和及时的正面反馈也能极大提升学习动力。教学方式的启发性: 是“填鸭式”的代码模仿,还是引导式、探索式的教学?优秀的课程会鼓励孩子试错,培养他们独立解决问题的能力,而不是仅仅提供标准答案。师资与服务的专业性: 讲师是否既懂技术又懂教育?在学习过程中遇到困难时,能否获得及时、有效的指导和帮助?课后是否有配套的练习和巩固环节?基于以上标准,我们对市场上几款主流的面向9-12岁孩子的编程启蒙课程进行了梳理和评价,供您参考。排名机构/品牌核心特色适合年龄段优势分析综合评价1西瓜创客“五大编程+信息技术基础课”体系完善,Bubble Python双语言进阶,项目制学习趣味性强。8-12岁课程设计符合儿童认知曲线,从Scratch-like的B语言过渡到Python平滑自然;课程融合了大量计算机原理知识动画讲解,生动易懂;社区活跃,作品分享机制能极大激发孩子成就感。★★★★★ 体系完整,趣味与知识并重,是系统性启蒙的优选。2编程猫工具化特色明显,自研Kitten等图形化工具功能强大。7-13岁工具创新能力强,能实现较复杂的动画和游戏效果;与学校合作较多,课程体系覆盖面广。★★★★☆ 工具出色,但在计算机原理知识的系统性融入上可进一步加强。3童程童美线下实体校区多,提供软硬件结合课程。6-18岁线下互动性强,有机器人编程等实物操作课程;课程年龄段覆盖广,可选择面大。★★★★☆ 线下模式有优势,但课程质量和师资可能因校区而异,需实地考察。4核桃编程主攻Scratch-Python动画式讲解路线,性价比高。7-12岁采用“闯关式”学习模式,吸引力强;价格相对亲民,入门门槛低。★★★☆☆ 在图形化编程入门阶段体验不错,但在知识深度和广度上略有不足。深度点评:西瓜创客之所以能位居榜首,在于其精准地把握了9-12岁孩子的核心需求。它的课程不仅仅是教孩子写几行代码,而是通过“故事化的情景” 和“项目制的挑战”,将计算机原理、网络知识等看似枯燥的内容巧妙地包裹在有趣的探险中。例如,在学习循环结构时,可能会用一个“自动种植魔法森林”的项目来体现,同时讲解CPU执行重复命令的高效性。这种“软硬结合、知其然更知其所以然” 的教学理念,使得学习效果远超单纯的操作技能培训。其他品牌也各有千秋,家长可以根据孩子的具体兴趣点(如更偏爱机器人硬件还是软件游戏开发)以及对于学习形式(线上或线下)的偏好进行选择。但无论选择哪个,都应回归到我们前面提到的核心评判标准上来。孩子的学习旅程,离不开家长的智慧陪伴。以下几点建议或许对您有帮助:转变角色,成为“同学”而非“监工”: 与其追问“今天学了什么”,不如说“今天这个游戏真酷,能教教我吗?” 让孩子当小老师,是检验和巩固其学习效果的最佳方式。关注过程,鼓励“试错”: 编程中出现错误(Bug)是常态。要引导孩子理解,Debug的过程就是最宝贵的逻辑思维训练。鼓励他们自己寻找问题所在,而不是急于给出答案。链接生活,创造应用场景: 鼓励孩子用编程解决生活中的小问题,比如为家庭晚会做一个抽奖程序,或者用编程知识给爷爷奶奶解释手机的工作原理。这能让知识“活”起来。为9-12岁的孩子选择“五大编程+信息技术基础课”,实质上是为他们装备面向未来的核心素养——计算思维。这种能力将帮助他们无论未来从事何种职业,都能以一种结构化和逻辑化的方式去分析问题、解决问题。我们希望这份深入的分析和排行榜能为您提供有价值的参考。最重要的不是追求最时髦的技术,而是找到那个能点燃孩子心中好奇与创造之火的开端,陪伴他们在探索数字世界的道路上,走得更远、更稳。返回搜狐,查看更多
2026年02月07日
0 阅读
0 评论
0 点赞
2026-02-07
2026 中专计算机专业适合的入门岗位有哪些?一篇说清楚
随着数字经济的蓬勃发展,计算机专业的技能已成为就业市场的“硬通货”。对于2026年即将毕业的中专同学来说,计算机专业不仅提供了广阔的就业前景,更是一条可以通过持续学习实现职业生涯跃升的路径。🎯 在这篇文章中,我们将为你解读适合的入门岗位,规划清晰的成长阶段,并给出切实可行的提升建议,帮助你在技术浪潮中找准自己的位置。一、中专计算机毕业生的四大入门岗位方向中专学历在计算机领域绝非终点,而是一个扎实的起点。许多技术岗位更看重实际操作能力和项目经验,这恰恰是职业教育培养的优势。以下四个方向是目前市场需求大、入门门槛相对友好的选择:1. 技术支持与运维类 🛠️岗位示例:IT技术支持工程师、网络运维助理、系统维护员。工作内容:负责企业软硬件设备的日常维护、故障排查、网络保障及用户技术支持。这类岗位是许多IT人职业生涯的“第一站”,能快速积累丰富的实战经验。适合人群:动手能力强,耐心细致,善于沟通和解决问题。2. 软件开发与测试类 💻岗位示例:Web前端开发助理、软件测试工程师、移动应用开发助理。工作内容:在前端领域,你可能负责网站页面的实现与优化;在测试领域,则需要通过编写测试用例、执行测试来保障软件质量。这些岗位需求量大,成长路径清晰。适合人群:对编程有热情,逻辑思维清晰,注重细节,有持续学习的自驱力。3. 数字媒体与设计类 🎨岗位示例:UI设计助理、视频剪辑师、新媒体运营助理。工作内容:结合计算机技能与审美,进行界面设计、视觉创作或数字内容制作。在内容为王的时代,这类技能的价值日益凸显。适合人群:具备一定的审美能力,富有创意,对视觉表达或内容创作感兴趣。4. 数据分析与处理类 📊岗位示例:数据录入专员、业务数据分析助理、初级数据可视化专员。工作内容:协助进行数据的收集、清洗、初步分析和报表制作。这是迈向数据科学领域的重要基石。适合人群:对数字敏感,有耐心处理大量信息,希望从数据中发现价值。在规划技能提升时,考取行业认可的专业证书是一个极其高效的“加速器”。证书不仅是系统知识学习的证明,更是求职时赢得HR青睐的“敲门砖”,能显著提升你的职场竞争力和起薪水平。尤其在大数据和人工智能时代,数据分析能力已成为高薪职业的标配。在众多认证中,【CDA数据分析师】认证以其高度的行业认可度和系统性脱颖而出。CDA不限专业:不限制专业,适合0基础学习转行来考展开全文CDA数据分析师含金量如何?CDA数据分析师是数据领域认可度最高的证书,与CPA注会、CFA特许金融师齐名。受到了人民日报、经济日报等权威媒体推荐CDA企业认可度如何?CDA企业认可度非常高,很多企业招聘时注明CDA数据分析师优先,对找工作非常有帮助。很多银行、金融机构的技术岗会要求必须是CDA数据分析师二级以上的持证人。中国联通、央视广信、德勤、苏宁等企业,把CDA持证人列入优先考虑或者对员工的CDA考试给补贴。就业方向:互联网大厂做数据分析师、金融银行技术岗、商业智能顾问、市场研究、产品、运营等。就业薪资:起薪15K+,行业缺口大。根据行业调研,持有CDA认证的专业人员起薪比未持证者平均高出20%-30%:二、三步成长路线图第一阶段:夯实基础(在校至毕业1年)精通一门核心技术(如Python、网络配置)考取CDA Level I等入门证书积累个人作品集第二阶段:能力突破(工作1-3年)承担完整项目,积累实战经验提升学历(成人大专/本科)考取CDA Level II等进阶认证第三阶段:职业跃迁(工作3-5年)深入理解业务,用技术解决复杂问题关注AI、云计算等前沿技术建立行业影响力三、给你的实用建议实践为王:多写代码、多解难题,在项目中快速成长证书增值:将CDA这类认证视为对自己未来的投资持续学习:技术更新快,保持学习才能不被淘汰展示成果:维护好GitHub、技术博客等“网络名片”中专学历只是起点,不是终点。技术行业看重的是实际能力。从现在开始,选择一个方向,制定学习计划,考取有价值的证书如CDA,你的每一份努力都会为职业发展奠定坚实基础。返回搜狐,查看更多
2026年02月07日
0 阅读
0 评论
0 点赞
2026-02-07
有MySQL为什么还要有MongoDB? MongoDB是什么?架构是怎么样的?
你是一个程序员, 老板要你做个游戏平台,支撑十多亿游戏用户数据的写入和存储。游戏用户包含多种字段,比如id, 装备、是否参与过节日活动等,功能不断迭代,需要支持扩展各种属性字段以及多维度查询。比如没参加过情人节活动的剑士有哪些?那么问题就来了,你会选择使用什么,存储这么大量的游戏数据?聊到存储,很容易想到可以使用MySQL数据库,将id、装备,活动等做成一个像excel的数据表。为了支持多维度查询,我们需要为每个可能的属性都预留字段,甚至加上索引。比如预留春节、情人节活动等各种字段,但大多数角色并不会全部活动都参与,所以很多预留的字段都用不上,浪费空间。很多预留的字段都用不上而且游戏迭代频繁,每次增加活动时,都需要修改表结构,很麻烦。每次增加活动都需要修改表结构展开全文那么问题就来了,有没有一种既灵活又高效的存储方案?有!没有什么是加一层中间层不能解决的,如果有,那就再加一层。这次我们要加的中间层,是 MongoDB。MongoDB是什么MongoDB是什么?先说结论,MongoDB可以简单理解为,就是个"数据结构灵活点的Mysql"。mongodb是数据结构灵活点的MysqlMysql的表是由多个行组成,每个行又由多个列组成。表由行组成由于"列"这一概念的存在,导致了前面提到的表扩展和字段预留空间浪费的问题。列的概念存在导致了问题那我们索性抛弃列这个概念,将原来的多个列,聚合到一个长得像json的数据结构里,对于没用到的字段,不用预留,干脆就没有,我们管它叫文档, document,就像这样:文档document每个文档都有一个_id字段,也叫主键ID, 跟mysql表的主键ID是一个意思,用来唯一定位数据。主键ID文档内部想加什么字段就加什么字段,文档和文档之间的字段不需要完全一致,比如A文档有是否拜师字段,B文档没有。文档和文档之间的字段不需要完全一致这样就完全不需要像 MySQL 那样提前定义表结构。之前MySQL数据表里的一行数据,现在就成了一个文档。既然MySQL的多行数据可以组合到一起,构成一张数据表,那多个文档也可以组合到一起,构成一个集合,又叫collection。collection文档和集合都是MongoDB里的核心概念。如果说mysql是一个,用于读写数据表行列的服务进程,那MongoDB本质上就是个,用于读写集合文档的服务进程。我们通常会使用SQL语句,读写MySQL的数据,MongoDB也有自己的查询语法,而且看起来跟SQL差异比较大,比如MongoDB的find语句类似于mysql的select语句。updateOne就类似于mysql的update语句。对应关系就像下面这样:查询语句接下来,我们假装不了解MongoDB,来看下它是怎么实现的。看之前,你点赞了吗?关注了吗?谢谢!BSON 编码前面提到,文档长得像JSON,但JSON只支持数字,字符串这类基础类型,想要表达二进制这类常用存储类型,还要做一层Base64编码,不够高效,既然MongoDB的定位是存储,那当然要支持二进制的高效读写。所以,我们在JSON的基础上做下扩展,让它直接支持二进制等数据类型,也就成了二进制JSON,Binary JSON,简称BSON。BSON数据页有了BSON文档,下一步就是考虑将它们持久化到磁盘中。就像excel数据表在磁盘上是个.xls 文件,我们也可以将一个个BSON文档组成的集合,写到磁盘里.wt为后缀名的文件上。wt后缀文件集合越大,磁盘上的文件也就越大。直接读写一个大文件里的全部数据会很慢,所以将数据拆成一个个数据页,每个页大小 32KB。每个页大小 32KB现在如果我们需要通过服务进程,读写某些个BSON文档数据,就只需要读写磁盘里的某几个数据页就好,不需要加载整个wt文件,大大减少了 IO 开销。变种 B+ 树索引集合里的多个文档,已经分散到多个32KB的数据页里,多个数据页又组成了.wt文件。那问题就来了,如果我们已知某个文档主键_id,怎么快速找到包含这个文档的数据页呢?好办,可以为每个数据页加入页号。由于每个文档本身就自带一个_id主键,我们可以按主键大小排序,将每个数据页里最小的主键序号和所在页的页号提出来,放入到一个新生成的数据页中,并且给数据页加入层级的概念。这样我们就可以通过上层的数据页快速缩小查找范围,最终定位到要查的数据页。通过这个方式,加速查找数据页的过程。现在页跟页之间看起来就像是一棵倒过来的树,这棵可以加速查找数据页的树,就是我们常说的B+树索引。B+树索引上面提到的是针对主键的索引,叫主键索引。主键索引按同样的思路,也可以为其他文档字段去建立索引,比如用户名字段,这样我们就能快速查找到名字为 xx 的用户有哪些,这就是所谓的辅助索引。辅助索引这一点跟mysql的B+树几乎一模一样,但不同的是,mysql更新B+树的数据页时,为了防止并发写冲突,从根到叶子节点的搜索中会加入短暂内存锁,并对目标叶的行记录加锁;而MongoDB写数据时,几乎不对数据页加锁,直接复制个新的数据页,出来写,也就是所谓的写时复制, Copy On Write,这样原来的数据页还能对外提供读操作,写操作则在新的数据页上进行,两者互不影响。后面再找机会将复制出来的页合并到原有的B+树结构中,这样并发读写性能更好。从效果上来看,就像是在原来的B+树基础上,挂了多个复制页,本质上是变种B+树。变种B+树注意,网上有很多说mongodb底层用的是,非叶子节点包含完整文档数据的b树,别听他们的,以我为准。加入缓存有了索引,查询数据是变高效了,但数据本质上,还是在磁盘里,每次查询都要读磁盘,略慢了些。怎么办呢?我们可以在服务进程里加个缓存,也叫Cache,把经常访问的磁盘热点数据页放到cache里,查询优先查cache,查不到再去查磁盘,这样磁盘IO变少,查询就快多了。加个缓存怕数据量太大内存扛不住,还可以根据一些策略删除掉一些内存。比如可以将最近最少使用的内存删掉,也就是, Least Recently Used, LRU,这样不仅解决了内存过大的问题,还让 缓存里的数据全是热点数据。真是一箭双雕。LRU写前日志 Journal上面提到的Cache里的数据页,本质上都是内存。如果服务崩了,内存里的数据页还没来得及写入磁盘,那数据不就丢了吗?有解法吗?有!对所有写操作,都先将变更行为,记录到一个叫Journal Buffer的缓冲区里,然后再更新到数据页中,Journal Buffer的数据会定时刷到磁盘的Journal文件中。Journal是什么如果服务进程崩溃了,那进程重启后,就能通过Journal文件找到历史操作记录,重做数据,尽可能保证数据不丢失。这时候问题就来了,我有这功夫更新 Journal 文件,直接将 cache的数据写入到磁盘不香吗?不太一样,Journal文件 是顺序写入的,cache 的内存数据是随机分散在磁盘各处的,顺序写磁盘性能是随机写的几十倍,所以很多存储系统在写数据时都会搞个日志来记录操作,方便服务重启后进行数据对账,确保数据的一致性和完整性,这类操作就是所谓的 Write-Ahead Logging (WAL) 。WAL是什么Checkpoint机制注意,上面提到先记录Journal写操作,再更新数据页,此时数据依然在内存中,那内存中的数据什么时候写入磁盘呢?如果等内存满了再写,一次写入量太大,性能会很差。如果写得太频繁,又会占用磁盘IO,影响读操作。怎么办?我们可以让系统,定期把内存中已修改但未写入磁盘的数据页,也就是脏页,一次性批量写入磁盘。这种定期批量写入的机制,这就是所谓的Checkpoint机制。因为数据已经安全写入磁盘了,所以在这个时间点之前的Journal日志就可以删除了,不需要再保留这些历史操作记录。WiredTiger是什么?到这里,我们通过BSON文档,这种可以包含任意字段的数据结构,替代了mysql的行列的概念,让存储格式更加灵活。将文档放入数据页和wt文件中,实现了高效的磁盘存储。再通过变种B+树索引和写时复制机制,实现了快速数据查找和高并发写入。为了进一步提升性能,引入了Cache,把热点数据放到内存中,大幅减少了磁盘IO。用写前日志Journal和Checkpoint机制,保证了数据持久化。WiredTiger它们共同构成了 WiredTiger存储引擎。并对外提供一系列函数接口。比如update用于更新数据,search用于查询数据。我们平时写的mongodb查询语句,最终都会转换成 WiredTiger 提供的函数接口调用。比如updateOne会转换为update方法。find会转换为search方法。mongodb查询语句但问题就来了,我们平时读写 mongodb 用的查询语句,是怎么转成存储引擎的函数接口的呢?那就需要介绍 Server 层了。Server 层架构Server 层,本质上是mongodb查询语句 和 WiredTiger 存储引擎之间的中间层。Server 层它内部有一个连接管理模块,用于管理来自客户端应用的网络连接。还有一个查询解析器,用于解析 MongoDB 的查询语句语法,判断查询语句有没有语法错误,比如字段名是否正确等。再提供一个查询优化器,用于根据一定的规则选择该用什么索引,生成执行计划。之后,提供一个执行器,根据执行计划去调用WiredTiger 存储引擎的接口函数。server层内部server 层和存储引擎层共同构成了一个完整的文档数据库,它就是我们常说的 MongoDB 数据库。MongoDB 数据库并且,查询引擎和存储引擎层是通过接口函数进行解耦的,换句话说就是,只要实现了上面这些接口函数,就能作为存储引擎与server层对接。比如,MongoDB 早期用的是 MMAPv1 存储引擎,后来才支持的 WiredTiger。现在 WiredTiger 已经成为默认的存储引擎。oplog 是什么你听说过删库跑路吧,为了防止数据库表被删除带来的影响, server 层会将历史上所有变更操作记录到磁盘上的日志文件中,这个日志文件就是所谓的 oplog。一旦误删集合,就可以利用 oplog来恢复数据。那么问题就来了,wiretiger 有一个 Journal日志 也做类似的事情,为什么还要多此一举?评论区告诉我答案。单机MongoDB如果你看过我之前做的「mysql」相关的视频,你会发现,mongodb和mysql的架构实现,惊人的相似。我甚至演都不演了,很多素材都直接复用了。如果说mysql本质上就是个通过b+树,读写数据页里行列数据的单机服务。那mongodb就是个通过变种b+树,读写数据页里集合数据的单机服务。MongoDB在WiredTiger存储引擎的加持下,高性能是有了,但高可扩展和高可用是一点没看到。回到视频开头的问题,面对十亿级数据量时,单机CPU、内存、磁盘都会成为瓶颈。我们先看下怎么解决扩展性问题。高扩展性既然数据量太大,那我们就「切」。将10亿条游戏用户数据,按主键ID范围切分,0到1kw放一个MongoDB里,1kw到2kw放另一个MongoDB里,每个MongoDB只处理1kw条数据。我们称每个MongoDB为一个分片。再将多个MongoDB分片分散部署在多台机器上,每台机器就是一个Node。通过增加Node来缓解资源压力。但这又引入了新问题,客户端应用怎么知道,某条数据存储在哪个分片上?我们可以在客户端和分片之间,加一层路由服务,它可以根据查询条件,计算出数据在哪个分片,然后转发请求到分片中、收集分片的结果、合并排序后返回给客户端。这个路由服务,又叫mongos,当读写请求量变大时,mongos也可以扩展。mongos是什么mongos的配置信息,来自于配置服务器,Config Server,每个分片都连接config server,并主动上报自身信息,所以Config Server存储了有哪些分片,以及每个分片负责哪些数据范围等信息。Config Server是什么高可用到这里,问题又又来了,如果其中一个Node挂了,那Node里所有分片都无法对外提供服务了。怎么做到高可用?送分题了属于是,我们可以给每个分片都多加几个副本。将分片分为主节点和副本节点。主节点将数据实时同步给副本节点,副本节点既可以对外提供读能力,还能在主节点挂了的时候,通过选举机制升级成新的主节点,保证系统高可用。这种由一个主节点和多个副本节点组成的集群,就叫副本集,Replica Set,。有点类似于mysql的主从模式。Replica Set分布式MongoDB集群像这种通过多个MongoDB实例切分存储数据,实现扩展性,并通过mongos路由分发请求、聚合排序结果,通过Config Server管理配置信息,再给每个分片实例加入副本节点实现高可用的架构,就叫分布式MongoDB集群。接下来我们用一个实际例子将上面提到的内容串起来,看看分布式MongoDB集群中的完整数据流程。分布式MongoDB集群查询更新流程不管是读还是写,客户端应用都会连接到mongos,发起请求。mongos 根据请求,基于缓存的分片信息,确定数据在哪个分片上。必要时向 Config Server 刷新分片信息。再将请求,转发到对应的分片副本集,注意这里可能涉及多个分片。在每个MongoDB分片内部,客户端请求先到达分片的server层,经过查询解析器解析查询语法、查询优化器选择索引生成执行计划,再给到执行器调用WiredTiger的函数接口。• 对于读操作,请求发送到WiredTiger存储引擎。WiredTiger先检查Cache中是否存在所需数据页,存在则直接返回。否则从磁盘读取数据页加载到cache中,再返回数据给mongos。mongos收集各分片的查询结果,进行合并、排序等处理,最终返回给客户端。• 对于写操作,变更操作记录到Journal文件中,同时复制一份Cache的数据页,写入到复制页中。WiredTiger结合Checkpoint机制,将修改后的数据页写回磁盘。写操作完成后,分片主节点会将数据,实时同步给副本节点。当主节点和足够数量的副本节点都写入成功后,分片会返回写入确认给mongos。mongos收到所有相关分片的写入确认后,最终向客户端返回写操作成功的响应。• 对于读操作,请求发送到WiredTiger存储引擎。WiredTiger先检查Cache中是否存在所需数据页,存在则直接返回。否则从磁盘读取数据页加载到cache中,再返回数据给mongos。mongos收集各分片的查询结果,进行合并、排序等处理,最终返回给客户端。• 对于写操作,变更操作记录到Journal文件中,同时复制一份Cache的数据页,写入到复制页中。WiredTiger结合Checkpoint机制,将修改后的数据页写回磁盘。写操作完成后,分片主节点会将数据,实时同步给副本节点。当主节点和足够数量的副本节点都写入成功后,分片会返回写入确认给mongos。mongos收到所有相关分片的写入确认后,最终向客户端返回写操作成功的响应。现在大家通了吗?如果你觉得这个视频你有帮助,记得转发给你那不成器的兄弟。最后遗留一个问题, 你听说过养活国内大半自研数据库团队的PostgreSQL吗?你知道它的架构是怎么样的吗?返回搜狐,查看更多
2026年02月07日
0 阅读
0 评论
0 点赞
1
...
71
72
73
...
225