空间数据

顺序表的定义

岁酱吖の 提交于 2019-11-29 22:37:06
顺序表的定义 线性表的顺序存储又称为 顺序表 来看一个生活中的例子:周末和朋友一起吃火锅,人非常多,我们需要在等候区等候,这个等候区就与顺序表有非常多的相似之处,借助它去理解顺序表的特点。首先,在等候区有非常多的椅子,这些椅子往往是排成一排连续排放的,中间不会空出很大的空间造成浪费。这就与在顺序表中选取存储单元的方法是一样的,我们会选取一段地址连续的存储单元去存放顺序表。接着工作人员会安排我们在椅子上连续的坐下等候。在存储单元当中去进行数据的存放是一样的,也是依次地存放线性表当中的数据元素,中间也不会空出许多存储单元造成空间的浪费。最后结伴而行的朋友也会坐在相邻的椅子上,这与顺序表的存放是相同的。在逻辑上相邻的两个元素在物理位置上也要保证它相邻,也会把它存放在相邻的存储单元上。在这个例子当中,其实椅子就代表着存储单元,而每一个等候的人就是要存放的数据元素。来总结一下顺序表的特点: 一组地址连续存放的存储单元依次存放线性表的元素,从而使得逻辑上相邻的两个元素在物理位置上也相邻。 所以有这样的规律:顺序表中逻辑顺序与物理顺序相同 其中在逻辑上相邻的两个数据元素,在顺序表中也存放在相同的存储单元当中,每一个小格子就代表一个存储单元。 在程序语言设计中,往往使用数组来实现顺序表。但是数组和顺序表又有一些差别,第一个差别是数组下标是从 0 开始的,而顺序表是从 1 开始的

进程间通信(8) - 共享内存(posix)

天大地大妈咪最大 提交于 2019-11-29 22:11:28
1.前言 本篇文章的所有例子,基于RHEL6.5平台(linux kernal: 2.6.32-431.el6.i686)。 2.共享内存介绍 前面所讲述的Linux下面的各种进程间通信方式,例如:pipe(管道),FIFO(命名管道),message queue(消息队列),它们的共同点都是通过内核来进行通信(假设posix消息队列也是在内核中实现的,因为posix标准没有规定它的具体实现方式)。向pipe,fifo,message queue写入数据时,需要把数据从用户空间(用户进程)复制到内核,而从这些IPC读取数据时,又需要把数据从内核复制到用户空间。因此,所有的这些IPC方式,都需要在内核与用户进程之间进行2次数据复制,即进程间的通信必须通过内核来传递,如下图所示: 通过内核进行进程间通信(IPC) 共享内存也是一种 IPC ,它是目前最快的IPC,它的使用方式是将同一个内存区映射到共享它的不同进程的地址空间中,这样这些进程间的通信就不再需要通过内核,只需对该共享的内存区域进程操作就可以了。和其他 IPC 不同的是,共享内存的使用需要用户自己进行同步操作。下图是共享内存区 IPC 的通信: 3.映射函数mmap 每个进程都有自己的虚拟地址空间,我们知道除了堆中的虚拟内存我们可以由程序员灵活分配和释放,其他区域的虚拟内存都由系统控制

Mysql的建表规范与注意事项

这一生的挚爱 提交于 2019-11-29 20:44:41
一、库名、表名、字段名必须使用小写字母,“_”分割;库名、表名、字段名必须不超过12个字符;库名、表名、字段名见名知意,建议使用名词而不是动词。 二、建议使用InnoDB存储引擎。 存储引擎:innoDb支持事物,myisam不支持事物,建议使用innoDb, 5.5以后的默认引擘,支持事务,行级锁,更好的恢复性,高并发下性能更好,对多核,大内存,ssd等硬件支持更好。 (1) MyISAM表是独立于操作系统的,这说明可以轻松地将其从Windows服务器移植到Linux服务器;每当我们建立一个MyISAM引擎的表时,就会在本地磁盘上建立三个文件,文件名就是表明。例如,我建立了一个MyISAM引擎的tb_Demo表,那么就会生成以下三个文件: 1.tb_demo.frm,存储表定义; 2.tb_demo.MYD,存储数据; 3.tb_demo.MYI,存储索引。 MyISAM表无法处理事务,这就意味着有事务处理需求的表,不能使用MyISAM存储引擎。MyISAM存储引擎特别适合在以下几种情况下使用: 1.选择密集型的表。MyISAM存储引擎在筛选大量数据时非常迅速,这是它最突出的优点。 2.插入密集型的表。MyISAM的并发插入特性允许同时选择和插入数据。例如:MyISAM存储引擎很适合管理邮件或Web服务器日志数据。 (2) InnoDB是一个健壮的事务型存储引擎

大容量类Redis存储--Pika介绍

依然范特西╮ 提交于 2019-11-29 19:21:03
嘉宾介绍 大家好,首先自我介绍一下,我是360 web平台-基础架构组的宋昭,负责大容量类redis存储pika的和分布式存储Bada的开发工作,这是我的github和博客地址,平时欢迎指正交流^^ 我的github: https://github.com/KernelMaker 我的博客: http://kernelmaker.github.io 下面是pika的github,欢迎关注 https://github.com/Qihoo360/pika Pika介绍 pika是360 DBA和基础架构组联合开发的类redis存储系统, 使用Redis协议,兼容redis绝大多数命令(String,Hash,List,ZSet,Set),用户不需要修改任何代码, 就可以将服务迁移至pika. pika主要是使用持久化存储来解决redis在内存占用超过50G,80G时遇到的如启动恢复时间长,主从同步代价大,硬件成本贵等问题,并且在对外用法上尽可能做到与redis一致,用户基本上对后端是redis或pika无感知 既然pika要做到兼容redis并解决redis在大容量时的各种问题,那么首先要面对的问题便是如何从redis迁移到pika,毕竟现在redis的使用非常广泛,如果从redis迁移到pika很麻烦,那应该也不会有多少人用了 从redis迁移到pika需要经过几个步骤?

【操作系统】基础知识整理 & 常见面试题

最后都变了- 提交于 2019-11-29 19:06:45
操作系统 1 操作系统概述 操作系统的四个特性 操作系统的五大功能 2 进程 进程的定义 进程的状态 进程的特性 进程的同步、互斥和通信 a 竞争关系 和 进程互斥 b 协作关系 和 进程同步 c 进程通信 3 线程 线程的定义 线程的性质 线程通信 线程同步和互斥 线程机制的优点: 4 进程 VS. 线程 进程与线程之间的关系 进程与线程之间的区别 多进程与多线程之间的区别 5 处理机调度 用户态和核心态 处理机调度的层次 操作系统的常见进程调度算法 6 存储器管理 7 虚拟存储器 定义 特征 实现方法 页面置换算法(服务于分页请求系统) 常见面试题 1 操作系统概述   操作系统是管理和控制计算机系统中各种硬件和软件资源、合理地组织计算机工作流程的系统软件,是用户与计算机之间的接口。 操作系统的四个特性 并发 :同一段时间内多个程序执行(注意区别并行和并发,前者是同一时刻的多个事件,后者是同一时间段内的多个事件); 共享 :系统中的资源可以被内存中多个并发执行的进线程共同使用; 虚拟 :通过时分复用(如分时系统)以及空分复用(如虚拟内存)技术实现把一个物理实体虚拟为多个; 异步 :系统中的进程是以走走停停的方式执行的,且以一种不可预知的速度推进。   操作系统最基本的特征是并发和共享,两者互为存在条件。 操作系统的五大功能 处理机管理 :处理机分配都是以进程为单位

同步IO、异步IO、阻塞IO、非阻塞IO之间的联系与区别

主宰稳场 提交于 2019-11-29 17:26:26
原文链接https://www.cnblogs.com/euphie/p/6376508.html POSIX 同步IO、异步IO、阻塞IO、非阻塞IO,这几个词常见于各种各样的与网络相关的文章之中,往往不同上下文中它们的意思是不一样的,以致于我在很长一段时间对此感到困惑,所以想写一篇文章整理一下。 POSIX(可移植操作系统接口)把同步IO操作定义为导致进程阻塞直到IO完成的操作,反之则是异步IO 按POSIX的描述似乎把同步和阻塞划等号,异步和非阻塞划等号,但是为什么有的人说同步IO不等于阻塞IO呢?先来说说几种常见的IO模型吧。 IO模型 这里统一使用Linux下的系统调用recv作为例子,它用于从套接字上接收一个消息,因为是一个系统调用,所以调用时会 从用户进程空间切换到内核空间运行一段时间再切换回来 。默认情况下recv会等到网络数据到达并且复制到用户进程空间或者发生错误时返回,而第4个参数flags可以让它马上返回。 阻塞IO模型 使用recv的默认参数一直等数据直到拷贝到用户空间,这段时间内进程始终阻塞。A同学用杯子装水,打开水龙头装满水然后离开。这一过程就可以看成是使用了阻塞IO模型,因为如果水龙头没有水,他也要等到有水并装满杯子才能离开去做别的事情。很显然,这种IO模型是同步的。 非阻塞IO模型 改变flags,让recv不管有没有获取到数据都返回

Hadoop系列之七:分布式文件系统HDFS(2)

早过忘川 提交于 2019-11-29 17:17:14
1、访问HDFS文件系统 HDFS是工作于用户空间的文件系统,它的树状文件系统是独立的,不能像传统上工作于内核空间的文件系统一样挂载至当前操作系统的目录树上对HDFS进行访问,传统上实现文件或目录管理的命令如ls、cat等此处也无法正常使用。对HDFS文件系统上的文件进行访问,需要通过HDFS的API或者由hadoop提供的命令行工具进行。 1.1 HDFS用户接口 (1) hadoop dfs命令行接口; (2) hadoop dfsadmin命令行接口; (3) web接口; (4) HDFS API; 前三者方式在后文会有详细的使用说明。无论基于何种方式与HDFS文件系统交互,其读取或写入数据的过程是相同的,下面分别对写操作和读操作的过程进行详细描述。 1.2 向HDFS文件系统保存数据 当需要存储文件并写数据时,客户端程序首先会向名称节点发起名称空间更新请求,名称节点检查用户的访问权限及文件是否已经存在,如果没有问题,名称空间会挑选一个合适的数据节点分配一个空闲数据块给客户端程序。客户端程序直接将要存储的数据发往对应的数据节点,在完成存储后,数据节点将根据名称节点的指示将数据块复制多个副本至其它节点。 (1) 向HDFS集群中保存数据之前,HDFS客户端需要事先知悉目标文件系统使用的“块大小”以及“复制因子(Replication Factor,即每一个块需要保存的副本数目

Hadoop系列之六:分布式文件系统HDFS

夙愿已清 提交于 2019-11-29 17:16:49
1、MapReduce与分布式文件系统 前面的讨论中,我们已经得知, Hadoop 中实现的 MapReduce 是一个编程模型和运行框架,它能够通过 JobTracker 接收客户提交的作业而后将其分割为多个任务后并行运行在多个 TaskTracker 上。而问题是,这些 TaskTracker 如何高效获取所要处理的数据? 在传统的高性能集群中,计算节点和存储节点是各自独立的,它们之间通过高速网络完成互联,然而,在面临海量数据处理的问题时,网络必然会成为整个系统的性能瓶颈,这就需要引入超高速的网络如万兆以太网或 Infiniband 。然而,对大数场景来讲它们属于“奢侈品”,且昂贵的投入并不能带来网络性能的线性提升,因此性价比不高。面对这种问题, MapReduce 采取了将计算节点与存储节点合二为一的集群模型,它利用分布式文件系统将数据存储于多个节点上,而后让处理过程在各数据节点本地直接进行,从而极大地降低了数据通过网络传送的需求。不过,这里仍然需要说明的是, MapReduce 并非依赖于分布式文件系统,只不过运行在非分布式文件系统的 MapReduce 的诸多高级特性将无用武之地。 事实上,分布式文件系统并非 MapReduce 带来的新生事物,只不过, MapReduce 站在前人的基础上将分布式文件系统进行了改造以使得它更能够适用于在 MapReduce

Java基础知识总结

我们两清 提交于 2019-11-29 17:15:43
本博文内容参考相关博客以及《Java编程思想》整理而成,如有侵权,请联系博主。 转载请注明出处: http://www.cnblogs.com/BYRans/ PDF版下载链接: 《Java基础知识总结》 。 如果您想在此基础上做一些修改,请联系dingyu.sdu@gmail.com,我把word原版发给您。 一:java概述: 1,JDK:Java Development Kit, java的开发和运行环境,java的开发工具和jre。 2,JRE:Java Runtime Environment, java程序的运行环境,java运行的所需的类库+JVM(java虚拟机)。 3,配置环境变量: 让java jdk\bin目录下的工具,可以在任意目录下运行,原因是,将该工具所在目录告诉了系统,当使用该工具时,由系统帮我们去找指定的目录。 环境变量的配置: 1 ): 永久配置方式:JAVA_HOME=%安装路径%\Java\jdk path=%JAVA_HOME%\bin 2 ): 临时配置方式:set path=%path%;C:\Program Files\Java\jdk\bin 特点:系统默认先去当前路径下找要执行的程序,如果没有,再去path中设置的路径下找。 classpath的配置: 1 ): 永久配置方式:classpath=.;c:\;e:\ 2 ):

转载:IO模型

老子叫甜甜 提交于 2019-11-29 17:13:07
简介 参考《UNIX Network Programming Volume 1, ThirdEdition [Electronic resources] : The Sockets Networking API》 进程运行状态分为内核态和用户态两种。 对于文件读取: 第一步:等待数据准备 第二步:将数据从内核空间复制到用户空间中 对于socket: 第一步:等待网络上的数据到达,然后被复制到内核空间 第二步:将数据从内核空间复制到用户空间中 同步与异步 同步与异步关注的是进程与内核的交互。同步进程触发IO并等待或者轮询IO是否完成。 异步进程触发IO后直接返回,IO交给内核来处理,完成后内核通知进程IO完成。 阻塞与非阻塞 阻塞和非阻塞关注的是进程(线程)在等待调用结果时的状态。阻塞是指调用结果返回之前,当前进程(线程)会被挂起。非阻塞则相反,当前进程(线程)不会被挂起。 同步阻塞IO模型 进程执行recvfrom系统调用后进程阻塞,等待数据准备好,此时进程让出CPU。当数据准备好后,等待内核将数据复制到用户空间。复制完成后,recvfrom系统调用返回成功,进程解除阻塞。此模型特点是IO过程的两步都会等待。 同步非阻塞IO模型 进程执行recvfrom系统调用,如果数据还没有准备好,那么recvfrom系统调用返回一个错误。这个过程一直重复,直到数据准备好后