信息存储

数据存储级别

本秂侑毒 提交于 2019-12-02 17:45:21
计算机存储信息的最小单位,称之为位(bit),音译比特,二进制的一个“0”或一个“1”叫一位 1B=1Byte=1字节=8bit=8比特 (byte是字节,bit是位) 1MB=1024KB 1GB=1024MB 1TB=1024GB 1PB=1024TB 1EB=1024PB 1ZB=1024EB 1YB=1024ZB 来源: 51CTO 作者: 腿快抖断了 链接: https://blog.51cto.com/11093860/2455313

倒排索引结构

不羁岁月 提交于 2019-12-02 16:15:45
solr中文搜索倒排索引和数据存储结构 solr中文索引倒排索引和数据存储结构 传统的方式(正排索引)是从关键点出发,然后再通过关键点找到关键点代表的信息中能够满足搜索条件的特定信息,既通过KEY寻找VALUE。而Lucene的搜索则是采用了倒排索引的方式,即通过VALUE找KEY。而在中文全文搜索中VALUE就是我们要搜索的单词,存放所有单词的地方叫词典。KEY是文档标号列表(通过文档标号列表我们可以找到出现过要搜索单词VALUE的文档) 正排索引从文档编号找词: 倒排索引是从词找文档编号: 当文档数据来临时,solr会首先对文档数据进行分词,创建索引库和文档数据库。所谓的分词是指:将一段字符文索引本按照一定的规则分成若干个单词。如下面两篇文档通过solr后如何产生分词存储: 文章中的标点符号可以直接过滤掉,像and、too可以直接过滤掉。形成的分词表表示: Lucene的倒排索引存储结构为:词项的字符串+词项的文档频率+记录词项的频率信息+记录词项的位置信息+跳跃偏移量。简单的理解可以形成以下结构: 分别表示词,词出现的文档编号,文档中出现的频率和文档中出现的位置。这样当我们对词进行搜索时,会找到该词出现过的所有文档的ID,然后再通过该文档的ID寻找文档的具体内容。 当然,Lucene词典中词的顺序是按照英文字母的顺序排列的,这样就可以采用压缩存储:假设有term

HTTP详解

半世苍凉 提交于 2019-12-02 14:51:30
一 、基础概念 URI 请求和响应报文 二、HTTP 方法 GET HEAD POST PUT PATCH DELETE OPTIONS CONNECT TRACE 三、HTTP 状态码 1XX 信息 2XX 成功 3XX 重定向 4XX 客户端错误 5XX 服务器错误 四、HTTP 首部 通用首部字段 请求首部字段 响应首部字段 实体首部字段 五、具体应用 连接管理 Cookie 缓存 内容协商 内容编码 范围请求 分块传输编码 多部分对象集合 虚拟主机 通信数据转发 六、HTTPS 加密 认证 完整性保护 HTTPS 的缺点 七、HTTP/2.0 HTTP/1.x 缺陷 二进制分帧层 服务端推送 首部压缩 八、HTTP/1.1 新特性 九、GET 和 POST 比较 作用 参数 安全 幂等性 可缓存 XMLHttpRequest 参考资料 一 、基础概念 URI URI 包含 URL 和 URN。 请求和响应报文 1. 请求报文 2. 响应报文 二、HTTP 方法 客户端发送的 请求报文 第一行为请求行,包含了方法字段。 GET 获取资源 当前网络请求中,绝大部分使用的是 GET 方法。 HEAD 获取报文首部 和 GET 方法类似,但是不返回报文实体主体部分。 主要用于确认 URL 的有效性以及资源更新的日期时间等。 POST 传输实体主体 POST 主要用来传输数据,而

5. Spark Streaming高级解析

僤鯓⒐⒋嵵緔 提交于 2019-12-02 13:43:21
5.1 DStreamGraph对象分析       在Spark Streaming中,DStreamGraph是一个非常重要的组件,主要用来:         1. 通过成员inputStreams持有Spark Streaming输入源及接收数据的方式         2. 通过成员outputStreams持有Streaming app的output操作,并记录DStream依赖关系         3. 生成每个batch对应的jobs       下面,通过分析一个简单的例子,结合源码分析来说明DStreamGraph是如何发挥作用的。案例如下: val sparkConf = new SparkConf().setAppName("HdfsWordCount") val ssc = new StreamingContext(sparkConf, Seconds(2)) val lines = ssc.textFileStream(args(0)) val words = lines.flatMap(_.split(" ")) val wordCounts = words.map(x => (x, 1)).reduceByKey(_ + _) wordCounts.print() ssc.start() ssc.awaitTermination()      

jvm体系结构

不羁岁月 提交于 2019-12-02 13:36:26
JVM 位置 jvm体系结构图 类装载器ClassLoader ​ 负责加载class文件,class文件在文件开头有特定的文件标示,并且ClassLoader只负责class文件的加载,至于它是否可以运行,则由Execution Engine决定 类装载器ClassLoader分类 虚拟机自带的加载器 启动类加载器(Bootstrap)C++ 扩展类加载器(Extension)Java 应用程序类加载器(AppClassLoader)Java 也叫系统类加载器,加载当前应用的classpath的所有类 用户自定义加载器 Java.lang.ClassLoader的子类,用户可以定制类的加载方式 Execution Engine 执行引擎负责解释命令,提交操作系统执行 Native Interface 本地接口 本地接口的作用是融合不同的编程语言为 Java 所用 Native Method Stack 它的具体做法是Native Method Stack中登记native方法,在Execution Engine 执行时加载本地方法库。 PC 寄存器 ​ 每个线程都有一个程序计数器,是线程私有的,就是一个指针,指向方法区中的方法字节码(用来存储指向下一条指令的地址,也即将要执行的指令代码),由执行引擎读取下一条指令,是一个非常小的内存空间,几乎可以忽略不记。 方法区

SpringBoot-集成Quartz

流过昼夜 提交于 2019-12-02 12:16:16
前面一篇文章( SpringBoot-定时任务 )中介绍了如何用SpringBoot框架中的注解方式来实现定时任务,这种方式的好处是不使用第三方的依赖,仅凭几个方便的注解,即可编写一个简单的定时任务处理。 实际开发中为了满足复杂的业务场景,比如任务暂停、恢复、删除等操作。上面这种方式就不能满足了,这一节我们来学习SpringBoot集成Quartz框架来实现复杂的任务调度处理。 Quzrtz简介 Quartz是一个由Java语言编写的开源任务调度框架,具有简单高效、容错、支持分布式等优点。 主要API: Scheduler :与调度器交互的主要API。 Job :需要被调度器调度的任务必须实现的接口。 JobDetail :用于定义任务的实例。 Trigger :用于定义调度器何时调度任务执行的组件。 JobBuilder :用于定义或创建JobDetail的实例 。 TriggerBuilder :用于定义或创建触发器实例。 数据库准备 Quertz需要将任务的相关信息保存到数据库中,所以我们需要提前创建好数据库,库名自己定义好后,执行以下SQL语句: DROP TABLE IF EXISTS QRTZ_FIRED_TRIGGERS ; DROP TABLE IF EXISTS QRTZ_PAUSED_TRIGGER_GRPS ; DROP TABLE IF EXISTS

JVM之内存区域划分

ε祈祈猫儿з 提交于 2019-12-02 11:41:46
程序计数器: 当前线程执行的字节码的指示器。也就是记录当前执行的字节码指令位置用的。 Java虚拟机栈: 虚拟机栈是用来描述Java方法执行的内存模型,每个线程都有自己的Java虚拟机栈,用于存储局部变量表、操作数栈、动态链接、方法出口等信息。 堆内存: 主要用来给对象分配内存。 方法区(元数据区): 用来存储类信息、常量、静态变量、即时编译器编译后的代码等数据。 来源: https://blog.csdn.net/m0_37039331/article/details/102756895

/proc 下重要文件

最后都变了- 提交于 2019-12-02 11:19:59
/proc 存储系统进程和内核文件信息(存储数据都是存储到内存中) /proc/cpuinfo CPU信息查看 命令 lscpu /proc/meminfo 内存信息查看 命令 free -h /proc//mount 硬盘信息查看 命令 df -h /proc/loadavg 负载信息查看 命令 w uptime top 来源: https://blog.csdn.net/mcweiyi/article/details/102755761

彻底理解cookie,session,token

北战南征 提交于 2019-12-02 05:12:02
彻底理解cookie,session,token 发展史 1、很久很久以前,Web 基本上就是文档的浏览而已, 既然是浏览,作为服务器, 不需要记录谁在某一段时间里都浏览了什么文档,每次请求都是一个新的HTTP协议, 就是请求加响应, 尤其是我不用记住是谁刚刚发了HTTP请求, 每个请求对我来说都是全新的。这段时间很嗨皮 2、但是随着交互式Web应用的兴起,像在线购物网站,需要登录的网站等等,马上就面临一个问题,那就是要管理会话,必须记住哪些人登录系统, 哪些人往自己的购物车中放商品, 也就是说我必须把每个人区分开,这就是一个不小的挑战,因为HTTP请求是无状态的,所以想出的办法就是给大家发一个会话标识(session id), 说白了就是一个随机的字串,每个人收到的都不一样, 每次大家向我发起HTTP请求的时候,把这个字符串给一并捎过来, 这样我就能区分开谁是谁了 3、这样大家很嗨皮了,可是服务器就不嗨皮了,每个人只需要保存自己的session id,而服务器要保存所有人的session id ! 如果访问服务器多了, 就得由成千上万,甚至几十万个。 这对服务器说是一个巨大的开销 , 严重的限制了服务器扩展能力, 比如说我用两个机器组成了一个集群, 小F通过机器A登录了系统, 那session id会保存在机器A上, 假设小F的下一次请求被转发到机器B怎么办? 机器B可没有小F的

Linux yum 命令

最后都变了- 提交于 2019-12-02 04:54:32
yum (全称Yellow dog Update)命令是 RedHat 和 Fedora 以及 SUSE 中基于 rpm 软件包管理器。全称 Yellowdog Updater,Modified。起初是由yellow dog 这一发行版的开发者Terra Soft 研发,用python 写成,那时还叫做yup(yellow dog updater),后经杜克大学的Linux@Duke 开发团队进行改进,遂有此名。yum 可以交互和自动化地更新与管理 rpm 软件包,能够从指定的 yum 存储仓库自动下载 rpm 包并安装,可以自动处理依赖性关系。提供查找、安装、删除、更新等操作命令。 1 检查和更新软件包 可以列出软件包、整体更新软件包、个体更新软件包 1.2 检查系统上已安装的软件包是否有可用的更新 yum check-update 例如:yum check-update 部分输出如下: 1.2.1 更新软件包 可以单个软件包、多个、全部更新,如果更新的包的任何依赖项本身有更新可用,那么依赖的软件包也会被更新。 更新单个软件包 yum update package_name 类似的更新包组 yum group update group_name 更新所有包及依赖项。 yum update 2 查找包及获取相关信息 Yum使您能够对软件包执行完整的操作集,包括搜索软件包