空间数据

Elasticsearch(GEO)数据写入和空间检索

主宰稳场 提交于 2019-11-29 17:08:40
Elasticsearch简介 什么是 Elasticsearch? Elasticsearch 是一个开源的分布式 RESTful搜索和分析引擎,能够解决越来越多不同的应用场景。 本文内容 本文主要是介绍了ES GEO数据写入和空间检索,ES版本为7.3.1 数据准备 Qgis使用渔网工具,对范围进行切割,得到网格的Geojson 新建索引设置映射 def set_mapping(es,index_name="content_engine",doc_type_name="en",my_mapping={}): # ignore 404 and 400 es.indices.delete(index=index_name, ignore=[400, 404]) print("delete_index") # ignore 400 cause by IndexAlreadyExistsException when creating an index my_mapping = { "properties": { "location": {"type": "geo_shape"}, "id": {"type": "long"} } } create_index = es.indices.create(index=index_name) mapping_index = es.indices

Zabbix 数据清理

心不动则不痛 提交于 2019-11-29 13:57:10
目录 Zabbix 数据清理的一系列操作 一、问题 二、解决办法 Zabbix 数据清理的一系列操作 基本信息: Zabbix 版本 4.0.9 MySQL 版本 5.5 一、问题 我们将 Zabbix 的数据存放在测试环境的 RDS (阿里云)上,但是这个 RDS 购买的时候就只有 10G 的存储,所以监控没有几个月,我们的数据库就报存储空间不足的预警了。 首先进行排查,是哪些表占用的存储空间比较多呢,我们发现主要是 history 和 history_uint 这两个表。占用空间最大的是 history_uint 表。 那么这两个表分别是存储什么内容呢? history_uint 该表存储的是监控项的无符号整型的数据。 该数据的保存时长,取决于在监控项设置的 历史数据保留时长。 CREATE TABLE `history_uint` ( `itemid` bigint(20) unsigned NOT NULL, `clock` int(11) NOT NULL DEFAULT '0', `value` bigint(20) unsigned NOT NULL DEFAULT '0', `ns` int(11) NOT NULL DEFAULT '0', KEY `history_uint_1` (`itemid`,`clock`) ) ENGINE=InnoDB

缓存IO和直接IO

人盡茶涼 提交于 2019-11-29 11:25:42
缓存IO和直接IO 缓存IO: 数据先从磁盘通过DMA copy到内核空间,再从内核空间copy到用户空间。 直接IO: 数据直接从磁盘通过DMA copy到用户空间。 3.1 缓存IO 缓存IO又被称为标准的I/O,大多数文件系统的默认I/O操作都是缓存IO 。在Linux的缓存I/O机制中,数据先从磁盘复制到内核空间的缓冲区,然后再从内核空间的缓冲区复制到应用程序的地址空间。 读操作:操作系统检查内核空间的缓冲区有没有需要的数据,如果有就直接从缓存区返回;否则从磁盘中读取,然后再缓存在操作系统的缓存中。 写操作:将数据从用户空间复制到内核空间的缓冲区中。这时候对用户程序来说,写操作已经完成,至于什么时候把数据写到磁盘中是由操作系统决定,除非显示调用sync同步命令( linux 同步IO: sync、fsync与fdatasync ) 缓存IO优点:减少了磁盘读写,提高了系统性能;在一定程度上分离了用户空间和内核空间,保护系统本身运行安全。 缓存IO缺点:在缓存I/O机制中,DMA方式可以将数据直接从磁盘读到页缓存中,或者将数据从页缓存直接写回磁盘上,而不能直接在应用程序的地址空间(用户空间)和缓存(内核空间)之间进行数据传输。这样,数据在传输过程中就需要在应用程序地址空间和缓存之间进行多次数据拷贝操作,这些数据拷贝操作所带来的CPU及内存开销是非常大的。 3.2 直接IO

MySQL高级特性四:查询缓存

会有一股神秘感。 提交于 2019-11-29 10:58:07
很多数据库产品都能够缓存查询的执行计划,对于相同类型的SQL就可以跳过SQL解析和执行计划生成截断。MySQL在某些场景下也可以实现,但是MySQL还有另一种不同的缓存类型:缓存完整的select查询结果,也就是查询缓存。 MySQL查询缓存保存查询返回的完整结果。当查询命中该缓存,MySQL会like返回结果,跳过了解析、优化和执行截断。 查询缓存系统会跟踪查询中涉及的每个表,如果这些表发生变化,那么和这个表相关的所有的缓存数据都将失效。这种机制效率看起来比较低,因为数据表变化时很有可能对应的查询结果没有变更,但是这种简单实现代价很小,而这点对于一个非常繁忙的系统来说非常重要。 查询缓存对应用程序是完全透明的。应用程序无需关心MySQL是通过查询返回的还是实际执行返回的结果。事实上,这两种方式执行的结果是完全相同的。换句话说,查询缓存无需使用任何语法。无论是MySQL开启或关闭查询缓存,对程序都是透明的。 随着现在的通用服务器越来越强大,查询缓存被发现是一个影响服务器扩展性的因素。它可能成为整个服务器的资源竞争单点,在多核服务器上还可能导致服务器僵死。所以大部分时候应该默认关闭查询缓存,如果查询缓存作用很大的话,可以配置个几十兆的小缓存空间。 1 MySQL如何判断缓存命中 MySQL判断缓存命中的方法很简单:缓存存放在一个引用表中,通过一个哈希值引用,这个哈希值包括了如下因素:

十分钟弄懂:数据结构与算法之美 - 时间和空间复杂度

两盒软妹~` 提交于 2019-11-29 07:49:55
复杂度分析是整个算法学习的精髓,只要掌握了它,数据结构和算法的内容基本上就掌握了一半了。 1. 什么是复杂度分析 ? 数据结构和算法解决是 “如何让计算机更快时间、更省空间的解决问题”。 因此需从执行时间和占用空间两个维度来评估数据结构和算法的性能。 分别用时间复杂度和空间复杂度两个概念来描述性能问题,二者统称为复杂度。 复杂度描述的是算法执行时间(或占用空间)与数据规模的增长关系。 2. 为什么要进行复杂度分析 ? 和性能测试相比,复杂度分析有不依赖执行环境、成本低、效率高、易操作、指导性强的特点。 掌握复杂度分析,将能编写出性能更优的代码,有利于降低系统开发和维护成本。 3. 如何进行复杂度分析 ? 3.1 大 O 表示法 算法的执行时间与每行代码的执行次数成正比,用 T(n) = O(f(n)) 表示,其中 T(n) 表示算法执行总时间,f(n) 表示每行代码执行总次数,而 n 往往表示数据的规模。这就是大 O 时间复杂度表示法。 3.2 时间复杂度 1)定义 算法的时间复杂度,也就是算法的时间量度。 大 O 时间复杂度表示法 实际上并不具体表示代码真正的执行时间,而是表示 代码执行时间随数据规模增长的变化趋势 ,所以也叫 渐进时间复杂度 ,简称 时间复杂度 (asymptotic time complexity)。 例子1: function aFun() {

Python 基础之 I/O 模型

女生的网名这么多〃 提交于 2019-11-29 07:07:18
一、事件驱动模型介绍 1、传统的编程模式 例如:线程模式大致流程 开始--->代码A--->代码B--->代码C--->代码D--->......--->结果 每一个代码里是完成各种各样事情的代码,但编程者知道代码A,B,C,D...的执行顺序,唯一能够改变这个流程的是数据。输入不同的数据, 根据条件语句判断,流程或许就改为A--->B--->D...--->结束。 每一次程序运行顺序或许都不同,但它的控制流程是由输入数据和你编写的程序决定的。如果你知道这个程序当前的运行状态(包括输入 数据和程序本身),那你就知道接下来甚至一直到结束它的运行流程。 例如:事件驱动程序模型大致流程 开始--->初始化--->等待 与上面传统编程模式不同,事件驱动程序在驱动之后,就在那等待,等待什么呢?等待被事件触发。传统编程下也有“等待”,比如在 编代码D中,你定以了一个input(),你作为程序编写者是知道或者强制用户输入东西的,或许是数字,或许是文件名称,如果用户输入 错误,你还需要提醒他,并请他重新输入,事件驱动程序的等待则是完全不知道,也不强制用户输入或者干什么,只要某一事件 发生,那程序就会做出相应的“反应”。这些事件包括:输入信息、鼠标、敲击键盘上某个键还有系统内部定时器触发。 2、事件驱动模型 通常,我们写服务器处理模型的程序时,有一下几种模型: (1)每收到一个请求;创建一个新的进程

JVM垃圾收集器

故事扮演 提交于 2019-11-29 06:24:39
[牛客网]下列哪项不属于jdk1.6垃圾收集器? A.Serail收集器 B.parNew收集器 C.CMS收集器 D.G1收集器 在牛客网刷题,碰到这么一个问题,只知道JVM有垃圾收集器,却从来没具体了解过,真是越学越发现自己的无知,不懂就学。 概述 垃圾收集 Garbage Collection 通常被称为“GC”,它诞生于1960年 MIT 的 Lisp 语言。如果说收集算法是内存回收的方法论,那么垃圾收集器就是内存回收的具体实现。Java虚拟机规范中对垃圾收集器应该如何实现并没有任何规定,因此不同的厂商、不同版本的虚拟机所提供的垃圾收集器都可能会有很大差别,并且一般都会提供参数供用户根据自己的应用特点和要求组合出各个年代所使用的收集器。 垃圾收集器需要完成的三件事: 1)哪些内存需要回收? 2)什么时候回收? 3)如何回收? Jvm运行时数据区域 Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域。这些区域都有各自的用途,已经创建和销毁时间,有的区域随着虚拟机进程的启动而创建,有些区域则依赖用户线程的启动和结束而创建和销毁。根据《Java虚拟机规范(Java SE 7)》的规定,Java虚拟机所管理的内存将会包括以下几个运行时数据区域,如下图所示: 线程隔离(私有)的数据区 程序计数器 程序计数器(Program Counter

5 mysql底层解析——b+ tree和每个page存储结构,包括连接、解析、缓存、引擎、存储等

北城以北 提交于 2019-11-29 06:23:40
上一篇 ,我们学习了innodb文件系统内部大的存储结构,包括段(segment),簇(extent),页(page)各自的含义。 简单回顾一下,段是组成表空间的最大结构,当创建一个表时,会同时创建两个段(内节点段,叶子段),分别管理非叶子节点数据和叶子节点数据。其实还有一个段(回滚段),是存放回滚数据的,只不过回滚段不是放在每个表的表空间,而是放在共享表空间的,希望还能记得共享表空间是什么。 簇,是段的下一级,每个簇固定大小是64个page,共64*16K=1M。为了保证数据存储时,页能尽量保持物理磁盘上的连续性,innodb会一次性申请4-5个簇。 页,最小的存储单位。常见的页类型有数据页、undo页、系统页、事务数据页、插入缓冲位图页、插入缓冲空闲列表页、未压缩的二进制大对象页、压缩的二进制大对象页。 OK,回到B+ tree这里。 B+ tree是如何构成的,里面的数据是怎么存放的呢。 以一个简单的2层b+ tree为例 这个树只有2层,首先每个page都有自己的唯一编号,将来就要通过编号来找对应的page。根页做为一个第一层的索引页,里面是不存在叶子数据(行数据)的,只存放Key,同时还包含了pageNo信息,用来将来去找对应的页。 所有的记录节点都是按键值的大小顺序存放在同一层的叶子节点上,由各叶子节点指针进行连接(双向指针)。 所以查询时,无论正序倒序

MYSQL性能调优

允我心安 提交于 2019-11-29 03:43:32
摘要 为了学习研究MySQL数据库在工作原理,深刻理解MySQL在企业运用时如何保证其高效运行。分别从表结构的优化,SQL语句的优化,存储引擎的选择,索引的优化以及现今MySQL的发展与其他企业级数据库的比较。介绍了从编码选择到数据类型的选择以及从整体的角度设计表结构。在SQL语句的选择和使用的介绍的时候,深入介绍了一些基本的使用原则以及在一般在使用过程中我们存在的误区以及如何解决这些问题。着重介绍了MySQL的几个存储引擎MyISAM、InnoDB和NDBCluster的差异以及各自的适用范围。有介绍了MySQL的索引的一些优化的建议以及高屋建瓴地阐述和比较了MySQL的优劣和发展态势。 前言 数据库作为应用作为广泛,地位极为重要的中间件应用,学习和使用数据库管理系统变得越来越重要。为了研究和总结对mysql数据库的学习结果,特别从数据表结构、sql语句优化、存储引擎的选择、索引的应用、以及mysql的比较总结对mysql技术做了一个比较全面升入的介绍。使用mysql的过程中,如何更好地使用与优化越来越重要,在这篇文章中就阐述。 第一章 表结构的优化 数据表是数据库的具体表现形式,设计优良的数据库拥有良好的表结构,者不单单指数据库的表需要满足范式结构,为了更有利于具体操作,表结构还需要实际的可扩展性,以便于做增删改查,又需要根据数据表的具体作用做出调节

分布式架构之缓存系统

两盒软妹~` 提交于 2019-11-29 03:20:45
  一个大型稳健成熟的分布式系统的背后,往往会设计众多的支撑组件,将这些支撑系统成为分布式系统的基础设施。进行系统架构设计所依赖的基础设施,还包括分布式协作及配置管理组件、分布式缓存组件、持久化存储组件、分布式消息系统、搜索引擎、以及CDN系统、负载均衡系统、运维自动化系统等,还有实时计算系统、离线计算系统、分布式文件系统、日志收集系统、监控系统、数据仓库等。此处主要讲讲缓存系统组件。 缓存组件层 缓存系统带来的好处: 加速读写。缓存通常是全内存的,比如Redis、Memcache。对内存的直接读写会比传统的存储层如MySQL,性能好很多。由于单台机器的内存资源和承载能力有限,并且如果大量使用本地缓存,也会使相同的数据被不同的节点存储多份,对内存资源造成较大的浪费,因此才催生出了分布式缓存。 降低后端的负载。在高并发环境下,大量的读、写请求涌向数据库,磁盘的处理速度与内存显然不在一个量级,从减轻数据库的压力和提供系统响应速度两个角度来考虑,一般都会在数据库之前加一层缓存。 缓存系统带来的成本: 数据不一致性:在分布式环境下,数据的读写都是并发的,上游有多个应用,通过一个服务的多个部署(为了保证可用性,一定是部署多份的),对同一个数据进行读写,在数据库层面并发的读写并不能保证完成顺序,也就是说后发出的读请求很可能先完成(读出脏数据) 代码维护成本:加入缓存后