
病毒名称 Trojan/Agentl
病毒中文名 “代理木马”变种l
病毒类型 木马释放器
危险级别 ★★
影响平台 Win 9x/2000/XP/NT/Me/2003
感染对象
图表
描述 TrojanDropperAgentl“代理木马”变种l是从被感染计算机上用户账号密码的木马程序。创建名为bootsys的病毒副本。在临时文件夹中创建html文件并利用IE浏览器自动打开。修改注册表,实现病毒程序的开机自启,并降低IE安全级别。在随机TCP端口开启代理服务器,将用户计算机变为黑客的代理服务器。可开启后门,允许远程攻击者非授权进入被感染计算机。被感染计算机用户的密码,并可通过拦截用户输入IE的数据,形成键击日志。将的信息发送给黑客。
解决方案
1、请及时升级江民KV2005杀毒软件,并开启各项监视及隐私保护程序,防止病毒及木马程序进入系统机密信息。江民KV2005杀毒软件可以直接在Windows系统下彻底清除以上病毒。
2、江民kv网络版的用户请及时升级控制中心,并建议相关管理人员在适当时候进行全网查杀病毒,保证企业信息安全。
3、江民杀毒软件KV2005 未知病毒主动防御系统,能有效预防木马、病毒对机器的感染与破坏,保障用户信息安全,建议用户升级使用。
恶意代码(网页病毒)[破解方法]
十一种常见恶意代码(网页病毒)的破解方法
1.禁止使用电脑
危害程度:★★★★
感染概率:**
现象描述:
尽管网络流氓们用这一招的不多,但是一旦你中招了,后果真是不堪设想!浏览了含有这种恶意代码的网页其后果是:"关闭系统"、"运行"、"注销"、注册表编辑器、DOS程序、运行任何程序被禁止,系统无法进入"实模式"、驱动器被隐藏。
解决办法:
一般来说上述八大现象你都遇上了的话,基本上系统就给"废"了,建议重装。
2.格式化硬盘
危害程度:★★★★★
感染概率:*
现象描述:
这类恶意代码的特征就是利用IE执行ActiveX的功能,让你无意中格式化自己的硬盘。只要你浏览了含有它的网页,浏览器就会d出一个警告说"当前的页面含有不安全的ActiveX,可能会对你造成危害",问你是否执行。如果你选择"是"的话,硬盘就会被快速格式化,因为格式化时窗口是最小化的,你可能根本就没注意,等发现时已悔之晚矣。
解决办法:
除非你知道自己是在做什么,否则不要随便回答"是"。该提示信息还可以被修改,如改成"Windows正在删除本机的临时文件,是否继续",所以千万要注意!此外,将计算机上[form]atcom、Fdiskexe、Delexe、Deltreeexe等命令改名也是一个办法。
3.下载运行木马程序
危害程度:★★★
感染概率:***
现象描述:
在网页上浏览也会中木马?当然,由于IE50本身的漏洞,使这样的新式入侵手法成为可能,方法就是利用了微软的可以嵌入exe文件的eml文件的漏洞,将木马放在eml文件里,然后用一段恶意代码指向它。上网者浏览到该恶意网页,就会在不知不觉中下载了木马并执行,其间居然没有任何提示和警告!
解决办法:
第一个办法是升级您的IE50,IE50以上版本没这毛病;此外,安装金山毒霸、Norton等病毒防火墙,它会把网页木马当作病毒迅速查截杀。
4.注册表的锁定
危害程度:★★
感染概率:***
现象描述:
有时浏览了恶意网页后系统被修改,想要用Regedit更改时,却发现系统提示你没有权限运行该程序,然后让你联系管理员。晕了!动了我的东西还不让改,这是哪门子的道理!
解决办法:
能够修改注册表的又不止Regedit一个,找一个注册表编辑器,例如:Reghance。将注册表中的HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\System下的DWORD值"DisableRegistryTools"键值恢复为"0",即可恢复注册表。
5.默认主页修改
危害程度:★★★
感染概率:*****
现象描述:
一些网站为了提高自己的访问量和做广告宣传,利用IE的漏洞,将访问者的IE不由分说地进行修改。一般改掉你的起始页和默认主页,为了不让你改回去,甚至将IE选项中的默认主页按钮变为失效的灰色。不愧是网络流氓的一惯做风。
解决办法:
1起始页的修改。展开注册表到HKEY_LOCAL_MACHINE\Software\Microsoft\Internet Explorer\Main,在右半部分窗口中将"Start Page"的键值改为"about:blank"即可。同理,展开注册表到HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main,在右半部分窗口中将"Start Page"的键值改为"about:blank"即可。
注意:
有时进行了以上步骤后仍然没有生效,估计是有程序加载到了启动项的缘故,就算修改了,下次启动时也会自动运行程序,将上述设置改回来,解决方法如下:
运行注册表编辑器Regeditexe,然后依次展开HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run主键,然后将下面的"registryexe"子键(名字不固定)删除,最后删除硬盘里的同名可执行程序。退出注册编辑器,重新启动计算机,问题就解决了。
2默认主页的修改。运行注册表编辑器,展开HKEY_LOCAL_MACHINE\Software\Microsoft\Internet Explorer\Main,将Default-Page-URL子键的键值中的那些恶意网站的网址改正,或者设置为IE的默认值。
3IE选项按钮失效。运行注册表编辑器,将HKEY_CURRENT_USER\Software\Policies\Microsoft\Internet Explorer\Control Panel中的DWORD值"Settings"=dword:1、"Links"=dword:1、"SecAddSites"=dword:1全部改为"0",将HKEY_USERSDEFAULT\Software\Policies\Microsoft\Internet Explorer\Control Panel下的DWORD值"homepage"的键值改为"0"。
6.篡改IE标题栏
危害程度:★
感染概率:*****
现象描述:
在系统默认状态下,由应用程序本身来提供标题栏的信息。但是,有些网络流氓为了达到广告宣传的目的,将串值"Windows Title"下的键值改为其网站名或更多的广告信息,从而达到改变IE标题栏的目的。非要别人看他的东西,而且是通过非法的修改手段,除了"无耻"两个字,再没有其它形容词了。
解决办法:
展开注册表到HKEY_LOCAL_MACHINE\Software\Microsoft\Internet Explorer\Main下,在右半部分窗口找到串值"Windows Title",将该串值删除。重新启动计算机。
7.篡改默认搜索引擎
危害程度:★★★
感染概率:*
现象描述:
在IE浏览器的工具栏中有一个搜索引擎的工具按钮,可以实现网络搜索,被篡改后只要点击那个搜索工具按钮就会链接到网络注氓想要你去的网站。
解决办法:
运行注册表编辑器,依次展开HKEY_LOCAL_MACHINE\Software\Microsoft\Internet Explorer\Search\Customize\Search和HKEY_LOCAL_MACHINE\Software\Microsoft\Internet Explorer\Search\SearchAssistant,将CustomizeSearch及SearchAssistant的键值改为某个搜索引擎的网址即可。
8.IE右键修改
危害程度:★★
感染概率:***
现象描述:
有的网络流氓为了宣传的目的,将你的右键d出的功能菜单进行了修改,并且加入了一些乱七八糟的东西,甚至为了禁止你下载,将IE窗口中单击右键的功能都屏蔽掉。
解决办法:
1右键菜单被修改。打开注册表编辑器,找到HKEY_CURRENT_USER\Software\Microsoft\Internet Explore\rMenuExt,删除相关的广告条文。
2右键功能失效。打开注册表编辑器,展开到HKEY_CURRENT_USER\Software\Policies\Microsoft\Internet Explorer\Restrictions,将其DWORD值"NoBrowserContextMenu"的值改为0。
9.篡改地址栏文字
危害程度:★★
感染概率:***
现象描述:
中招者的IE地址栏下方出现一些莫名其妙的文字和图标,地址栏里的下拉框里也有大量的地址,并不是你以前访问过的。
解决办法:
1地址栏下的文字。在HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\ToolBar下找到键值LinksFolderName,将其中的内容删去即可。
2地址栏中无用的地址。在HKEY_CURRENT_USER\Software\Microsoft\Internet ExplorerType\URLs中删除无用的键值即可。
10启动时d出对话框
危害程度:★★★
感染概率:**
现象描述:
1系统启动时d出对话框,通常是一些广告信息,例如欢迎访问某某网站等等。
2开机d出网页,通常会d出很多窗口,让你措手不及,恶毒一点的,可以重复d出窗口直到死机。
解决办法:
1d出对话框。打开注册表编辑器,找到HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Winlogon主键,然后在右边窗口中找到"LegalNoticeCaption"和"LegalNoticeText"这两个字符串,删除这两个字符串就可以解决在启动时出现提示框的现象了。
2d出网页。点击"开始-运行-输入msconfig",选择"启动",把里面后缀为url、html、htm的网址文件都勾掉。
11.IE窗口定时d出
危害程度:★★
感染概率:**
现象描述:
中招者的机器每隔一段时间就d出IE窗口,地址指向网络注氓的个人主页。不晓得是不是网络流氓以为这样你就会经常光顾?
解决办法:
点击"开始-运行-输入msconfig",选择"启动",把里面后缀为hta的都勾掉,重启。简述 *** 作系统的功能具体如下:
一:提供人机交互接口。可以想象没有 *** 作系统这层软件的话,使用计算机会是一个什么样子。计算机使用者将面临一堆计算机硬件进行 *** 作,早期的计算机就是这样的,通过硬开关进行控制。有了 *** 作系统之后,就相当于我们直接和 *** 作系统进行打交道,避免了直接 *** 作硬件带来的麻烦。 *** 作系统的这个提供人机交互接口的功能,是 *** 作系统最大的功能。
二:提供计算机软硬件资源管理。 *** 作系统第二个功能就是管理计算机的资源。计算机的资源包括,软件资源和硬件资源,也就是通常所说的软件系统和硬件系统。其中硬件系统是受计算机 *** 作系统的直接控制,比如内存的地址管理,或者控制键盘和鼠标的扫描时序管理等。 *** 作系统也管理着计算机的软件资源,比如应用程序的执行调度等,包括进程和线程的执行等都是在 *** 作系统的控制下有条不紊的进行的。北海市建设工程消防服务中心是一家专业从事建筑消防安全技术服务的机构,其地址位于广西北海市海城区人民路中段(近市政府),具体地址为北海市海城区人民路中段88号。
该消防服务中心主要提供建筑消防安全技术服务和咨询服务,包括建筑消防设计审核、验收及竣工验收、建筑消防设施验收、施工、监理过程中的消防技术指导等。同时,该中心还开展有关消防培训、演练和实验等相关业务,为提高公众的消防安全意识和消防技能做出了积极贡献。
如果您需要关于建筑消防安全方面的技术支持和咨询服务,可以前往北海市建设工程消防服务中心进行咨询或拨打他们的联系电话进行预约。MAC
Mac OS X是很好的开发平台,用户数量将会倍增。作为基于UNIX的装机量最大的 *** 作系统,Mac OS X提供了独特的技术原理和简单 *** 作的完美结合,如Mach 30内核的多线程;紧密的硬件集成和 SMP安全驱动, 以及零配置网络。Mac OS X 102在Darwin中集成了艺术级的FreeBSD 44和GCC 31,基于开放源代码的Mac OS X,提供了加强的性能、兼容性和可用性。
拥有超过 5 百万名 Mac OS X 用户,苹果公司已经成为领先世界水平的基于 UNIX 的系统供应商。Mac OS X 支持广泛的业界标准,如 Java 2 , Apache , LDAPv3 , PHP , MySQL 和 WebDAV ,并还提供对多址寻网和安全标准的支持,诸如 IPv6 , IPsec , SSL 和 SSH2 。Mac OS X 已经深深吸引了很多信息技术公司的注意力,那些公司正准备将开放源代码的、而且基于业界标准的解决方案进行再开发,并应用到不同的领域中去。苹果公司的服务器和存储产品,鼎承了苹果公司一贯的性价比高且简单易用的特点,将苹果传统的桌面解决方案,拓展到了企业数据中心,校园系统和小型商用系统中。
102 版本的 Mac OS X 的代号为 Jaguar ,它是一个不同一般的 *** 作系统。它将 UNIX 坚固的可靠性同 Macintosh 的易用性结合到一起。这一版本的 Mac OS X 具有同运行它的电脑一样的创新性。无论您是一位正准备升级的 Mac 用户,或者一个正准备转用 Mac 的 Windows 用户,还是一位喜欢在顶级 BSD UNIX 系统上想使用一些重要应用程序的 UNIX 用户,如 Microsoft Office , 102 版本的 Mac OS X 就是您所需要的 *** 作系统。
在Mac OS X诱人和易用的界面下,你会发现一个工业级、基于UNIX的平台,叫做 Darwin,它的目标是为了得到出众的稳定性和性能。Darwin 是苹果工程师和开放源代码软件共同体的编程人员的共同结晶。
在Darwin的核心使用的是BSD。如果你是一个坚定的喜欢底层技术的人,你会喜欢从终端中得到的一个完全的命令列表。开发人员将会很高兴地看到将已有的UNIX应用程序移植到Mac OS X中是多么容易。另外,Mac OS X还含有久经考验的BSD网络堆栈,它是今天网络中多数TCP/IP设备的核心。
最重要的是,Darwin是在苹果电脑开放源代码许可下发布的,所以世界范围的工程师都能够帮助苹果将Mac OS X做成这个星球上最好的 *** 作系统。
希望大家多多支持Macintosh,其实苹果机在国外是比较普遍的,不是平设专用,日本就有很多爱好者,基于Unix平台使其在使用方便前提下稳定性非常之高,是基于Dos平台的windows用户所无法想像的,两者在设计之初选择就不一样。Guy "Bud" Tribble 是Sun公司Java系统的首席设计师。他是面向对象程序设计和用户界面设计方面的业内著名专家。例如他作为Netscape的创建人之一,曾在NEXTSTEP *** 作系统设计中担任主要设计师。在此之前,他在Apple公司主管Macintosh 软件工程所有开发项目,包括软件设计、用户界面设计和软件应用。Tribble在生物物理学领域取得学士学位,在神经生理学领域取得硕士和博士学位。
Windows
美国的Microsoft公司,�即�DOS� *** 作系统的研制者,�在八十年代后期推出了
Windows *** 作系统。特别是Windows 30 及 31出现后,已使得 *** 作PC机的方式
以及软件开发过程发生了革命性的变化。各类与计算机有关的人员,纷纷行动起来,
学习、使用、研究Windows,开发Windows应用程序,形成了一股潮热。现在我们所
见到的Windows31 是Windows单用户版中最新的、功能十分完美的版本。
大家都十分熟悉的DOS *** 作系统,多年来已成为PC机事实上的 *** 作系统标
准。DOS从八十年代初推出以来,深受PC机用户的欢迎,版本不断翻印,最新
的版本已到了60版。只要是接触过PC机的人,�谁都会在DOS下“来几手”:
敲入DIR即可查看所要的文件;运行某个字处理程序即可制作一篇电子稿件;制
表、画图,然后打印出来。一切似乎都可以完成。事实上,在DOS系统下所开发
的应用软件数量庞大、种类齐全、流传面广,DOS及其应用软件已是一个体系比
较完整的王国。1993年8月,DOS的研制者Microsoft公司已宣布,自MS—DO
S6后,不再研制新的版本,并且也不再为DOS下的各种应用软件开发新的版本
!DOS的发展已划上了句号。
这样的事实似乎难以接受。其根本原因,在于DOS“外面的世界”确实很精
彩,这就是Windows。据统计,在国外,Windows已卖出了几千万套PC机,尤其是
高档PC,几乎每台机器都配有Windows。与DOS相比,Windows的优势十分明显,
这就是:
它提供了一种不同于以往命令行的手段,�对计算机的 *** 作是通过对“窗口”
、“对话标”、“图标”、“菜单”等图形画面和符号的 *** 作来实现的。用户 *** 作
的方式,可以用键盘,而更多的则是用鼠标来实现的,鼠标点击之间,选择、运行
、调度便轻易地完成。
各种应用软件,包括Windows本身,均采用相同的 *** 作方式,易学、易撑握。
这种 *** 作方式更接近于人们的正常思维,就象在真正的办公桌上处理事务一样,而
且,只要掌握了这种 *** 作方式,则在各种软件,�包括未来的软件都能使用,�因为
Windows及其应用程序采用了统一的界面和 *** 作方式。�这就使得计算机的方式越来
越简单化、生活化。
在Windows里,可以同时运用多种程序,执行多种任务,各程序和各任务之间
既能很容易地转换,又可方便地交换信息。Windows31为信息交换提供了三种标准
机制:裁剪板(静态数据传输)、DDE(动态数据交换)和OLE(对象的连接
与嵌入)。利用裁剪板,各种程序之间的数据可以相互交换,数据得到了充分的再
利用。利用DDE和OLE,使得信息交换自动完成,在一个程序中对数据的修改
,立即在另一个程序中反映出实现了 *** 作环境的集成和自动化。
与标准的MS一DOS相比,Windows能更充分地利用内存。Windows标准模
式和386增强模式两种运行方式,整个系统是在CPU的保护方式下运行的,�应用
程序都可突破640KB的内存限制,可以利用计算机的所有内存,还可以用硬盘
来作为虚拟存储器,并且不需专门的硬作和驱动程序。
Windows各应用程序之间风格一致。只要学会了某些基本技巧,就可以充分利
用各种各样的程序和工具。而且Windows(尤其是Windows31�)软件包本身就带有
许多方便、实用的工具,可完成日常事务管理、字处理、画图以及通信等功能。如
果再配上专门的软件,更是如虎添翼,得心应手。
Windows开发环境及各种支持软件日益成熟。几乎所有的主要PC软件都有支
持Windows的版本。Microsoft在介绍Windows31的同时还推出了它的软件开发工具
包SDK31,使得用户也能方便地开发出具有Windows窗口特点和功能的应用程序。�
各程序开发语言也纷纷支持Windows。特别是Microsoft C/C++70和Borland C++3
1对Windows开发环境的支持更是日趋成熟,使得软件开发工作越来越方便。
为了使MS一DOS的用户能够继续使用已有的软件,Windows�保持了与M
S一DOS的相容性。DOS程序和Windows程序一样,也可以在Windows上运行。
Windows所采用的这一策略,保护了用户的现有软件投资。
Wondows之所以深受人们欢迎,迅速占领市场,除了Windows的优点,还因为D
OS本身具有的局限性。确实,DOS“内部的世界”已很无奈。这主要表现在:
MS一DOS所基于的指令,一直是以最初的Intel 8088为基础的,即使
是到了486,仍主要运行在它的与8088兼容的“实模式”下,�而这种模式下的寻址
能力仅有1兆,去掉一些系统程序,留下的RAM空间只有640MB。而要突破
此640MB的内存限制,即使是在MS一DOS6下,也没有什么好的办法。这
小容量的内存,对于今天软件的运行,当然是“带着镣铐跳 ”,实在是无奈之至
。
NS一DOS本质上是一个单用户单任务的 *** 作系统,�它同时只能运行一道程
序。但在实际工作时,同时要处理多项任务,而这时的MS一DOS无论怎样努力
,都显得“笨手笨脚”。
MS一DOS提供的是一个字符命令行方式的交互 *** 作平台,�完成一项任务
,必须记信住一条命令和它的“语法”,这对于初学者而言,不是一件很容易的事
情,需要一个相当的学习过程。
从开发人员角度来看,MS一DOS所提供的服务支持过于简单,所完成的
功能很有限,它没有在系统级提供硬件设备的驱动程序和编程接口,软件开发人员
必须花费大量重复劳动为其应用程序编写设备驱动程序。事实上,每个商业应用软
件都自成体系,一切都是从底层编起。这种情形,也使硬件制造商难于推广新的硬
件设备。
应用程序界面“千人千面”。�由于MS一DOS没有为应用程序的用户界面
提供标准的编程接口,不同应用程序具有不同的用户 *** 作方式,用户每拿到一个新
程序,都得从头学起,慢慢才能熟悉它的“面孔”,很不利于用户快速地学习和掌
握新的应用程序。
从上述比较我们可以看出:MS一DOS虽然不PC机的普及和发展起了巨大
作用,并已为广大用户所接受,但在发展过程序中,它所固有的一些缺陷也暴露了
出来。虽然MS一DOS及其应用程序还会在相当长在时间内继续使用,但它的发
展确实到了尽头。而从MS一DOS上成长起来的Windows由于采用了新技术,�弥
补了MS—DOS的不足之处,目前正保持着方兴未艾的势头。从技术发展的角度
看,由MS—DOS走向Windows,是PC机技术发展的必然趋势。�对广大用户而
言,应在了解和掌握MS—DOS的技术上,着手了解、学习、掌握,并最终将 ***
作环境由MS—DOS变为Windows。
Linux
Linux 是一套 Unix-like 的 *** 作系统,是 Unix 的一种,它控制整个系统基本服务的核心程序 (kernel) 是由 Linus 带头开发出来的,“Linux”这个名称便是以“Linus's unix”来命名,Linus 选择用大众公有版权 (GPL)的方式来发行这份程序,这个版权允许任何人以任何形式复制与散布 Linux 的原始程序,换句话说,Linux 实际上是免费的,使用者在网络上就可以抓到 Linux 的原始程序代码,随心所欲的复制与更改 Linux 的原始程序,在因特网的日渐盛行以及 Linux 开放自由的版权之下,吸引了无数计算机高手投入开发、改善 Linux 的核心程序,使得 Linux 的功能日见强大,所以今日我们可以在网络上免费下载 Linux 使用,或者花很少的一点费用就可以取得 Linux 光盘,这都是因为 Linux 是 GPL 版权的缘故。
除了核心程序以外,一个 *** 作系统还需要其它的系统程序跟应用程序才有实用性,Linux 系统中常用的系统程序大部份是美国自由软件基金会 (Free Software Foundation) 开发出来的软件,而且也有不少机构或个人为 Linux 开发应用程序,这些程序一样大多都是自由软件,任何人都可以免费的在网络上取得,不过自行去取得这些程序再一一安装非常不便,于是有些公司或团体就会去搜 集、整合Linux 上的程序,把「核心-系统程序-应用程序」总合起来构成一个完整的 *** 作系统,让一般使用者可以简便的安装完整个系统,这就是所谓的「安装软件包」 (distribution),我们一般讲的 Linux 系统便是针对这些安装软件包而言,同样是 Linux 系统,却分成不同公司、机构整合出来的不同安装软件包,这就是大家常常在网络上看到 Linux 有那么多「种」的原因。
Linux 具有 Unix 系统的程序接口跟 *** 作方式,也继承了 Unix 稳定有效率的特点。网络上安装Linux 的主机连续运做一年以上而不曾当机、不必关机是稀松平常的事,不过 Linux 却不象一般 Unix 要负担庞大的版权费用,也不需要在专属的昂贵硬件上才可以使用;Linux 可以在一般的 i386 PC 上执行,效能又高,自然而然的接收了过去几十年来在 Unix 上累积的程序资源跟使用者,加上 GPL 的版权允许大家自由散布 Linux 的原始码,并针对自己的需求修改程序,使得 Linux 在目前已经成为非常受人欢迎的一个多人多任务、免费、稳定、效率高、可以在包括 i386、Sparc、Alpha、Mips、PPC 等众多不同计算机系统平台上执行的 *** 作系统。
Linux支持多种硬件装置,诸如x86、Motorola 68k、Digital Alpha、Sparc、Mips、Motorola PowerPC和ARM等等。由于程序代码公开,硬件厂商无须多付额外的版权费用,便得以替自行生产的硬件装置开发适用于Linux的驱动程序,提高产品 销售率。软件方面,如X,为窗口系统的工业标准;另外,由理察•史托曼主导的Emacs,提供窗口版和文字版的文书编辑环境,功能复杂强大,有一套完整的在线说明档 案;而众人合作开发的SpreadSheet,是窗口版的电子表格,任何熟稔Lotus 1-2-3的人,看到这样丰硕的成果,都会有莫名的感动的。当然,最为人称道的,是Linux的网络能力,不论是SLIP、PPP、NetBEUI、 DDP、X25还是ISDN等等,Linux都有相应的软件供应;而稳定的服务器功能,适用于架设Intranet和Internet。
一般用户受益于GNU GPL和LGPL的保护,可以不同的管道取得完整的Linux,故而Linux可以是免费的(gratis)。相对于Unix昂贵的版权费用,Linux称得上是物美价廉。
除此以外,Linux还具有如下的特色∶
• 具备多人多任务∶这表示Linux可以在同一段时间内服务许多人各别的需求。形象一点讲,你可以一边听铁达尼号的原声CD,一边编辑文书,一边又在打印档案,还可以随时玩X版的俄罗斯方块。
• 支持多CPU∶这绝对不是NT的专利,Linux也支持这种硬件架构,代表着更快速的运算和革命性的算法即将成为时代的主流。
• RAM保护模式∶程序(processes)之间不会互相干扰,保证系统能常久运作无误。根据许多人下载系统评量程序(benchmarks)以测试 Linux的执行效能,结果发现单单是配备486CPU的PC,效能便足堪媲美升阳(Sun)或是迪吉多的中级工作站了。
• 动态加载程序∶当程序加载RAM执行时,Linux仅将磁盘中相关的程序模块加载,有效地提升了执行的速率和RAM的管理。
• 动态连结共享程序馆∶这表示执行档的大小大量地减少,有助于节省磁盘空间。
• 支持多种档案系统∶如Minix、Xenix、System V等等著名的 *** 作系统。将来NT的NTFS也会列入支持的。
• 看得见DOS∶这是所谓的透明化(transparency);把DOS的FAT档案系统视为特殊的远程档案系统,不需任何特别的指令便可以灵活运用,就如同一个在Linux底下存在的目录一样。
Linux的发展
在1991年的八月,网络上出现了一篇以此为开篇话语的帖子——这是一个芬兰的名为Linus Torvalds的大学生为自己开始写作一个类似minix,可运行在386上的 *** 作系统寻找志同道合的合作伙伴。
1991年10月5日,Linus Torvalds在新闻组composminix发布了大约有一万行代码的Linux v001版本。
到了1992年,大约有1000人在使用Linux,值得一提的是,他们基本上都属于真正意义上的hacker。
1993年,大约有100余名程序员参与了Linux内核代码编写/修改工作,其中核心组由5人组成,此时Linux 099的代码有大约有十万行,用户大约有10万左右。
1994年3月,Linux10发布,代码量17万行,当时是按照完全自由免费的协议发布,随后正式采用GPL协议。至此, Linux的代码开发进入良性循环。很多系统管理员开始在自己的 *** 作系统环境中尝试linux,并将修改的代码提交给核心小组。由于拥有了丰富的 *** 作系统 平台,因而 Linux的代码中也充实了对不同硬件系统的支持,大大的提高了跨平台移植性。
1995年,此时的Linux 可在Intel、Digital 以及Sun SPARC处理器上运行了,用户量也超过了50万,相关介绍Linux的Linux Journal杂志也发行了超过10万册之多。
1996年6月,Linux 20内核发布,此内核有大约40万行代码,并可以支持多个处理器。此时的Linux 已经进入了实用阶段,全球大约有350万人使用。
1997年夏,大片《泰坦尼克号》在制作特效中使用的160台Alpha图形工作站中,有105台采用了Linux *** 作系统。
1998年是Linux迅猛发展的一年。1月,小红帽高级研发实验室成立,同年RedHat 50获得了InfoWorld的 *** 作系统奖项。4月Mozilla 代码发布,成为linux图形界面上的王牌浏览器。Redhat 宣布商业支持计划,网络了多名优秀技术人员开始商业运作。王牌搜索引擎"Google"现身,采用的也是Linux服务器。值得一提的是, Oracle 和Informix 两家数据库厂商明确表示不支持Linux,这个决定给予了Mysql数据库充分的发展机会。同年10月,Intel和Netscape宣布小额投资红帽软 件,这被业界视作Linux获得商业认同的信号。同月,微软在法国发布了反Linux公开信,这表明微软公司开始将Linux视作了一个对手来对待。十二 月,IBM发布了适用于Linux的文件系统AFS 35以及Jikes Java 编辑器和Secure Mailer及DB2测试版,IBM的此番行为,可以看作是与Linux羞答答地第一次亲密接触。迫于Windows和Linux的压力,Sun逐渐开放 了Java协议,并且在UltraSparc上支持Linux *** 作系统。1998年可说是Linux与商业接触的一年。
1999年,IBM宣布与Redhat公司建立伙伴关系,以确保Redhat在IBM机器上正确运行。三月,第一届 LinuxWorld 大会的召开,象征Linux时代的来临。IBM、Compaq和Novell宣布投资Redhat公司,以前一直对Linux持否定态度的Oracle公 司也宣布投资。五月,SGI公司宣布向Linux移植其先进的XFS文件系统。对于服务器来说,高效可靠的文件系统是不可或缺的,SGI的慷慨移植再一次 帮助了Linux确立在服务器市场的专业性。7月IBM启动对Linux的支持服务和发布了Linux DB2,从此结束了Linux得不到支持服务的历史,这可以视作Linux真正成为服务器 *** 作系统一员的重要里程碑。
2000年初始,Sun公司在Linux的压力下宣布Solaris8降低售价。事实上Linux对Sun造成的冲击远比对 Windows来得更大。 2月Red Hat发布了嵌入式Linux的开发环境,Linux在嵌入式行业的潜力逐渐被发掘出来。在4月,拓林思公司宣布了推出中国首家Linux工程师认证考 试,从此使Linux *** 作系统管理员的水准可以得到权威机构的资格认证,此举大大增加了国内Linux爱好者学习的热情。伴随着国际上的Linux热潮, 国内的联想和联邦推出了"幸福Linux家用版",同年7月中科院与新华科技合作发展红旗Linux, 此举让更多的国内个人用户认识到了存在着Linux这个 *** 作系统。11月,Intel 与 Xteam合作,推出基于Linux的网络专用服务器,此举结束了在Linux单向顺应硬件商硬件开发驱动的历史。
2001月新年依使就爆出新闻,Oracle宣布在OTN上的所有会员都可免费索取Oracle 9i的Linux版本,从几年前的"绝不涉足Linux系统"到如今的主动献媚,足以体现Linux的发展迅猛。IBM则决定投入10亿美元扩大 Linux系统的运用,此举犹如一针强心剂,令华尔街的投资者们闻风而动。到了5月这个初夏的时节,微软公开反对"GPL"引起了一场大规模的论战。8月 红色代码爆发,引得许多站点纷纷从windows *** 作系统转向linux *** 作系统,虽然是一次被动的转变,不过也算是一次应用普及吧。12月Red Hat 为IBM s/390大型计算机提供了Linux解决方案,从此结束了AIX孤单独行无人伴的历史。
2002年是Linux企业化的一年。2月,微软公司迫于各洲政府的压力,宣布扩大公开代码行动,这可是Linux开源带来的深刻影响的结果。3月,内核开发者宣布新的Linux系统支持64位的计算机。
2003年1月,NEC宣布将在其手机中使用Linux *** 作系统,代表着Linux成功进军手机领域。5月之中SCO表示就 Linux使用的涉嫌未授权代码等问题对IBM进行起诉,此时人们才留意到,原本由SCO垄断的银行/金融领域,份额已经被Linux抢占了不少,也难怪 SCO如此气急败坏了。9 月中科红旗发布Red Flag Server4版本,性能改进良多。11月IBM注资Novell以21亿收购SuSE,同期Redhat计划停止免费的Linux,顿时业内骂声四 起。Linux在商业化的路上渐行渐远。
2004年的第1月,本着"天下事分久必合,合久必分"之天理,SuSE嫁到了Novell,SCO继续顶着骂名四处强行"化缘 ", Asianux, MandrakeSoft也在五年中首次宣布季度赢利。3月SGI宣布成功实现了Linux *** 作系统支持256个Itanium 2处理器。4月里美国斯坦福大学Linux大型机系统被黑客攻陷,再次证明了没有绝对安全的OS。六月的统计报告显示在世界500强超级计算机系统中,使 用Linux *** 作系统的已经占到了280席,抢占了原本属于各种Unix的份额。9月HP开始网罗Linux内核代码人员,以影响新版本的内核朝对HP有 利的方式发展,而IBM则准备推出OpenPower服务器,仅运行Linux系统。
Linux的应用
没有商业活动,就没有Linux;没有信息自由的自觉,更不可能有Linux。Linux除了是优良的软件开发平台之外,也是工作、家居的好伙伴。有人说∶有了Linux,就等于有了阿拉神灯。此言不假矣。又有人说∶到现在还没有移植到Linux的软件,肯定是一点价值也没有的。这话也不差呀。
Linux的发展证实了信息会愈来愈便宜的趋势;因为便宜,市场便无限扩张。商业活动也转向为以服务为导向的型态。最直接的案例便是ISP的应用。Linux可以用来架设ISP!
Linux Journal的发行人SSC(Specialized System Consultants)便是以Linux做为网络拨接服务平台的。要成为ISP业者,需要有连接至因特网的能力,多序列阜拨接服务(如 Cycades、Maxspeed、Gtek等公司所提供的软件系统),PPP和SLIP的服务,Usenet新闻群组(如INN),邮件递送(如 sendmail),网页服务器(如Apache),备份功能(如tar、cpio)等等的应用软件。由此观察,主要的控制成本会落在因特网的通讯租费 上,投资Linux的费用是非常低的。
下面是比较著名、流行的Linux发行版本
Mandriva
Mandriva原名Mandrake,最早由Gaël Duval创建并在1998年7月发布。记得前两年国内刚开始普及Linux时,Mandrake非常流行。说起Mandrake的历史,其实最早 Mandrake的开发者是基于Redhat进行开发的。Redhat默认采用GNOME桌面系统,而Mandrake将之改为KDE。而由于当时的 Linux普遍比较难安装,不适合第一次接触Linux的新手,所以Mandrake还简化了安装系统。我想这也是当时Mandrake在国内如此红火的 原因之一。Mandrake在易用性方面的确是下了不少功夫,包括默认情况下的硬件检测等。
Mandrake的开发完全透明化,包括“cooker”。当系统有了新的测试版本后,便可以在cooker上找到。之前Mandrake的新版本的发布速度很快,但从90之后便开始减缓。估计是希望能够延长版本的生命力以确保稳定和安全性。
优点:友好的 *** 作界面,图形配置工具,庞大的社区技术支持,NTFS分区大小变更
缺点:部分版本bug较多,最新版本只先发布给Mandrake俱乐部的成员
你自已挑吧!!!
点击上方 蓝色字体 ,选择“置顶公众号”
优质文章,第一时间送达
链接 | blogcsdnnet/hayre/article/details/80628431
1MongoDB是什么?用一句话总结
MongoDB是一款为web应用程序和互联网基础设施设计的数据库管理系统。没错MongoDB就是数据库,是NoSQL类型的数据库。
(1)MongoDB提出的是文档、集合的概念,使用BSON(类JSON)作为其数据模型结构,其结构是面向对象的而不是二维表,存储一个用户在MongoDB中是这样子的。
使用这样的数据模型,使得MongoDB能在生产环境中提供高读写的能力,吞吐量较于mysql等SQL数据库大大增强。
(2)易伸缩,自动故障转移。易伸缩指的是提供了分片能力,能对数据集进行分片,数据的存储压力分摊给多台服务器。自动故障转移是副本集的概念,MongoDB能检测主节点是否存活,当失活时能自动提升从节点为主节点,达到故障转移。
(3)数据模型因为是面向对象的,所以可以表示丰富的、有层级的数据结构,比如博客系统中能把“评论”直接怼到“文章“的文档中,而不必像myqsl一样创建三张表来描述这样的关系。
3主要特性
(1)文档数据类型
SQL类型的数据库是正规化的,可以通过主键或者外键的约束保证数据的完整性与唯一性,所以SQL类型的数据库常用于对数据完整性较高的系统。MongoDB在这一方面是不如SQL类型的数据库,且MongoDB没有固定的Schema,正因为MongoDB少了一些这样的约束条件,可以让数据的存储数据结构更灵活,存储速度更加快。 (2)即时查询能力
MongoDB保留了关系型数据库即时查询的能力,保留了索引(底层是基于B tree)的能力。这一点汲取了关系型数据库的优点,相比于同类型的NoSQL redis 并没有上述的能力。 (3)复制能力
MongoDB自身提供了副本集能将数据分布在多台机器上实现冗余,目的是可以提供自动故障转移、扩展读能力。 (4)速度与持久性
MongoDB的驱动实现一个写入语义 fire and forget ,即通过驱动调用写入时,可以立即得到返回得到成功的结果(即使是报错),这样让写入的速度更加快,当然会有一定的不安全性,完全依赖网络。
MongoDB提供了Journaling日志的概念,实际上像mysql的bin-log日志,当需要插入的时候会先往日志里面写入记录,再完成实际的数据 *** 作,这样如果出现停电,进程突然中断的情况,可以保障数据不会错误,可以通过修复功能读取Journaling日志进行修复。
(5)数据扩展
MongoDB使用分片技术对数据进行扩展,MongoDB能自动分片、自动转移分片里面的数据块,让每一个服务器里面存储的数据都是一样大小。
MongoDB核心服务器主要是通过mongod程序启动的,而且在启动时不需对MongoDB使用的内存进行配置,因为其设计哲学是内存管理最好是交给 *** 作系统,缺少内存配置是MongoDB的设计亮点,另外,还可通过mongos路由服务器使用分片功能。
MongoDB的主要客户端是可以交互的js shell 通过mongo启动,使用js shell能使用js直接与MongoDB进行交流,像使用sql语句查询mysql数据一样使用js语法查询MongoDB的数据,另外还提供了各种语言的驱动包,方便各种语言的接入。
mongodump和mongorestore,备份和恢复数据库的标准工具。输出BSON格式,迁移数据库。
mongoexport和mongoimport,用来导入导出JSON、CSV和TSV数据,数据需要支持多格式时有用。mongoimport还能用与大数据集的初始导入,但是在导入前顺便还要注意一下,为了能充分利用好mongoDB通常需要对数据模型做一些调整。
mongosniff,网络嗅探工具,用来观察发送到数据库的 *** 作。基本就是把网络上传输的BSON转换为易于人们阅读的shell语句。
因此,可以总结得到,MongoDB结合键值存储和关系数据库的最好特性。因为简单,所以数据极快,而且相对容易伸缩还提供复杂查询机制的数据库。MongoDB需要跑在64位的服务器上面,且最好单独部署,因为是数据库,所以也需要对其进行热备、冷备处理。
因为本篇文章不是API手册,所有这里对shell的使用也是基础的介绍什么功能可以用什么语句,主要是为了展示使用MongoDB shell的方便性,如果需要知道具体的MongoDB shell语法可以查阅官方文档。
创建数据库并不是必须的 *** 作,数据库与集合只有在第一次插入文档时才会被创建,与对数据的动态处理方式是一致的。简化并加速开发过程,而且有利于动态分配命名空间。如果担心数据库或集合被意外创建,可以开启严格模式。
以上的命令只是简单实例,假设如果你之前没有学习过任何数据库语法,同时开始学sql查询语法和MongoDB 查询语法,你会发现哪一个更简单呢?如果你使用的是java驱动去 *** 作MongoDB,你会发现任何的查询都像Hibernate提供出来的查询方式一样,只要构建好一个查询条件对象,便能轻松查询(接下来会给出示例),博主之前熟悉ES6,所以入手MongoDB js shell完成没问题,也正因为这样简洁,完善的查询机制,深深的爱上了MongoDB。
使用java驱动链接MongoDB是一件非常简单的事情,简单的引用,简单的做增删改查。在使用完java驱动后我才发现spring 对MongoDB 的封装还不如官方自身提供出来的东西好用,下面简单的展示一下使用。
这里只举例了简单的链接与简单的MongoDB *** 作,可见其 *** 作的容易性。使用驱动时是基于TCP套接字与MongoDB进行通信的,如果查询结果较多,恰好无法全部放进第一服务器中,将会向服务器发送一个getmore指令获取下一批查询结果。
插入数据到服务器时间,不会等待服务器的响应,驱动会假设写入是成功的,实际是使用客户端生成对象id,但是该行为可以通过配置配置,可以通过安全模式开启,安全模式可以校验服务器端插入的错误。
要清楚了解MongoDB的基本数据单元。在关系型数据库中有带列和行的数据表。而MongoDB数据的基本单元是BSON文档,在键值中有指向不定类型值的键,MongoDB拥有即时查询,但不支持联结 *** 作,简单的键值存储只能根据单个键来获取值,不支持事务,但支持多种原子更新 *** 作。
如读写比是怎样的,需要何种查询,数据是如何更新的,会不会存在什么并发问题,数据结构化的程度是要求高还是低。系统本身的需求决定mysql还是MongoDB。
在关于schema 的设计中要注意一些原则,比如:
数据库是集合的逻辑与物理分组,MongoDB没有提供创建数据库的语法,只有在插入集合时,数据库才开始建立。创建数据库后会在磁盘分配一组数据文件,所有集合、索引和数据库的其他元数据都保存在这些文件中,查阅数据库使用磁盘状态可通过。
集合是结构上或概念上相似得文档的容器,集合的名称可以包含数字、字母或 符号,但必须以字母或数字开头,完全。
限定集合名不能超过128个字符,实际上 符号在集合中很有用,能提供某种虚拟命名空间,这是一种组织上的原则,和其他集合是一视同仁的。在集合中可以使用。
其次是键值,在MongoDB里面所有的字符串都是UTF-8类型。数字类型包括double、int、long。日期类型都是UTC格式,所以在MongoDB里面看到的时间会比北京时间慢8小时。整个文档大小会限制在16m以内,因为这样可以防止创建难看的数据类型,且小文档可以提升性能,批量插入文档理想数字范围是10~200,大小不能超过16MB。
(2)解析查询时MongoDB通过最优计划选择一个索引进行查询,当没有最适合索引时,会先不同的使用各个索引进行查询,最终选出一个最优索引做查询
(3)如果有一个a-b的复合索引,那么仅针对a的索引是冗余的
(4)复合索引里的键的顺序是很重要的
(2)复合索引
(3)唯一性索引
(4)稀疏索引
如索引的字段会出现的值,或是大量文档都不包含被索引的键。
如果数据集很大时,构建索引将会花费很长的时间,且会影响程序性能,可通过
当使用 mongorestore 时会重新构建索引。当曾经执行过大规模的删除时,可使用
对索引进行压缩,重建。
(1)查阅慢查询日志
(2)分析慢查询
注意新版本的MongoDB 的explain方法是需要参数的,不然只显示普通的信息。
本节同样主要简单呈现MongoDB副本集搭建的简易性,与副本集的强壮性,监控容易性
提供主从复制能力,热备能力,故障转移能力
实际上MongoDB对副本集的 *** 作跟mysql主从 *** 作是差不多的,先看一下mysql的主从数据流动过程
而MongoDB主要依赖的日志文件是oplog
写 *** 作先被记录下来,添加到主节点的oplog里。与此同时,所有从结点复制oplog。首先,查看自己oplog里最后一条的时间戳;其次,查询主节点oplog里所有大于此时间戳的条目;最后,把那些条目添加到自己的oplog里并应用到自己的库里。从节点使用长轮询立即应用来自主结点oplog的新条目。
当遇到以下情况,从节点会停止复制
local数据库保存了所有副本集元素据和oplog日志
可以使用以下命令查看复制情况
每个副本集成员每秒钟ping一次其他所有成员,可以通过rsstatus看到节点上次的心跳检测时间戳和 健康 状况。
这个点没必要过多描述,但是有一个特殊场景,如果从节点和仲裁节点都被杀了,只剩下主节点,他会把自己降级成为从节点。
如果主节点的数据还没有写到从库,那么数据不能算提交,当该主节点变成从节点时,便会触发回滚,那些没写到从库的数据将会被删除,可以通过rollback子目录中的BSON文件恢复回滚的内容。
只能链接到主节点,如果链接到从节点的话,会被拒绝写入 *** 作,但是如果没有使用安全模式,因为mongo的fire and forget 特性,会把拒绝写入的异常给吃掉。
(2)使用副本集方式链接
能根据写入的情况自动进行故障转移,但是当副本集进行新的选举时,还是会出现故障,如果不使用安全模式,依旧会出现写不进去,但现实成功的情况。
分片是数据库切分的一个概念实现,这里也是简单总结为什么要使用分片以及分片的原理, *** 作。
当数据量过大,索引和工作数据集占用的内存就会越来越多,所以需要通过分片负载来解决这个问题
(2)分片的核心 *** 作
分片一个集合:分片是根据一个属性的范围进行划分的,MongoDB使用所谓的分片键让每个文档在这些范围里找到自己的位置
块:是位于一个分片中的一段连续的分片键范围,可以理解为若干个块组成分片,分片组成MongoDB的全部数据
(3)拆分与迁移
块的拆分:初始化时只有一个块,达到最大块尺寸64MB或100000个文档就会触发块的拆分。把原来的范围一分为二,这样就有了两个块,每个块都有相同数量的文档。
迁移:当分片中的数据大小不一时会产生迁移的动作,比如分片A的数据比较多,会将分片A里面的一些块转移到分片B里面去。分片集群通过在分片中移动块来实现均衡,是由名为均衡器的软件进程管理的,任务是确保数据在各个分片中保持均匀分布,当集群中拥有块最多的分片与拥有块最少分片的块差大于8时,均衡器就会发起一次均衡处理。
启动两个副本集、三个配置服务器、一个mongos进程
配置分片
(2)索引
分片集合只允许在_id字段和分片键上添加唯一性索引,其他地方不行,因为这需要在分片间进行通信,实施起来很复杂。
当创建分片时,会根据分片键创建一个索引。
(2)低效的分片键
(3)理想的分片键
根据不同的数据中心划分
(2)最低要求
(3)配置的注意事项
需要估计集群大小,可使用以下命令对现有集合进行分片处理
(4)备份分片集群
备份分片时需要停止均衡器
使用64位机器、32位机器会制约mongodb的内存,使其最大值为15GB
(2)cpu mongodb 只有当索引和工作集都可放入内存时,才会遇到CPU瓶颈,CPU在mongodb使用中的作用是用来检索数据,如果看到CPU使用饱和的情况,可以通过查询慢查询日志,排查是不是查询的问题导致的,如果是可以通过添加索引来解决问题
mongodb写入数据时会使用到CPU,但是mongodb写入时间一次只用到一个核,如果有频繁的写入行为,可以通过分片来解决这个问题 (3)内存
大内存是mongodb的保障,如果工作集大小超过内存,将会导致性能下降,因为这将会增加数据加载入内存的动作
(4)硬盘
mongodb默认每60s会与磁盘强制同步一次,称为后台刷新,会产生I/O *** 作。在重启时mongodb会将磁盘里面的数据加载至内存,高速磁盘将会减少同步的时间
(5)文件系统
使用ext4 和 xfs 文件系统
禁用最后访问时间
(6)文件描述符
linux 默认文件描述符是1024,需要大额度的提升这个额度
(7)时钟
mongodb各个节点服务器之间使用ntp服务器
启动时使用 - -bind_ip 命令
(2)身份验证
启动时使用 - -auth 命令
(3)副本集身份认证
使用keyFile,注意keyFile文件的权限必须是600,不然会启动不起来
搭建副本集至少需要两个节点,其中仲裁结点不需要有自己的服务器
(2)Journaling日志 写数据时会先写入日志,而此时的数据也不是直接写入硬盘,而是写入内存
但是Journaling日志会消耗内存,所以可以在主库上面关闭,在从库上面启动
可以单独为Journaling日志使用一块固态硬盘
在插入时,可以通过驱动确保Journaling插入后再反馈,但是会非常影响性能。
-vvvvv 选项(v越多,输出越详细)
dbrunCommand({logrotare:1}) 开启滚动日志
(2)top
(3)dbcurrentOp
动态展示mongodb活动数据
占用当前mongodb监听端口往上1000号的端口
把数据库内容导出成BSON文件,而mongorestore能读取并还原这些文件
(2)mongorestore
把导出的BSON文件还原到数据库
(3)备份原始数据文件 可以这么做,但是, *** 作之前需要进行锁库处理 dbrunCommand({fsync:1,lock:true}) db$cmdsysunlockfindOne 请求解锁 *** 作,但是数据库不会立刻解锁,需要使用 dbcurrentOp 验证。
dbrunCommand({repairDatabase:1}) 修复单个数据库
修复就是根据Jourling文件读取和重写所有数据文件并重建各个索引 (2)压紧
压紧,会重写数据文件,并重建集合的全部索引,需要停机或者在从库上面运行,如果需要在主库上面运行,需要添加force参数 保证加写锁。
(2)为提升性能检查索引和查询
总的来说,扫描尽可能少的文档。
保证没有冗余的索引,冗余的索引会占用磁盘空间、消耗更多的内存,在每次写入时还需做更多工作
(3)添加内存
dataSize 数据大小 和 indexSize 索引大小,如果两者的和大于内存,那么将会影响性能。
storageSize超过dataSize 数据大小 两倍以上,就会因磁盘碎片而影响性能,需要压缩。
MongoDB是一款为web应用程序和互联网基础设施设计的数据库管理系统。没错MongoDB就是数据库,是NoSQL类型的数据库。
(1)MongoDB提出的是文档、集合的概念,使用BSON(类JSON)作为其数据模型结构,其结构是面向对象的而不是二维表,存储一个用户在MongoDB中是这样子的。
使用这样的数据模型,使得MongoDB能在生产环境中提供高读写的能力,吞吐量较于mysql等SQL数据库大大增强。
(2)易伸缩,自动故障转移。易伸缩指的是提供了分片能力,能对数据集进行分片,数据的存储压力分摊给多台服务器。自动故障转移是副本集的概念,MongoDB能检测主节点是否存活,当失活时能自动提升从节点为主节点,达到故障转移。
(3)数据模型因为是面向对象的,所以可以表示丰富的、有层级的数据结构,比如博客系统中能把“评论”直接怼到“文章“的文档中,而不必像myqsl一样创建三张表来描述这样的关系。
(1)文档数据类型
SQL类型的数据库是正规化的,可以通过主键或者外键的约束保证数据的完整性与唯一性,所以SQL类型的数据库常用于对数据完整性较高的系统。MongoDB在这一方面是不如SQL类型的数据库,且MongoDB没有固定的Schema,正因为MongoDB少了一些这样的约束条件,可以让数据的存储数据结构更灵活,存储速度更加快。
(2)即时查询能力
MongoDB保留了关系型数据库即时查询的能力,保留了索引(底层是基于B tree)的能力。这一点汲取了关系型数据库的优点,相比于同类型的NoSQL redis 并没有上述的能力。
(3)复制能力
MongoDB自身提供了副本集能将数据分布在多台机器上实现冗余,目的是可以提供自动故障转移、扩展读能力。
(4)速度与持久性
MongoDB的驱动实现一个写入语义 fire and forget ,即通过驱动调用写入时,可以立即得到返回得到成功的结果(即使是报错),这样让写入的速度更加快,当然会有一定的不安全性,完全依赖网络。
MongoDB提供了Journaling日志的概念,实际上像mysql的bin-log日志,当需要插入的时候会先往日志里面写入记录,再完成实际的数据 *** 作,这样如果出现停电,进程突然中断的情况,可以保障数据不会错误,可以通过修复功能读取Journaling日志进行修复。
(5)数据扩展
MongoDB使用分片技术对数据进行扩展,MongoDB能自动分片、自动转移分片里面的数据块,让每一个服务器里面存储的数据都是一样大小。
MongoDB核心服务器主要是通过mongod程序启动的,而且在启动时不需对MongoDB使用的内存进行配置,因为其设计哲学是内存管理最好是交给 *** 作系统,缺少内存配置是MongoDB的设计亮点,另外,还可通过mongos路由服务器使用分片功能。
MongoDB的主要客户端是可以交互的js shell 通过mongo启动,使用js shell能使用js直接与MongoDB进行交流,像使用sql语句查询mysql数据一样使用js语法查询MongoDB的数据,另外还提供了各种语言的驱动包,方便各种语言的接入。
mongodump和mongorestore,备份和恢复数据库的标准工具。输出BSON格式,迁移数据库。
mongoexport和mongoimport,用来导入导出JSON、CSV和TSV数据,数据需要支持多格式时有用。mongoimport还能用与大数据集的初始导入,但是在导入前顺便还要注意一下,为了能充分利用好mongoDB通常需要对数据模型做一些调整。
mongosniff,网络嗅探工具,用来观察发送到数据库的 *** 作。基本就是把网络上传输的BSON转换为易于人们阅读的shell语句。
因此,可以总结得到,MongoDB结合键值存储和关系数据库的最好特性。因为简单,所以数据极快,而且相对容易伸缩还提供复杂查询机制的数据库。MongoDB需要跑在64位的服务器上面,且最好单独部署,因为是数据库,所以也需要对其进行热备、冷备处理。
因为本篇文章不是API手册,所有这里对shell的使用也是基础的介绍什么功能可以用什么语句,主要是为了展示使用MongoDB shell的方便性,如果需要知道具体的MongoDB shell语法可以查阅官方文档。
创建数据库并不是必须的 *** 作,数据库与集合只有在第一次插入文档时才会被创建,与对数据的动态处理方式是一致的。简化并加速开发过程,而且有利于动态分配命名空间。如果担心数据库或集合被意外创建,可以开启严格模式。
以上的命令只是简单实例,假设如果你之前没有学习过任何数据库语法,同时开始学sql查询语法和MongoDB 查询语法,你会发现哪一个更简单呢?如果你使用的是java驱动去 *** 作MongoDB,你会发现任何的查询都像Hibernate提供出来的查询方式一样,只要构建好一个查询条件对象,便能轻松查询(接下来会给出示例),博主之前熟悉ES6,所以入手MongoDB js shell完成没问题,也正因为这样简洁,完善的查询机制,深深的爱上了MongoDB。
使用java驱动链接MongoDB是一件非常简单的事情,简单的引用,简单的做增删改查。在使用完java驱动后我才发现spring 对MongoDB 的封装还不如官方自身提供出来的东西好用,下面简单的展示一下使用。
这里只举例了简单的链接与简单的MongoDB *** 作,可见其 *** 作的容易性。使用驱动时是基于TCP套接字与MongoDB进行通信的,如果查询结果较多,恰好无法全部放进第一服务器中,将会向服务器发送一个getmore指令获取下一批查询结果。
插入数据到服务器时间,不会等待服务器的响应,驱动会假设写入是成功的,实际是使用客户端生成对象id,但是该行为可以通过配置配置,可以通过安全模式开启,安全模式可以校验服务器端插入的错误。
要清楚了解MongoDB的基本数据单元。在关系型数据库中有带列和行的数据表。而MongoDB数据的基本单元是BSON文档,在键值中有指向不定类型值的键,MongoDB拥有即时查询,但不支持联结 *** 作,简单的键值存储只能根据单个键来获取值,不支持事务,但支持多种原子更新 *** 作。
如读写比是怎样的,需要何种查询,数据是如何更新的,会不会存在什么并发问题,数据结构化的程度是要求高还是低。系统本身的需求决定mysql还是MongoDB。
在关于schema 的设计中要注意一些原则,比如:
数据库是集合的逻辑与物理分组,MongoDB没有提供创建数据库的语法,只有在插入集合时,数据库才开始建立。创建数据库后会在磁盘分配一组数据文件,所有集合、索引和数据库的其他元数据都保存在这些文件中,查阅数据库使用磁盘状态可通过。
集合是结构上或概念上相似得文档的容器,集合的名称可以包含数字、字母或 符号,但必须以字母或数字开头,完全。
限定集合名不能超过128个字符,实际上 符号在集合中很有用,能提供某种虚拟命名空间,这是一种组织上的原则,和其他集合是一视同仁的。在集合中可以使用。
其次是键值,在MongoDB里面所有的字符串都是UTF-8类型。数字类型包括double、int、long。日期类型都是UTC格式,所以在MongoDB里面看到的时间会比北京时间慢8小时。整个文档大小会限制在16m以内,因为这样可以防止创建难看的数据类型,且小文档可以提升性能,批量插入文档理想数字范围是10~200,大小不能超过16MB。
(1)索引能显著减少获取文档的所需工作量,具体的对比可以通过 explain()方法进行对比
(2)解析查询时MongoDB通过最优计划选择一个索引进行查询,当没有最适合索引时,会先不同的使用各个索引进行查询,最终选出一个最优索引做查询
(3)如果有一个a-b的复合索引,那么仅针对a的索引是冗余的
(4)复合索引里的键的顺序是很重要的
(1)单键索引
(2)复合索引
(3)唯一性索引
(4)稀疏索引
如索引的字段会出现null的值,或是大量文档都不包含被索引的键。
如果数据集很大时,构建索引将会花费很长的时间,且会影响程序性能,可通过
当使用 mongorestore 时会重新构建索引。当曾经执行过大规模的删除时,可使用
对索引进行压缩,重建。
(1)查阅慢查询日志
(2)分析慢查询
注意新版本的MongoDB 的explain方法是需要参数的,不然只显示普通的信息。
本节同样主要简单呈现MongoDB副本集搭建的简易性,与副本集的强壮性,监控容易性
提供主从复制能力,热备能力,故障转移能力
实际上MongoDB对副本集的 *** 作跟mysql主从 *** 作是差不多的,先看一下mysql的主从数据流动过程
而MongoDB主要依赖的日志文件是oplog
写 *** 作先被记录下来,添加到主节点的oplog里。与此同时,所有从结点复制oplog。首先,查看自己oplog里最后一条的时间戳;其次,查询主节点oplog里所有大于此时间戳的条目;最后,把那些条目添加到自己的oplog里并应用到自己的库里。从节点使用长轮询立即应用来自主结点oplog的新条目。
当遇到以下情况,从节点会停止复制
local数据库保存了所有副本集元素据和oplog日志
可以使用以下命令查看复制情况
每个副本集成员每秒钟ping一次其他所有成员,可以通过rsstatus()看到节点上次的心跳检测时间戳和 健康 状况。
这个点没必要过多描述,但是有一个特殊场景,如果从节点和仲裁节点都被杀了,只剩下主节点,他会把自己降级成为从节点。
如果主节点的数据还没有写到从库,那么数据不能算提交,当该主节点变成从节点时,便会触发回滚,那些没写到从库的数据将会被删除,可以通过rollback子目录中的BSON文件恢复回滚的内容。
(1)使用单节点链接
只能链接到主节点,如果链接到从节点的话,会被拒绝写入 *** 作,但是如果没有使用安全模式,因为mongo的fire and forget 特性,会把拒绝写入的异常给吃掉。
(2)使用副本集方式链接
能根据写入的情况自动进行故障转移,但是当副本集进行新的选举时,还是会出现故障,如果不使用安全模式,依旧会出现写不进去,但现实成功的情况。
分片是数据库切分的一个概念实现,这里也是简单总结为什么要使用分片以及分片的原理, *** 作。
当数据量过大,索引和工作数据集占用的内存就会越来越多,所以需要通过分片负载来解决这个问题
(1)分片组件
(2)分片的核心 *** 作
分片一个集合:分片是根据一个属性的范围进行划分的,MongoDB使用所谓的分片键让每个文档在这些范围里找到自己的位置
块:是位于一个分片中的一段连续的分片键范围,可以理解为若干个块组成分片,分片组成MongoDB的全部数据
(3)拆分与迁移
块的拆分:初始化时只有一个块,达到最大块尺寸64MB或100000个文档就会触发块的拆分。把原来的范围一分为二,这样就有了两个块,每个块都有相同数量的文档。
迁移:当分片中的数据大小不一时会产生迁移的动作,比如分片A的数据比较多,会将分片A里面的一些块转移到分片B里面去。分片集群通过在分片中移动块来实现均衡,是由名为均衡器的软件进程管理的,任务是确保数据在各个分片中保持均匀分布,当集群中拥有块最多的分片与拥有块最少分片的块差大于8时,均衡器就会发起一次均衡处理。
启动两个副本集、三个配置服务器、一个mongos进程
配置分片
(1)分片查询类型
(2)索引
分片集合只允许在_id字段和分片键上添加唯一性索引,其他地方不行,因为这需要在分片间进行通信,实施起来很复杂。
当创建分片时,会根据分片键创建一个索引。
(1)分片键是不可修改的、分片键的选择非常重要
(2)低效的分片键
(3)理想的分片键
(1)部署拓扑
根据不同的数据中心划分
这里写描述
(2)最低要求
(3)配置的注意事项
需要估计集群大小,可使用以下命令对现有集合进行分片处理
(4)备份分片集群
备份分片时需要停止均衡器
(1)部署架构
使用64位机器、32位机器会制约mongodb的内存,使其最大值为15GB
(2)cpu
mongodb 只有当索引和工作集都可放入内存时,才会遇到CPU瓶颈,CPU在mongodb使用中的作用是用来检索数据,如果看到CPU使用饱和的情况,可以通过查询慢查询日志,排查是不是查询的问题导致的,如果是可以通过添加索引来解决问题
mongodb写入数据时会使用到CPU,但是mongodb写入时间一次只用到一个核,如果有频繁的写入行为,可以通过分片来解决这个问题
(3)内存
大内存是mongodb的保障,如果工作集大小超过内存,将会导致性能下降,因为这将会增加数据加载入内存的动作
(4)硬盘
mongodb默认每60s会与磁盘强制同步一次,称为后台刷新,会产生I/O *** 作。在重启时mongodb会将磁盘里面的数据加载至内存,高速磁盘将会减少同步的时间
(5)文件系统
使用ext4 和 xfs 文件系统
禁用最后访问时间
(6)文件描述符
linux 默认文件描述符是1024,需要大额度的提升这个额度
(7)时钟
mongodb各个节点服务器之间使用ntp服务器
(1)绑定IP
启动时使用 - -bind_ip 命令
(2)身份验证
启动时使用 - -auth 命令
(3)副本集身份认证
使用keyFile,注意keyFile文件的权限必须是600,不然会启动不起来
(1)拓扑结构
搭建副本集至少需要两个节点,其中仲裁结点不需要有自己的服务器
(2)Journaling日志
写数据时会先写入日志,而此时的数据也不是直接写入硬盘,而是写入内存
但是Journaling日志会消耗内存,所以可以在主库上面关闭,在从库上面启动
可以单独为Journaling日志使用一块固态硬盘
在插入时,可以通过驱动确保Journaling插入后再反馈,但是会非常影响性能。
logpath 选项指定日志存储地址
-vvvvv 选项(v越多,输出越详细)
dbrunCommand({logrotare:1}) 开启滚动日志
(1)serverStatus
这里写描述
(2)top
(3)dbcurrentOp()
动态展示mongodb活动数据
占用当前mongodb监听端口往上1000号的端口
(1)mongodump
把数据库内容导出成BSON文件,而mongorestore能读取并还原这些文件
(2)mongorestore
把导出的BSON文件还原到数据库
(3)备份原始数据文件
可以这么做,但是, *** 作之前需要进行锁库处理 dbrunCommand({fsync:1,lock:true})
db$cmdsysunlockfindOne() 请求解锁 *** 作,但是数据库不会立刻解锁,需要使用dbcurrentOp()验证。
(1)修复
mongd --repair 修复所有数据库
dbrunCommand({repairDatabase:1}) 修复单个数据库
修复就是根据Jourling文件读取和重写所有数据文件并重建各个索引
(2)压紧
压紧,会重写数据文件,并重建集合的全部索引,需要停机或者在从库上面运行,如果需要在主库上面运行,需要添加force参数 保证加写锁。
(1)监控磁盘状态
(2)为提升性能检查索引和查询
总的来说,扫描尽可能少的文档。
保证没有冗余的索引,冗余的索引会占用磁盘空间、消耗更多的内存,在每次写入时还需做更多工作
(3)添加内存
dataSize 数据大小 和 indexSize 索引大小,如果两者的和大于内存,那么将会影响性能。
storageSize超过dataSize 数据大小 两倍以上,就会因磁盘碎片而影响性能,需要压缩。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)