MySQL地理围栏数据处理实践

Publish: April 15, 2020 Category: 编程,代码分享 No Comments

我们本次实践的主要内容

  • 地理围栏数据构建
  • mysql 如何使用geo相关字段类型
  • 围栏算法计算

地理围栏数据构建

使用DDL创建一个数据库模式:

CREATE TABLE `geo_1` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `fence_point` point NOT NULL COMMENT '中心点',
  `fence_polygon` polygon NOT NULL COMMENT '单个围栏',
  `fence_multipolygon` multipolygon NOT NULL COMMENT '多围栏',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4

使用原生sql语句插入几条数据

INSERT INTO `geo_1`(
    `id`,
    `fence_point`,
    `fence_polygon`,
    `fence_multipolygon`
)
VALUES(
    NULL,
    GEOMFROMTEXT('POINT(117.134516 36.672215)'),
    GEOMFROMTEXT(
        'POLYGON((117.147711 36.692958,117.152174 36.664804,117.120588 36.659434,117.116297 36.678848,117.147711 36.692958))'
    ),
    GEOMFROMTEXT(
        'MULTIPOLYGON(((117.143528 36.678686,117.144215 36.676758,117.142927 36.67669,117.142412 36.677997,117.143528 36.678686)),((117.144837 36.675829,117.144794 36.674487,117.143743 36.674659,117.14385 36.675881,117.144837 36.675829)),((117.127574 36.670235,117.124227 36.668858,117.124785 36.666448,117.13075 36.667412,117.127574 36.670235)))'
    )
);

特别要注意的几点:

  • POINT类型是单个点,构建只需要一个POINT类型数据即可
  • POLYGON类型或者MULTIPOLYGON中的数据必须是首位相连,也就是第一组数据和最后一组数据是相同的,以构成一个闭合的多边形。

阅读剩余部分...

MySQL到Redis同步方案之基于Python的CDC变更数据捕获

Publish: April 4, 2019 Category: 编程 No Comments

遇到的问题

作为一个WEB开发者,MySQL和Redis是日常应用开发中经常用到的。MySQL作为开源的关系型数据库,以其免费、快速、体积下等特性受到众多开发者的青睐,尤其是以PHP为主要编程语言的开发者PHP+MySQL已经成为标配。但是在应对高并发、大数据量查询等场景就非常吃力,当然这也不是MySQL的强项。为了解决这些问题我我们通常需要将要计算的结果缓存起来或者将高频访问的数据提前缓存,等有请求到来时直接从缓存中读取。Redis的出现完美的解决了上面的问题,其单线程安全、高速非阻塞式I/O以及精准的时间控制就是为高并发场景下缓存完美方案。在具体的实现细节上其中一点要考虑,就是如何将请求的目的数据提前缓存到Redis中呢?

阅读剩余部分...

MQTT自签CA构建SSL加密消息通道服务

Publish: September 28, 2018 Category: 编程,代码分享,运维 6 Comments

SSL工作原理简介

需要知道的知识

  1. CA是什么?
    CA证书授权中心(Certificate Center),也就是证书签发机构,比如Godaddy、WoSign,如果自己给自己签发证书,那我们自己就是CA,只不过别人不认可。他有两个重要属性,即:一、本身受信任,国际认可;二、给他受信任的申请对象签发证书。
  2. 什么是对称加密非对称加密,什么是公钥私钥?
    通俗一点讲对称加密就是:用密钥加密明文得到的密文,使用该密钥解密得到明文。非对称加密:用密钥A加密明文得到的密文,使用密钥B解密得到明文,加密和解密的密钥不是同一个,我们称密钥A为私钥,密钥B为公钥。

因此要记住的一点常识:私钥用于加密,公钥用于解密。



阅读剩余部分...

Workerman中TCP网络粘包问题处理

Publish: November 22, 2017 Category: 编程,代码分享 No Comments

在网络编程中TCP协议相关的肯定会遇到粘包问题,具体原因可查看相关资料,这里仅作简单叙述。着重在workerman中对TCP中消息封包和解包问题的实际处理。

粘包与拆包的概念

在TCP/IP协议中,由于传输层并不了解应用层数据的含义,发送端传输层可能会对应用层数据进行拆分或者合并,在接收端也同样如此。由此而产生的问题就是常常会听说的“粘包与拆包”的问题。“粘包拆包”的问题在“短报文”和“一问一答”的场景下其实并不会出现。短报文是指报文长度远小于MSS的情况,应用层的报文在TCP报文中完全可以放下。另一方面,“一问一答”的通信模式可以保证报文会以单一的TCP包发送出去。在这两个条件下都满足时,我们不需要考虑“粘包拆包”问题。

反之,如果这两个条件不同时满足,就很可能会出现“粘包拆包”问题。

阅读剩余部分...

Python多线程实现web端远程实时控制嵌入式设备

Publish: October 27, 2017 Category: 编程 No Comments

最近接到一个小任务,要为客户实现“web端实时控制嵌入式设备”的项目。主要要求是通过在公网部署,客户通过web页面操控,触发远程设备的相关指令,完成相应操作。

项目结构

项目设计的初期目标是,实现一个类似通道的通过,程序只负责转发数据,具体的业务由远程设备和web端协商。下面是项目的结构图

http2tcp.png

服务启动,实施对应用层http和传输层tcp的监听,远程设备此时可以通过TCP建立双向连接。HTTP服务收到web请求,解析请求数据,然后将请求数据转发给TCP服务,由于TCP服务和远程设备是双向通信,因此web请求的数据就转发到远程设备,完成这个简单的传输过程。

阅读剩余部分...