首页
精选文章MongoDB查看全文mongoDB是流行的文档型数据库,使用方式类似于关系型数据库,其存储模型bson在JSON基础上进行了扩展,介于结构化存储和非结构化存储之间。mongoDB具有以下特点: 面向集合存储,易存储对象类型的数据。 模式自由。 支持动态查询。 支持完全索引,包含内部对象。 支持查询。 支持复制和故障恢复。 使用高效的二进制数据存储,包括大型对象(如视频等)。 自动处理碎片,以支持云计算层次的扩展性 支持python,java,C++,php等语言的驱动程序,社区中也提供了对 Erlang,.NET等平台的驱动程序。 可通过网络访问。 mongoDB的概念和数据库概念可以逐级类比。 mongoDB数据库中的数据采用bson的方式存储,bson是从json引申出来的概念,含义为binary JSON。从本质上来看,bson是json的一个超集,除了字符串,整形,bool之外,bson还支持时间类型以及字节数组。 BSON数据结构以及和json的关系如下所示: 索引 mongoDB的索引分为几类: 单键索引 单键索引就是单独的字段作为索引列,mongoDB所有的collection默认都会有一个单键索引_id。_id一般是通过客户端生成,当写入数据不包含该字段的时候,服务端进行生成。_id由12个字节组成,依次是4个字节的Unix时间戳,3个字节的机器ID,2字节的进程ID,3个字节的计数器。 复合索引 复合索引是指包含多个字段的索引,用法和单键索引类似。 mongodb的索引采用B+树进行存储。出了普通的B+索引之外,MongoDB还支持以下的索引结构: 哈希(HASH)索引,哈希是另一种快速检索的数据结构…KVM查看全文KVM 是基于虚拟化扩展(Intel VT 或者 AMD-V)的 X86 硬件的开源的 Linux 原生的全虚拟化解决方案。KVM 中,虚拟机被实现为常规的 Linux 进程,由标准 Linux 调度程序进行调度;虚机的每个虚拟 CPU 被实现为一个常规的 Linux 进程。这使得 KMV 能够使用 Linux 内核的已有功能。KVM是Linux的一部分,Linux 2.6.20及以上版本都包含KVM,因此KVM可以使用Linux最新内核的功能。 现代CPU在硬件层面提供对特殊指令的接获和重定向,通过这些指令集,VMM很容易将客户机置于受限模式运行,一旦宿主机访问物理资源,硬件会把控制权交还给VM处理,利用硬件的虚拟化技术,VM还可以重定向后的指令发给宿主机进行执行。 KVM将Linux转为虚拟机监控程序,由于KVM是Linux内核的一部分,所以作为虚拟机必须的组件,例如内存管理,进程调度,输入输出,网络堆栈都直接拥有。KVM虚拟机进程和普通的Linux进程一样,由标准的Linux进程调度程序进行调度,并且使用专门的虚拟硬件,例如网卡,CPU等。但是,KVM 本身不执行任何硬件模拟,需要客户空间程序通过 /dev/kvm 接口设置一个客户机虚拟服务器的地址空间,向它提供模拟的 I/O,并将它的视频显示映射回宿主的显示屏。目前这个应用程序是 QEMU。 综上所述,KVM虚拟化有两个核心模块: KVM内核模块:主要包括KVM虚拟化核心模块KVM.ko,以及硬件相关的KVM_intel或KVM_AMD模块;负责CPU与内存虚拟化,包括VM创建,内存分配与管理、vCPU执行模式切换等。 QEMU设备模拟:实现IO虚拟化与各设备模拟…Raft查看全文CAP模型指出分布式系统不能同时满足分区容忍性,可用性,一致性这三个特性,而最多只能满足其中的两个特性。一致性是指分布式系统在跨节点场景下数据达成一致性的过程,一致性可以分为线性一致性,顺序一致性等 Raft是一种一致性算法,也称为共识算法。但相比于Paxos而言,Raft的工程实现更加简单,容易理解。 Paxos是无主的共识算法,无主算法对容灾的处理更加复杂,而且因为每个节点都可以发起请求,所以需要复杂的机制从并发的请求中选择一个作为选中的值写入集群。 Raft的角色除了Paxos中的Candidate和Follow之外,还有Leader角色。 在运行过程中,Raft只允许Leader节点提交数据,所以Raft第一个步骤是Leader的选举。在Leader宕机的时候会重新进行Leader选举。 有了Leader之后,Leader会提交数据,进行日志同步。 除了Leader之外,集群中其他成员的变更也需要处理。 Raft将共识算法分为几个环节,Leader的选举,日志同步,日志压缩,成员变更等。 Leader选举 raft算法把时间轴分为不同的任期(term),每个Term拥有唯一的ID,termId,该ID全局唯一单调递增。如果选举成功,则进入维持任务term阶段,此时leader负责接收客户端请求并负责复制日志,同时Leader和所有的follower都保持通信,如果follower发现通信超时,TermId递增并发起新的选举。如果选举成功,则进入新的任期。如果选举失败,termId递增,然后重新发起选举直到成功。 Leader在任期内会向其他follower节点发送心跳来维持地位,follower如果发现心跳超时… |
热门分类开源Golang消息队列JavaJavascriptLinuxMysqlNLPPHP事务内存管理分布式理论分类存储常用存储开源软件操作系统画图网络编程数据库算法虚拟化前端存储理论常用算法微服务数据结构算法应用计算机原理中间件共识算法分布式分治动态规划容器并发排序架构组件绘图工具网络协议编程语言理论算法思想树缓存架构C++字符串算法工程思想搜索
算法题库
精选内容 |