PHP的InfluxDB客户端库使用

Publish: October 16, 2020 Category: 代码分享 No Comments

这是一个influxdb的1.新版本客户端
https://github.com/influxdata/influxdb-php
如果使用的是2.x版本,请使用找个客户端
https://github.com/influxdata/influxdb-client-php

概览

一个易于使用的库,用于将inflexdb与PHP结合使用。由 @thecodeassassin, @gianarb. 维护。inflexdbphp库是为了拥有python influxdb客户机的php端口而创建的。这样,不同编程语言之间将有一个通用的抽象库。

安装

可以使用composer完成安装:

$ composer require influxdb/influxdb-php

PHP 5.3 和 PHP 5.4 用户请zhu'yi
如果使用php5.3和php5.4,0.1.x版本仍然受支持(bug修复和新版本修复)。0.1.x分支将在php5.3和php5.4上运行,但不包含1.0.0版本所具有的所有特性,例如UDP支持。

开始使用

初始化一个新的客户端对象

$client = new InfluxDB\Client($host, $port);

这将创建一个新的客户机对象,您可以使用它来读写InfluxDB的点。还可以从DSN(数据源名称)创建客户端:

// 直接获取数据库句柄
$database = InfluxDB\Client::fromDSN(sprintf('influxdb://user:pass@%s:%s/%s', $host, $port, $dbname));

// 使用客户端检索其他数据库
$client = $database->getClient();

重要提示:当使用DSN时,不要忘记urlencode()password(和username),尤其是当它包含非字母数字字符时。不这样做可能会引发异常。





阅读剩余部分...

MySQL基于距离半径的搜索和区域搜索POI实践

Publish: June 8, 2020 Category: 小技巧,代码分享 No Comments

因为应用是基于MySql的,所以我们的技术选型也是主要有两种:一种是多边形是否包含,一种是对每一个点进行计算。

首先看第一种:区域内搜索

在我们的业务平台中有很多景区的,每个景区都有围栏地址和中心点地址,我从中摘录一部分,这次重点关注fence_center也就是中心点字段。
我们的table定义如下:

CREATE TABLE `map` (
 `id` int(11) NOT NULL,
 `name` varchar(32) COLLATE utf8_unicode_ci NOT NULL COMMENT '景区名称',
 `fence_center` point DEFAULT NULL,
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='景区表';

我先确定一个多边形围栏,然后直接查找在围栏内的点。这样的计算有一个问题,就是必须事先知道多边形区域,这种方式更适合按区域查找场景。


阅读剩余部分...

MySQL地理围栏数据处理实践

Publish: April 15, 2020 Category: 编程,代码分享 1 Comment

我们本次实践的主要内容

  • 地理围栏数据构建
  • 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中的数据必须是首位相连,也就是第一组数据和最后一组数据是相同的,以构成一个闭合的多边形。

阅读剩余部分...

Python NLP自然语言处理之使用jieba进行中文分词实践

Publish: April 28, 2019 Category: 代码分享,数据分析 No Comments

自然语言处理的首要任务是分词,将一段文本分割成独立的词语。

中文分词介绍

已经归纳的三种分词如下:
规则分词、统计分词、混合分词

  • 规则分词:
    通过设立人工词库,按照一定方式进行切分匹配。

正向最大匹配法(Maximum Match Method MM法)的基本思路,假定分词词典中最最长词为 i 个汉字字符,则首先切分待处理文档的前 i 个字符作为匹配子串,在分词词典中查找。如果找到则表示匹配成功,匹配子串作为一个词切分出来。如果在字典中找不到这个词,则匹配失败,然后将匹配字段中的最后一个字去掉对剩下的子串重新匹配。按照这个方法直到匹配成功。
逆向最大匹配算法(Reverse Maximum Match Method, RMM法):其算法描述和MM法基本一致,唯一的不同在于RMM法是从文本的后面开始匹配。
双向最大匹配法 (Bi-directction method):是将MM法和RMM法得到的结果进行比较,然后按照最大匹配原则,选取词数切分最少的作为结果。

  • 统计分词
    把每个词看做由单个字组成的,如果相连的两个字在不同的文本中出现词数越多,那么这两个词大概率是一个词,当出现的概率高于设定的阈值时我们认为这个”字组“可能会构成一个词。

基于统计的分词一般有两部分内容:

  • 建立统计语言模型
  • 对句子进行单词划分,对划分结果进行概率统计,获得概率最大分词方式。

Jieba中文分词工具

Jieba分词结合了基于规则和基于统计这两类方法实现中文分词。通过前缀词典构建可能的有向无环图,通过在该图中的多条分词路径找到最优路线,也就确定了具体分词。对于未记录在词典的词,其使用HMM模型,采用Viterbi算法进行推导(表示我也不知道这个是什么意思)。






阅读剩余部分...

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

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

SSL工作原理简介

需要知道的知识

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

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



阅读剩余部分...