空间数据

操作系统概述(二)

霸气de小男生 提交于 2019-12-29 23:09:44
操作系统内存管理 内存管理包括内存管理和虚拟内存管理。 内存管理包括程序装入等概念、交换技术、连续分配管理方式和非连续分配管理方式(分页、分段、段页式)。 虚拟内存管理包括虚拟内存概念、请求分页管理方式、页面置换算法、页面分配策略、工作集。 我们先来了解一下什么是内存: 内存是计算机系统的一个重要组成部分,只有在内存中的程序才能被CPU所执行,而且CPU运行时所需要的数据和程序运行空间都是从内存中获取,所以内存性能的好坏直接影响我们计算机性能的好坏. 讲到内存我们可以讲一下关于存储器的分类: 存储器按照功能分配可以分为高速缓冲存储器(cache),主存储器(内存),外存储器(外存): 高速缓冲存储器(cache):cache又分为一级cache和二级cache,一级cache是位于CPU内部的存储器,它负责存储并向CPU传递需要的数据和指令,二级cache位于CPU和主存储器(DRAM)之间,二级的作用就是存储那些CPU处理时需要用到、一级缓存又无法存储的数据。CPU读取数据时,先从一级cache中寻找,找不到再从二级cache中寻找,有时还需要从三级cache中寻找.它们的共同点是读取速度都比CPU慢比内存快,内存容量小,价格高. 缓存的出现主要是为了解决CPU运算速度与内存 读写速度不匹配的矛盾,因为CPU运算速度要比内存读写速度快很多

MongoDB如何释放空闲空间?

巧了我就是萌 提交于 2019-12-29 08:09:47
当我们从MongoDB中删除文档或集合时,MongoDB并不会将已经占用了的磁盘空间释放,它会一直维护已经占用了磁盘空间的数据文件,尽管数据文件中可能存在大大小小的空记录列表(empty record list)。当客户端程序再次插入文档时,MongoDB会从空记录列表中分配存储空间给新文档。那么为了更加有效的使用磁盘空间,我们需要对mongodb的数据文件做碎片整理以及未使用空间的回收。思想无非两种: 1、对原数据进行重组 2、仅将数据复制出来,形成仅数据的完整备份 以下介绍几种常用的实施方法: 1、compact 2、db.repairDatabase() 3、secondary节点重同步 2、db.copyDatabase() 一、 compat 官网对该命令的定义:对集合中的所有数据和索引进行重写和碎片整理。 使用方法 use yourdatabase; db.runCommand({ compact : 'yourCollection' }); 注意事项 1、在执行命令前请保证你有比较新的备份 2、在使用MMAPv1存储引擎的MongoDB上compact需要数据文件所在分区至少有2G的空闲空间 3、在使用WiredTiger存储引擎的MongoDB上,compact命令将重写集合和索引,且释放未使用的空间,但使用MMAPv1存储引擎的MongoDB上

C++之类和对象的使用(三)

本秂侑毒 提交于 2019-12-29 04:49:25
   对象数组 如果构造函数只有一个参数,在定义数组时可以直接在等号后面的花括号内提供。Student stud[3]={90,92,01};//合法 如果构造函数有多个参数,则不能用在定义时直接所提供所有实参的方法。 但可以如下定义: //构造函数有三个参数:学号,年龄,成绩 Student stud[3]{ Student(1000,19,22); Student(1001,19,22); Student(1002,19,22); };   对象指针 指向对象的指针 class Box {public: Box(int h=10,int w=10,int len=10); int s; int volume(); private: int height; int width; int length; }; Box::Box(int h,int w,int len) { height=h; width=w; length=len; } int Box::volume(){ return(height*width*length); }Box *ptr;//定义指向对象的指针Box t1;//定义Time类对象ptr=&t1;//将t1的起始地址赋给ptr 指向对象成员的指针 1)指向对象数据成员的指针 定义的一般形式为: 数据类型名 *指针变量名; int *p1; p1=&t1

索引碎片的检测和整理

非 Y 不嫁゛ 提交于 2019-12-29 02:08:12
存储数据是为了查找数据,存储结构影响数据查找的性能。对无序数据进行查找,最快的查找算法是哈希查找;对有序数据进行查找,最快的查找算法是平衡树查找。在传统的关系型数据库中,聚集索引和非聚集索引都是平衡树(B-Tree)类型的存储结构,用于顺序存储数据,便于实现数据的快速查找。除了提升数据查找的性能之外,索引还能减少硬盘IO和内存消耗。通常情况下,硬盘IO是查找性能的瓶颈,由于索引是数据表的列的子集,这意味着,索引只存储部分列的数据,占用的硬盘空间比全部列少了很多,因此,数据库引擎只需要消耗相对较少的硬盘IO和内存buffer,就能把索引数据加载到内存中。 索引以B-Tree结构存储在数据文件中,分为叶子节点和非叶子节点,叶子节点用于存储数据,而非叶子节点(中间节点和根节点)用于存储索引键,节点数据按照索引键排序。理论上,一旦数据集确定下来,索引查找的时间消耗就只跟索引结构的层次有关系,层次越多,查找数据所消耗的时间越多。碎片会影响索引的层次结构,但是,碎片并不总是破坏者,碎片有利于数据的更新。 在数据的物理存储上,索引和数据存储在硬盘上的数据文件中,数据文件以页(Page)为最小单位分割,每一个Page是8KB,物理位置上连续的8个Page叫做一个区(Extent),每一个区是64KB。区是空间分配的基本单位,而页是数据存储的基本单位。 从物理存储上来看,索引是由一系列的分段

性能优化与故障排除百日谈(15)-索引的维护-找出索引碎片

≯℡__Kan透↙ 提交于 2019-12-29 02:01:40
索引已经是性能优化中大家常常提到而说到的问题,关于索引的很多的概念和解析,我们站点的 索引进阶系列文章 已经做了比较全面的讲述,我们这里就不在重复了。 我们都知道,对于索引而言,我们会面临两个问题: 1.是否建立了合适的索引 2.如何维护和诊断现有的索引 对于第一个问题,这确实不是三言两语可以讲清楚的,因为这首先需要对索引的知识掌握的非常清楚,而且还要知道建立索引的表中的数据的使用的情况(如读写的频率等)。我们会在之后的“收费阅读”版块,对索引进行深度的剖析,希望大家关注。 对于第二个问题,我们首先就要清楚:索引建立之后不是一劳永逸的,而是需要不断的维护,而且 数据库 中的数据是变化的,所以,此时的索引可以不适合或者需要进行一些处理,如重组等。 我们接下来的几篇文章会探讨下面的问题: 如何寻找索引碎片 ·使用填充因子 ·如何使用ReBuild来提高索引的效率 ·如何使用ReOrganize来提高索引的效率 ·如何找到缺失的索引 如何找到无用的索引 ·如何找到高成本维护索引 ·如何使用索引视图提升性能 ·如何在计算列上面使用索引提升性能 碎片类型简述 内部碎片 说到碎片,这里的话题其实就很广了。我们这里主要讨论索引的碎片,至于碎片是如何产生的,我们这里暂不做过多的深究,大家可以参看这篇文章: http://www.agilesharp.com/showtopic-162.aspx

数据结构:链表讲解

拈花ヽ惹草 提交于 2019-12-28 15:12:11
数据结构:链表讲解 一、缓存淘汰策略: 缓存的大小有限,当缓存被用满时,哪些数据应该被清理出去?哪些数据应该保留?这就需要缓存淘汰策略来决定。 简单理解: 就是当缓存被用满时清理数据的优先顺序 。 先进先出策略 FIFO(First In, First Out) 最少使用策略 LFU(Least Frequently Used) 最近最少使用策略 LRU(Least Recently Used) 以上策略举个栗子: 假如,你买了很多书,但有一天发现,书太多了,太占书房空间了,打算丢掉一些书籍; 丢到刚买的书:先进先出策略 丢到买完一直都没有读过的书:最少使用策略 丢到最近刚买的书,但是一直都没怎么读过:最近最少使用策略 二、数组与链表的区别: 1.底层存储的结构区别: 我们可以从 底层的存储结构 来看。数组需要一块 连续的内存空间 来存储,对内存的要求比较高。 如果我们申请一个 100MB 大小的数组,当内存中没有连续的、足够大的存储空间时,即便内存的剩余总可用空间大于 100MB,仍然会申请失败。 链表恰恰相反,它并 不需要一块连续的内存空间 ,它通过 指针 将一组零散的内存块串联起来使用,其中,我们把内存块称为链表的 结点 。 为了将所有的结点串起来,每个链表的结点除了存储数据之外,还需要记录链上的 下一个结点的地址 。结点地址的指针叫作 后继指针 next 。

网格计算环境对GIS的挑战

五迷三道 提交于 2019-12-28 03:20:57
李德仁 朱欣焰 龚健雅 (2004.02.03) 网格计算环境对GIS的挑战 自从纸张发明以后,人类用纸质地图表示地理空间信息已有几千年的历史。电子计算机出现后,人们又开始在计算机中用离散而有拓扑关系的点串来描述点、线、面、体各种空间要素,这就出现了数字地图。信息技术发展到今天,数字地图已不是地理空间数据在计算机中唯一的表示方法,网格技术对原有的GIS提出了新的挑战。   GIS在过去10年内得到了极大的发展。但面对新技术,它还有许多局限。一是空间信息的利用率不高,各个部门建立的信息系统与地理信息系统难以相互利用,形成信息“孤岛”。传统的空间信息系统没能很好地解决空间信息的共享和利用问题。究其原因,主要在于GIS是面向空间数据,特别是地图数据的,而不是直接面向空间信息的。空间信息必须用某种算法由空间数据导出来。所以对用户特别是大型用户的大任务,它是不友好的,不方便的,也是十分费时的。二是目前的数字化地图还不能离开比例尺的概念。多比例尺的影像或DEM数据目前已实现了某种程度的互动,但目前还不能自动从影像数据中提取矢量数据,影像数据和矢量数据之间缺乏互动能力。三是我国在空间信息共享方面的标准制定工作相对滞后。为了实现网络环境下空间数据共享,还需要研究和完善空间数据元数据标准,制定地理空间信息编码规则,修改完善地球空间数据转换格式标准,修改完善基础地理信息符号标准

(Review cs231n) ConvNet

落爺英雄遲暮 提交于 2019-12-27 17:30:17
概念 神经网络的深度和数据据体的深度(图像的通道数channels)要主要区分。 输入 1.得到一些数据,作为网络的输入。 2.在CNN中有filter,the size of filter is small。如上的filter为5*5,深度为3,这个3要在深度上穿过 输入数据的每一个位置,输入数据是三个通道; 3.filter 要完全覆盖输入数据的全部深度,用filter来和输入图像做卷积运算。 filter要在整个图像的空域范围内全部位置滑动,每一个位置filter和图像做点乘。这个filter是要学习的用W表示,我们也要学习这些filter,可以把filter看作是你的一堆W,然后在图像范围内滑动这个filter。 as folllows: $w^{T}x + b$ where w denotes the filter and x denotes the patch of input image, 大小是5*5*3的小区域。 激活图给出了每个空间位置出滤波器的反应,将5*5的filter在32*32的输入数据上滑动,得到了28*28的激活图。 hei = 32; wid = 32; stride = 1; count = 0; step1 = 0; step2 = 0; pathchSize = 5; for x = 1 + step1: stride : hei -

C++ 内存解析

核能气质少年 提交于 2019-12-27 12:16:20
一、内存基本构成可编程内存在基本上分为这样的几大部分:静态存储区、堆区和栈区。他们的功能不同,对他们使用方式也就不同。 静态存储区:内存在 程序编译的时 候就已经分配好,这块内存在程序的整个运行期间都存在。它主要存放静态数据、全局数据和常量。 栈区:在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。 堆区:亦称动态内存分配。程序在运行的时候用malloc或new申请任意大小的内存,程序员自己负责在适当的时候用free或delete释放内存。动态内存的生存期可以由我们决定,如果我们不释放内存,程序将在最后才释放掉动态内存。 但是,良好的编程习惯是:如果某动态内存不再使用,需要将其释放掉,否则,我们认为发生了内存泄漏现象。 二、三者之间的区别我们通过代码段来看看对这样的三部分内存需要怎样的操作和不同,以及应该注意怎样的地方。 例一:静态存储区与栈区 char* p = “Hello World1”; char a[] = “Hello World2”; p[2] = ‘A’; a[2] = ‘A’; char* p1 = “Hello World1”;    这个程序是有错误的, 错误发生在p[2] = ‘A’这行代码处 ,为什么呢? 是变量p和变量数组a都存在于栈区的

操作系统 - 分段机制 & 分页机制

北城余情 提交于 2019-12-27 12:08:44
文章目录 分段机制 简介 段的定义 段描述符表 段选择符 段描述符 代码和数据段描述符类型 系统描述符类型 分页机制 简介 页表结构 页表项格式 区别 分段机制 简介 80X86 使用了一种称为 段 (Segment)的寻址技术。这种寻址技术把内存空间分成一个或多个称为段的线性区域,从而对内存中一个数据对象的寻址就需要使用一个段的起始地址(即段地址)和一个段内偏移地址两部分构成。 段地址部分使用 16 位的 段选择符 指定,其中 14 位可以选择 2 14 2^{14} 2 1 4 次方即 64K 个段。 段内偏移地址部分使用 32 位的值来指定,因此段内地址可以是 0 到 4G。即一个段的最大长度可达 4G。 程序中由 16 位的段和 32 位的偏移构成的 48 位地址称为一个 逻辑地址 (虚拟地址)。 分段提供了一种机制,用于把处理器可寻址的 线性地址空间 划分成一些较小的称为段的受保护地址空间区域。 段可以用来存放程序的代码、数据和堆栈,或者用来存放系统数据结构(例如 TSS或 LDT)。 如果处理器中有多个程序在运行,那么每个程序可分配各自的一套段。此时处理器就可以加强这些段之间的界限,并且确保一个程序不会通过访问另一个程序的段而干扰程序的执行。 段的定义 每个段由三个参数定义: 段基地址(Base address):指定段在线性地址空间中的开始地址。基地址是 线性地址