空间数据

Spark--大数据的“电光石火”

僤鯓⒐⒋嵵緔 提交于 2019-12-05 01:34:36
Spark已正式申请加入Apache孵化器,从灵机一闪的实验室“电火花”成长为大数据技术平台中异军突起的新锐。本文主要讲述Spark的设计思想。Spark如其名,展现了大数据不常见的“电光石火”。具体特点概括为“轻、快、灵和巧”。 轻 :Spark 0.6核心代码有2万行,Hadoop 1.0为9万行,2.0为22万行。一方面,感谢Scala语言的简洁和丰富表达力;另一方面,Spark很好地利用了Hadoop和Mesos(伯克利 另一个进入孵化器的项目,主攻集群的动态资源管理)的基础设施。虽然很轻,但在容错设计上不打折扣。主创人Matei声称:“不把错误当特例处理。”言下 之意,容错是基础设施的一部分。 快 :Spark对小数据集能达到亚秒级的延迟,这对于Hadoop MapReduce(以下简称MapReduce)是无法想象的(由于“心跳”间隔机制,仅任务启动就有数秒的延迟)。就大数据集而言,对典型的迭代机器 学习、即席查询(ad-hoc query)、图计算等应用,Spark版本比基于MapReduce、Hive和Pregel的实现快上十倍到百倍。其中内存计算、数据本地性 (locality)和传输优化、调度优化等该居首功,也与设计伊始即秉持的轻量理念不无关系。 灵 :Spark提供了不同层面的灵活性。在实现层,它完美演绎了Scala trait动态混入(mixin)策略

LOB类型的学习、总结

假如想象 提交于 2019-12-04 19:49:08
LOB类型的学习、总结 LOB相关的概念 LOB类型: 将信息文件(十进制、二进制)、图像甚至音频信息采用数据库作为保存载体时,就需要使用lob类型数据。 有两种Lob,Internal Lob和External Lob。Internal Lob是指Lob数据存储在Oracle数据文件里,External Lob是指Lob数据存储在数据库外部的操作系统中。 CLOB: 存储大量、单字节、字符数据,存储在内部表空间,用于存储字符串类型的Lob,如文本和XML文件等,字符串已数据库字符集编码。 NLOB: 存储定宽、多字节、字符数据,多字节国家字符数据,存储在内部表空间。 BLOB: 存储较大无结构的二进制数据,存储在内部表空间。 BFILE: 将二进制文件存储在数据库外部的操作系统文件中。存放文件路径。数据库存储一个执行外部文件的指针,所以它是只读的。 Internal Lob和External Lob的区别 Internal Lob包含CLOB、NLOB和BLOB;External Lob只有BFILE。 Internal LOB可以作为表的一个列保存在表中,external LOB保存在操作系统上的文件中。 Internal LOB将数据以字节流的形式存储在数据库的内部。Internal LOB的许多操作都可以参与事务,可以像处理普通数据一样对其进行备份和恢复操作。

【转载】2.ROS系统整体架构

|▌冷眼眸甩不掉的悲伤 提交于 2019-12-04 14:07:37
由于 ROS 系统的组织架构比较复杂,简单从一个方面来说明很难说清楚。按照 ROS 官方的说法,我们可以从 3 个方面来理解 ROS 系统整体架构,这 3 个方面分别是文件系统级、计算图级、开源社区级。 1. 从文件系统级理解 ROS 架构 如果你是刚刚接手 ROS 方面的开发或项目,你肯定会觉得 ROS 中的各种概念非常奇怪,但是当你对 ROS 的使用熟练之后,你就觉得这些概念很好理解了。与其他操作系统相似,一个 ROS 程序的不同组件要被放在不同的文件夹下,这些文件夹是根据不同的功能来对文件进行组织的,如图 3 。 (图 3 )文件系统级理解 ROS 架构 ( 1 )工作空间 工作空间是一个包含功能包、可编辑源文件和编译包的文件夹,当你想同时编译不同的功能包时非常有用,并且可以保存本地开发包。当然,用户可以根据自己的需要创建多个工作空间,在每个工作空间中开发不同用途的功能包。不过作为学习,我们先以一个工作空间为例。如图 3 ,我们创建了一个名为 catkin_ws 的工作空间,该工作空间下会有 3 个文件夹: src 、 build 、 devel 。 src 源文件空间 :这个文件夹放置各个功能包和一个用于这些功能包的 CMake 配置文件 CMakeLists.txt 。这里做一下说明,由于 ROS 中的源码采用 catkin 工具进行编译,而 catkin 工具又是基于

mysql的char,varchar,text,blob的几点个人理解

僤鯓⒐⒋嵵緔 提交于 2019-12-04 10:02:16
mysql的char,varchar,text,blob是几个有联系但是有有很大区别的字段类型,这算是mysql的基础吧,可是基础没有学好,恶补一下。 先简单的总结一下: char: 定长 ,最大255个字符 varchar: 变长 ,最大65535个字符(既是单列的限制,又是整行的限制) text:变长,有字符集的大对象,并根据字符集进行排序和校验,大小写不敏感 blob:变长,无字符集的二进制大对象,大小写敏感 以下只是我个人的理解,才疏学浅,望各路高人指点。 我使用的引擎是myisam,所以以下的探讨是集中在myisam上的。 首先解释char,char是项目中常用的字段类型之一,它代表的含义是采用固定长度存储数据,换句话说,数据初始化的是就为该类型的字段分配固定长度的存储空间,即使没有达到存储空间的长度,实际占用的存储空间也是定义时的长度。举个例子来说,比如某字段 a char(50),指定的长度是50个字符的存储空间,那么当你存入一个字符:“abc”的时候,实际上字符长度是3个字符,但是占用的硬盘空间还是50个字符。很显然,char的缺点就出来了: 浪费存储空间 !但是同时char的优点也显示出来了: 固定长度,(索引)效率极高,不存在碎片 。 这里我们再探讨一下char的存储方式,虽然char会浪费极大的存储空间,但是你想过对于字符串的前后空格char是如何处理的吗?

散列存储结构

假装没事ソ 提交于 2019-12-04 08:47:41
数据存储结构:数据是怎么在内存里储存的,就是在内存中的排列方式 数据存取方式:用怎样的方式读出数据和保存数据 楼主这里其实并不是数据存储方式,而是数据的存取方式 如果对存储方式不敢兴趣的话,可以不看,只看存取方式 [存取方式] 存取方式是指用户在使用数据时按何种次序存取数据。主要有顺序访问、随机访问、索引访问等 **顺序访问是按从前到后的顺序对数据进行读写操作。这种存取方式最为简单。有的存储设备如磁带只能支持顺序访问。 **随机访问,也称为直接访问,可以按任意的次序对数据进行读写操作。有的存储设备如磁盘能支持随机访问(当然也能支持顺序访问)。 **索引访问,也称按键访问,这种方式对数据中的记录按某个数据项(通常称为键)的值来排列,从而可以根据键值来快速存取。如索引表很长,则可以将索引表再加以索引,以形成具有层次结构的多级索引。如果将记录块的物理位置作为键值,那么可以将随机访问作为索引访问的特例。 **散列存储就是根据结点的关键字直接计算出该结点的存储地址。散列的唯一目的就是降低重复。 [存储结构] 数据的存储结构通常分为线性和非线性存储结构,而非线性存储结构主要有树形和图形存储结构。 **线性存储结构 **树形存储结构 **图形存储结构 线性存储结构:包括顺序,链接,索引,散列四种 顺序存储结构 顺序存储结构是把逻辑上相邻的结点存储在物理上相邻的存储单元里

认真分析mmap:是什么 为什么 怎么用(转)

这一生的挚爱 提交于 2019-12-04 08:43:50
阅读目录 mmap基础概念 mmap内存映射原理 mmap和常规文件操作的区别 mmap优点总结 mmap相关函数 mmap使用细节 回到顶部 mmap基础概念 mmap是一种内存映射文件的方法,即将一个文件或者其它对象映射到进程的地址空间,实现文件磁盘地址和进程虚拟地址空间中一段虚拟地址的一一对映关系。实现这样的映射关系后,进程就可以采用指针的方式读写操作这一段内存,而系统会自动回写脏页面到对应的文件磁盘上,即完成了对文件的操作而不必再调用read,write等系统调用函数。相反,内核空间对这段区域的修改也直接反映用户空间,从而可以实现不同进程间的文件共享。如下图所示: 由上图可以看出,进程的虚拟地址空间,由多个虚拟内存区域构成。虚拟内存区域是进程的虚拟地址空间中的一个同质区间,即具有同样特性的连续地址范围。上图中所示的text数据段(代码段)、初始数据段、BSS数据段、堆、栈和内存映射,都是一个独立的虚拟内存区域。而为内存映射服务的地址空间处在堆栈之间的空余部分。 linux内核使用vm_area_struct结构来表示一个独立的虚拟内存区域,由于每个不同质的虚拟内存区域功能和内部机制都不同,因此一个进程使用多个vm_area_struct结构来分别表示不同类型的虚拟内存区域。各个vm_area_struct结构使用链表或者树形结构链接,方便进程快速访问,如下图所示: vm

Java的集合(三)

限于喜欢 提交于 2019-12-04 07:18:30
  8、数组和链表简介       在计算机中要对给定的数据集进行若干处理,首要任务是把数据集中的一部分(当数据非常大时,可能只能一部分一部分地读取数据到内存中来处理)或全部存储到内存中,然后在对内存中的数据进行各种处理。       例如:对如数据集S{1,2,3,4,5,6},要求S中元素的和,首先要把数据存储到内存中,然后再将内存中的数据相加。       当内存空间中有足够大的连续空间时,可以把数据连续的存放在内存中,各种编程语言的数组一般都是按这种方式存储的(也可能有例外),如图 1(b);当内存中只有一些离散的可用空间时,想连续存储数据就非常困难了,这时能想到的一种解决方式是移动内存中的数据,把离散的空间聚集成连续的一块大空间,如图 1(c)所示,这样做当然也可以,但是这种情况因为可能要移动别人的数据,所以会存在一些困难,移动的过程中也有可能会把一些别人的重要数据给丢失。另外一种,不影响别人的数据存储方式是把数据集中的数据分开离散地存储到这些不连续空间中,如图(d)。这时为了能把数据集中的所有数据联系起来,需要在前一块数据的存储空间中记录下一块数据的地址,这样只要知道第一块内存空间的地址就能环环相扣地把数据集整体联系在一起了。C/C++中用指针实现的链表就是这种存储形式。            由上可知,内存中的存储形式可以分别分为 连续存储和离散存储 两种。因此

mysql的undo log和redo log

心不动则不痛 提交于 2019-12-04 04:48:37
1.1 undo是什么 undo日志用于存放数据修改被修改前的值,假设修改 tba 表中 id=2的行数据,把Name='B1' 修改为Name = 'B2' ,那么undo日志就会用来存放Name='B'的记录,如果这个修改出现异常,可以使用undo日志来实现回滚操作,保证事务的一致性。 1.2 undo参数 MySQL跟undo有关的参数设置有这些: show global variables like '%undo%'; innodb_max_undo_log_size 控制最大undo tablespace文件的大小,当启动了innodb_undo_log_truncate 时,undo tablespace 超过innodb_max_undo_log_size 阀值时才会去尝试truncate。该值默认大小为1G,truncate后的大小默认为10M。 innodb_undo_tablespaces 设置undo独立表空间个数,范围为0-128, 默认为0,0表示表示不开启独立undo表空间 且 undo日志存储在ibdata文件中。该参数只能在最开始初始化MySQL实例的时候指定,如果实例已创建,这个参数是不能变动的,如果在数据库配置文 件 .cnf 中指定innodb_undo_tablespaces 的个数大于实例创建时的指定个数,则会启动失败,提示该参数设置有误。

聊聊Linux 五种IO模型

▼魔方 西西 提交于 2019-12-04 04:48:18
#0 系列目录# 聊聊远程通信 Java远程通讯技术及原理分析 聊聊Socket、TCP/IP、HTTP、FTP及网络编程 RMI原理及实现 RPC原理及实现 轻量级分布式 RPC 框架 使用 RMI + ZooKeeper 实现远程调用框架 深入浅出SOA思想 微服务、SOA 和 API对比与分析 聊聊同步、异步、阻塞与非阻塞 聊聊Linux 五种IO模型 聊聊IO多路复用之select、poll、epoll详解 聊聊C10K问题及解决方案 上一篇 《聊聊同步、异步、阻塞与非阻塞》 已经通俗的讲解了,要理解同步、异步、阻塞与非阻塞 重要的两个概念点 了,没有看过的,建议先看这篇博文理解这两个概念点。在认知上,建立统一的模型。这样,大家在继续看本篇时,才不会理解有偏差。 那么,在正式开始讲Linux IO模型前,比如:同步IO和异步IO,阻塞IO和非阻塞IO分别是什么,到底有什么区别?不同的人在不同的上下文下给出的答案是不同的。所以先限定一下本文的上下文。 #1 概念说明# 在进行解释之前,首先要说明几个概念: 用户空间和内核空间 进程切换 进程的阻塞 文件描述符 缓存 IO ##1.1 用户空间与内核空间## 现在操作系统都是采用虚拟存储器,那么对32位操作系统而言,它的寻址空间(虚拟存储空间)为4G(2的32次方)。 操作系统的核心是内核,独立于普通的应用程序

Go netpoll I/O 多路复用构建原生网络模型之源码深度解析

北慕城南 提交于 2019-12-04 04:22:14
Go netpoll I/O 多路复用构建原生网络模型之源码深度解析 (转载) 导言 Go 基于 I/O multiplexing 和 goroutine 构建了一个简洁而高性能的原生网络模型(基于 Go 的I/O 多路复用 netpoll ),提供了 goroutine-per-connection 这样简单的网络编程模式。在这种模式下,开发者使用的是同步的模式去编写异步的逻辑,极大地降低了开发者编写网络应用时的心智负担,且借助于 Go runtime scheduler 对 goroutines 的高效调度,这个原生网络模型不论从适用性还是性能上都足以满足绝大部分的应用场景。 然而,在工程性上能做到如此高的普适性和兼容性,最终暴露给开发者提供接口/模式如此简洁,其底层必然是基于非常复杂的封装,做了很多取舍,也有可能放弃了一些『极致』的设计和理念。事实上 netpoll 底层就是基于 epoll/kqueue/iocp 这些系统调用来做封装的,最终暴露出 goroutine-per-connection 这样的极简的开发模式给使用者。 Go netpoll 在不同的操作系统,其底层使用的 I/O 多路复用技术也不一样,可以从 Go 源码目录结构和对应代码文件了解 Go 在不同平台下的网络 I/O 模式的实现。比如,在 Linux 系统下基于 epoll,freeBSD 系统下基于