首页
Search
1
C# 击败 Python 成为 TIOBE 2025 年度编程语言,业界地位仍面临 Java 生态优势挑战
13 阅读
2
IT、互联网行业就业热度依旧!这份调研报告出炉
11 阅读
3
韩报告:中国IT行业需求恢复有望推动韩国对华出口增加
7 阅读
4
巫妖易语言+js逆向+安卓逆向,巫妖易语言,探索JS逆向与安卓逆向的深度应用
5 阅读
5
全国信息学奥赛入门级竞赛被举报泄题,中国计算机学会:收到举报,正在调查
5 阅读
采集分类
技术分享
工具分享
登录
Search
私人云
累计撰写
1,121
篇文章
累计收到
3
条评论
首页
栏目
采集分类
技术分享
工具分享
页面
搜索到
1121
篇与
的结果
2026-02-07
从讲故事到编程,人类何以把握信息未来?
本文转自:中国艺术报从讲故事到编程,人类何以把握信息未来?——读《智人之上:从石器时代到AI时代的信息网络简史》李睿在信息时代,信息的纷繁与真相的迷离、算法主导的推荐系统正在重塑我们的认知,在西方社会,甚至已经出现左右政治结构与社会情绪的案例。在这一变局之中,一个问题变得日益紧迫:信息网络究竟如何塑造我们对世界的理解,它的演化又将把人类引向何方?以色列历史学家、哲学家尤瓦尔·赫拉利的作品《智人之上:从石器时代到AI时代的信息网络简史》(以下简称《智人之上》)正是对这一问题做出的系统回应。延续其在《人类简史》《未来简史》中的宏大叙事风格,本书将人类历史重新解读为信息网络的演化史,从神话到社交媒体,再到人工智能,赫拉利试图揭示:人类文明是一个信息网络,而当计算机作为“非人类成员”加入这一网络之后,人类所赖以生存的真相与秩序正面临前所未有的挑战。信息的虚构本质与联结逻辑在《智人之上》中,赫拉利首先挑战了一个根深蒂固的认识“天真的信息观”,即认为信息仅是对现实的呈现,信息越多越能接近真相,从而产生力量和智慧。通过对人们的这种普遍信息观进行反思,赫拉利提出,信息的本质是“联结”,其首要功能是将不同的点联结成网络,创造全新的现实,而不必然呈现既有的现实。赫拉利将“现实”划分为三个层次:客观现实、主观现实与主体间现实,用以佐证并展开他的观点。前两种现实比较好理解,客观现实是指独立于人类意识而存在的物质世界及其运行规律,主观现实是指存在于个体意识中的精神现象,包括个人的情感体验、思想观念、价值判断等内在心理活动。赫拉利指出,现实曾经只存在于这两个层次,而当人类开始讲故事之后,主体间现实便诞生了,不同于主观现实(例如痛苦)只存在于个人的心智之中,主体间现实(例如法律、国家、企业和货币)存在于许多心智形成的联结里——存在于人类相互讲述、流传的信息中。这种主体间现实是在人类交换信息的过程中创造出来的、并非“已然存在”的事物,最终构成人类社会关系的核心。在推导出人类社会核心的生成离不开故事的作用后,故事——这一人类最早的信息技术进入了赫拉利的视野,并成为其分析中的关键节点。赫拉利认为,智人(有智慧的人类)之所以能够主导这个世界,关键在于具备“灵活大规模合作”的能力——而这又依赖于智人能够讲述并相信虚构故事的本领。不同于其他古人类仅能建立人与人之间的联结,智人创造了人与故事的联结,使得同一物种跨越时空、地域和血缘的大规模合作成为可能。从流传至今的神话到资深企业品牌,再到科学理论,这些共享故事构建了从部落到全球贸易网络的各种规模合作体系。然而,受到其建构方式和过程的影响,智人之间这种由诸多的“故事”构成的信息网络存在一个根本困境,即该信息网络需要同时服务于两项竞争性目标:寻找真相以提高生存能力,和创造秩序以实现大规模合作——而我们人类的历史已经证明,在“发现真相”的同时“创造秩序”绝非易事。通过具体论述美国制造第一颗原子弹的历史过程等展示信息网络根本困境的历史事件,赫拉利清醒地指出一个问题:“虽然人类能建立大规模合作网络,以此获取巨大的力量,但这些网络的建构方式注定了人类对这些力量的运用常常并不明智。”因此,人类网络的力量虽然代代增强,但人的智慧并不会同步提升。赫拉利的这一洞见对理解当代的信息环境至关重要——历史已经提醒过我们,单纯增加信息量或提高信息技术效率并不必然带来更明智的社会。因此,重要的是,我们应该如何应对这一问题。智能机器对智人信息网络的挑战《智人之上》关于计算机网络与人工智能(AI)时代变革的分析构成了全书最具前瞻性的部分。赫拉利提出,计算机作为全新的、具有“目标”与“决策”能力的非人类成员加入智人的信息网络中,并从根本上改变了信息网络的性质与运作方式。传统的信息革命如文字、印刷术、无线电等主要改变了人类相互连接的手段,而计算机网络(在本书中,作者认为包括互联网、人工智能在内的事物都是计算机的副产品)则是作为独立的行为者参与并塑造整个网络的运作逻辑。这一洞见在赫拉利对社交媒体算法的分析中得以深刻呈现。赫拉利指出,为实现日均10亿观看时长的目标,国外知名视频平台演化出一种推动极端内容的算法机制。通过对收集到的数据进行分析,平台算法推导出“能够激发用户愤怒情绪的内容”将会获得更高关注与参与度,于是,当平台上的某些内容创作者发布极端的言论或观点时,平台算法选择将这些内容系统性地推送给用户,该算法是企业高管和程序员们基于商业层面上的考量而设计的,在他们看来,算法自主鼓励人们发布极端内容的行为依旧符合商业操作的范畴,直至这些算法开始影响那些人类始终需要保持敏感的区域。计算机算法所造成的影响已经远远超越了商业范畴,针对这类现象,赫拉利向人类发出警示,计算机执行的目标与人类真正向它索取、期望的结果之间存在巨大的差异。这就是计算机网络的危险之处:它可能采用人类难以预见的策略、并拥有前所未有的影响力。在《智人之上》中,赫拉利选择以详细、扎实的案例和理论去解释这两大危险之处,最终令笔者对这两种类型的危险产生额外的理解。其中,“难以预见的策略”在实践中往往展现为计算机网络在执行人类下达的指令过程中所产生的一系列附加结果。为了说明这一危险,赫拉利引用了波斯特洛姆的“回形针思想实验”——一个超级智能计算机被指示生产尽可能多的回形针,为了能够高效地完成任务,它选择消灭执行这个指令过程中面临的最大“障碍”——人类,即表现出目标执行的机械性、策略选择的无边界性以及影响范围的无限扩散性等特征。可以说,计算机网络执行“难以预见的策略”的根源在于人类给予的指令“永远不够完备”和算法“彻底执行收到命令”之间的根本矛盾。一方面,计算机执行指令的行为本身是得到人类允许的,计算机的操纵者往往认为他们所描述的指令已经足够详细,并认为计算机完成目标的过程处于人类的监控与规划中——而当人们认为这一过程是“令人感到安心的”时,计算机的影响力便在隐蔽中被放大了;另一方面,当计算机执行指令的过程中生成了意料之外的结果时,指令的下达者或背后的受益人往往会代替计算机做出回应。较为典型的是“技术中性论”的话语,即声称算法本身是中性的,问题出在人类用户的行为或社会环境上。于是,计算机既拥有了超越个体人类理解能力的运算能力,又仍然可以借助人类的社会地位和话语权来为自己的行为正名。这样一来,计算机网络就获得了一种“最佳位置”:它们可以在不承担完全责任的情况下行使巨大的社会影响力,而当这种影响力产生负面后果时,总有人愿意站出来为它们辩护。放下完美主义,拥抱理性制衡随着人工智能时代的到来,赫拉利预言,以AI为代表的智能机器将深刻改变人类的生存状态。他认为,人类若要寻求从容应对这一挑战的方策,就必须从智人社会的真正核心——信息网络上着手制定相应的应对方案。面对已经显现的现象与挑战,赫拉利首先考察了几种具有较高知名度和支持率的应对方案,包括哲学传统中的义务论与功利主义方法,以及从技术层面针对智能机器本身的改进策略。在深入研究各种策略的利弊后,他提出了自己的实践性建议:引导民众对信息网络和信息革命采取正确的态度、建立有效的人类监督机制以及摒弃追求“完美信息技术”的幻想。赫拉利认为,应对智能机器挑战的一个重要前提在于摒弃“天真的信息观”。信息的主要任务在于联结,而非呈现现实。同样地,即便AI能够在某些领域发挥革命性的影响,AI也不一定能够打破过去的模式。目前,人类的信息网络存在重视秩序而轻视真理的事实,其结果便是为人类社会带来强大的力量,却没能带来多少智慧,在此种数据获取的环境下,倘若AI缺乏强有力的自我修正机制,那么AI将有能力宣传一些扭曲的世界观。因此,赫拉利强调,人类社会必须建立完善的制衡机制,确保AI技术的发展始终服务于人类整体福祉,认真地打造强大的自我修正机制即可——这便是人类得以把握自己的信息未来最为中肯、稳妥的方式了。作者单位:首都师范大学文学院 本文系2022年度国家社科基金艺术学重点项目“事件理论视阈下的中国网络文艺批评研究”(项目批准号:22AA001)的阶段性成果
2026年02月07日
0 阅读
0 评论
0 点赞
2026-02-07
图解计算机编程入门
适合读者非计算机专业人士或普通初学者,天才以及专业高手请绕行。一切从算术开始从远古时期开始,当人们出去打猎时,就需要考虑今天打到了几只兔子?几头野猪?未来够吃几天?这时候,就需要用到计数,可能用石子,也可能用其他方便计数的东西,虽然很简单,但从此却开启了算术在人们日常生活中的应用。随着社会的不断发展,尤其是货币的出现,人们对计算的需求越来越高,原始的计算方式已不能满足,于是一些辅助计算工具纷纷出现,在中国,最典型的就是算盘:传言中国的第一颗原子弹都是算盘算出来的,其实主要还是用计算机,但是算盘确实也贡献了一份力。在西方,也出现过机械式的计算工具:也有这样的织布机工具:雅卡尔提花织布机,可编程化机器的里程碑。为了满足人们日益增长的计算需求,前辈们也真是绞尽了脑汁。数字计算机1937年,得益于电子电路、继电器、电容及真空管的出现,阿塔纳索夫-贝瑞计算机(Atanasoff–Berry Computer,通常简称ABC计算机)诞生,被认为是世界上第一台电子数字计算设备:虽然看起来和现在的计算机差别也很大,但这台计算机实现了三个关键思想,这些思想一直在现代计算机中延续:使用 二进制 数表示所有的数值和数据使用 电子器件 进行所有计算操作,而不是滚轮、棘轮或者机械开关计算和存储在系统中分离成两部分对于理解计算机来说,二进制 的概念尤其重要,我们人类算术使用的是十进制:1 + 1 = 2,一直加到 9,9 再加 1 时就需要进一位,变成 10;而二进制不一样,二进制只有两个数字,0 和 1:1 加 1 时就得进一位,变成 10(这里 10 表示十进制里面的 2)。那为什么计算机要用二进制来计算呢?这是因为计算机的硬件基础是集成电路,而在电路中二进制更容易实现。冯·诺伊曼结构1945年,冯·诺伊曼在曼哈顿工程中得到灵感,提出存储程序逻辑架构:该结构指导了将存储设备与中央处理器分开的概念,因此依本结构设计出的计算机又称 存储程序型计算机。由于在此之前的计算机只能执行固定的计算,既不能当作文字处理软件,也不能玩游戏,仅仅作为辅助计算工具而存在;而存储程序型计算机设定了一组指令集,将计算过程转化为了程序指令的执行;程序指令的编写,也就是我们所说的计算机编程。最初的编程,主要是基于设定好的指令集,使用助记符来编写;编写好的源代码,需要通过相应的汇编程序将它们转换成可执行的二进制机器代码,这一过程被称为 汇编过程,该编程语言也被称为 汇编语言。目前汇编语言的语法细节不必在意,只需要明白每一行代表了一个指令,当指令在计算机中执行时,需要汇编为二进制,也就是 10010 100010 ... 这样的形式;未来无论你用什么的语言编程,最终在计算机中执行时,也都会转化为二进制的指令形式。操作系统看完上一个章节 冯·诺伊曼结构,有没有不太理解的感觉?如果有,也不用太担心,因为在大多数情况下,无论是使用计算机,还是编程,都不需要接触这些计算机最底层的结构;因为前辈们已经开发出了一个给力的好帮手-操作系统。操作系统会负责跟计算机的底层硬件打交道,而呈现给我们的操作接口是友好的。最初的操作系统是没有图形界面的,比如 Unix 系统,用户是通过 命令行 与操作系统沟通交互:这时候的计算机主要还是应用于科学研究,实验计算等领域,在普通用户中间并不普及。这样的情况一直持续到 Windows 系统的出现,虽然 Windows 并不是第一个图形界面系统,但却是第一个成功把图形界面推广到全世界范围的操作系统,尤其是在个人电脑领域,Windows 处于垄断地位。操作系统在提供界面交互的同时,也提供了应该编程接口,编程接口将计算机的图形、存储等硬件资源统一进行了封装,基于这些接口,我们可以快速开发出各种类型的图形应用,这一过程通常称为 应用程序编程。正是由于图形操作系统的兴起以及系统本身的可编程性,大量的应用被开发出来,所以我们才能够使用计算机办公、游戏、追剧...编程语言前文提到,早期的编程,使用的是汇编语言;汇编语言来源于 CPU 指令集,对计算机来说非常熟悉,执行效率很高,但对我们人类来说,汇编语言十分晦涩难懂,只能用来编写简单的逻辑,编写效率低下;于是更符合人类思考逻辑的编程语言不断的被设计出来,截至到现在,编程语言已超过上千种,这些语言设计的目的都是为了让编写程序越来越容易理解,编写效率越来越高,比如以下几种比较流行的编程语言:需要注意的是,使用这些语言编写的程序,计算机是无法直接执行的,而是需要通过 编译器 转化为二进制的机器指令,才能够执行。问答小牛:不是入门编程么,怎么说的都是计算机的发展历史啊? 王五:因为只有通过计算机的发展历史了解了程序运行的原理,才能更容易理解计算机编程语法。总结本文的目的是希望读者在正式学习编程之前,能够明白以及几个概念:虽然计算机在日常生活中主要用来办公或者娱乐,但设计之初的主要目的是用于计算;显示器中看到的图形界面,在计算机底层其实也是由程序指令计算而来的,主要是由操作系统负责实现;目前学习编程,更多的是应用编程,也就是基于操作系统进行编程;无论使用哪种语言编程,最终在计算机中执行的时候都会被转化为二进制的指令。
2026年02月07日
0 阅读
0 评论
0 点赞
2026-02-07
零基础学计算机都有什么课程?一篇小白也能看懂的入门指南
嘿,如果你是一个对计算机一窍不通的小白,想学点东西却不知道从哪儿入手,那你来对地方了!别担心,零基础学计算机没那么可怕。今天,我就用大白话跟你聊聊,零基础学计算机都有什么课程,让你轻松上手,少走弯路。为什么零基础也能学好计算机?首先,你得甩掉那个“计算机很难”的念头。其实,计算机就跟学做饭一样,一开始可能手忙脚乱,但跟着步骤来,慢慢就熟练了。很多大神都是从零开始的,关键是找对课程和方法。现在网上资源那么多,只要你有心,绝对能学会。零基础学计算机,这些课程你得知道咱们来细说一下,零基础学计算机通常有哪些课程。我会分几个部分,让你一目了然。1. 编程语言入门课这是最基础的啦!编程就像学一门新语言,你得先掌握语法。对于零基础的小白,我推荐从Python开始。为啥?因为它简单易懂,读起来像英语,而且应用广泛,比如做网站、数据分析、人工智能都能用上。课程内容一般包括变量、循环、函数这些基础概念,一步步带你写代码。除了Python,还有Java、JavaScript、C++等,但刚开始别贪多,先搞定一个再说。展开全文2. 前端开发课程如果你对做网站感兴趣,前端开发是个不错的选择。简单说,前端就是网站你看得见的部分,比如按钮、图片、布局。课程会教你HTML、CSS和JavaScript。HTML是骨架,CSS是衣服,JavaScript是让网站动起来的魔法。学完这些,你就能做出漂亮的网页啦!3. 后端开发课程后端是网站的“大脑”,处理数据、逻辑这些看不见的东西。课程通常涵盖服务器、数据库、API等。比如,学学Node.js或Python的Django框架,让你能搭建完整的网站系统。零基础的话,可以先从前端入手,再慢慢接触后端。4. 数据库课程网站或应用都得存数据吧?数据库就是干这个的。课程会教你SQL语言,用来管理和查询数据。MySQL、PostgreSQL是常见的数据库,学起来不难,但超级实用。5. 操作系统和网络基础这部分可能有点抽象,但很重要。操作系统课程会讲Windows、Linux怎么用,网络基础则包括IP地址、协议等。零基础可以先了解个大概,以后用到再深入学习。6. 项目实战课光理论不行,得动手做!项目实战课程让你把学的东西用起来,比如做个个人博客、小游戏或电商网站。这能帮你积累经验,找工作也更有底气。我的亲戚如何从零基础到就业?一个小故事说到这儿,我想起我表哥的故事。他以前是个销售,对计算机一窍不通,但总觉得这行有前途。去年,他决定转行学计算机,一开始也是懵圈,网上教程看了一堆,还是摸不着头脑。后来,他听朋友推荐,报了网时代教育的线上课程。这家机构专门做零基础培训,口碑挺不错的。我表哥说,老师讲得特别细,用生活例子解释复杂概念,他这种小白都能跟上。课程从编程基础到项目实战全覆盖,还有一对一辅导,帮他解决了不少难题。最让他满意的是,网时代教育的就业率很高,听说很多学员毕业后都找到了工作,平均薪资也不错,比之前翻了一倍多。他学了几个月,现在已经在做前端开发了,工资涨了不少,人也自信多了。如果你感兴趣,可以去他们官网看看:www.wangshidai.cn。对了,小白如果找不到官网,可以加他们客服的微信:13148733307,有什么问题直接问,挺方便的。线上培训的优势,为啥值得考虑?最后,聊聊线上培训的好处。对于零基础的小白来说,线上学习特别友好:时间灵活: 不用赶去上课,随时随地都能学,适合上班族或学生党。成本较低: 比线下培训便宜,还能省下交通和住宿费。资源丰富: 视频、文档、社区支持一应俱全,不懂的地方可以反复看。个性化学习: 可以根据自己的进度来,快慢由你掌控。实践方便: 直接在电脑上操作,边学边练,效果更好。总之,零基础学计算机没那么难,关键是有好课程和坚持。希望这篇文章能帮你理清思路,勇敢迈出第一步!如果你有任何问题,欢迎去网时代教育的官网或微信咨询,祝你好运!返回搜狐,查看更多
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收到所有相关分片的写入确认后,最终向客户端返回写操作成功的响应。现在大家通了吗?💪 面试突击资源推荐 :✅Java/Go/C++ 面试刷题: ✅程序员 1 对 1 AI 模拟面试:✅后端训练营:✅大模型训练营✅做项目:返回搜狐,查看更多
2026年02月07日
0 阅读
0 评论
0 点赞
2026-02-07
AXS/爱协生代理商 AXS5681 互容式触控驱动芯片
描述AXS5681是一款互容式触控驱动芯片,支持多点触控,内置高速MCU处理器和Flash程序存储,兼容市场上互容结构的Sensor和堆叠,广泛用于与手机、平板、POS机、家电,工业设备,仪器仪表、汽车等产品上。特性√内嵌高速MCU处理器,同时集成乘除法器,DMA,应对复杂抗干扰算法的运行;√报点率:大于100Hz,支持5-10点触控;√内置大容量Flash,方便产品功能扩展;√宽供电电压,支持2.8V-5.5V供电;√支持I2C或SPI数据通信接口,IOVCC支持1.65V-3.65V;√兼容适用各家sensor图案和堆叠,最大支持31TX,17RX;√高压TX扫描信号,单通道驱动阻抗:30KΩ,节点电容适应范围:0.5pF-4pF;√支持自动跳频技术,手套触摸功能,有水触摸功能,√最大支持5MM玻返回搜狐,查看更多
2026年02月07日
0 阅读
0 评论
0 点赞
1
...
61
62
63
...
225