mysql geohash_GeoSearch: 基于geohash算法的位置搜索,利用elasticsearch优化,顺便进行了mysql空间数据库引擎的测试...

GeoSearch

基于geohash算法的位置搜索,利用elasticsearch优化,同时mysql空间数据库引擎的测试

基于springboot2

目前很多资料都是springboot1,es的版本也比较老。es用的是6.2.3,没有用最新的es是因为最新的要装java11,不想折腾虚拟机了。

必要环境

java8、elasticsearch6.2.3

实现功能

1.随机生成90万条经纬度信息

2.利用Geohash算法存储数据点

3.检索周围30米距离的数据点,用时5毫秒(第一次使用要重构索引,时间会长一点),检索出50条记录。

4.利用jmeter模拟一万个客户端在线,每15秒刷新一次数据,Cpu负荷60%。

配置

01e2533e18af9545efae4ed1b722ec3b.png

添加测试数据

778bfbff7f4db04940bff1f596486184.png

启动es

402ca38890cb874c56f56da2c2a96712.png

测试

ac0b247de2e0feebd65e2e24994f612d.png

以下是mysql8的测试

mysql8空间数据库的函数名前面都加了ST,目前网上资料也不较少,经过一点波折也调通了。我的测试结果是mysql比es差很多。

1.创建经纬度表

CREATE TABLE `points` (

`id` int(10) unsigned NOT NULL AUTO_INCREMENT,

`name` varchar(20) NOT NULL DEFAULT '',

`location` point NOT NULL,

`description` varchar(200) DEFAULT NULL,

PRIMARY KEY (`id`,`name`),

SPATIAL KEY `sp_index` (`location`)

) ENGINE=MyISAM AUTO_INCREMENT=216060 DEFAULT CHARSET=gbk;

2.创建随机生成数据的func

CREATE DEFINER=`root`@`localhost` PROCEDURE `fill_points`(

IN size INT(10)

)

BEGIN

DECLARE i DOUBLE(10,1) DEFAULT size;

DECLARE lon FLOAT(7,4);

DECLARE lat FLOAT(6,4);

DECLARE position VARCHAR(100);

-- Deleting all.

DELETE FROM Points;

WHILE i > 0 DO

SET lon = RAND() * 360 - 180;

SET lat = RAND() * 180 - 90;

SET position = CONCAT( 'POINT(', lon, ' ', lat, ')' );

INSERT INTO Points(name, location) VALUES ( CONCAT('name_', i), ST_GeomFromtext(position) );

SET i = i - 1;

END WHILE;

END

随机生成一百万经纬度数据

CALL fill_points(1000000);

搜索附近

CREATE DEFINER=`root`@`localhost` PROCEDURE `fill_points`(

IN size INT(10)

)

BEGIN

DECLARE i DOUBLE(10,1) DEFAULT size;

DECLARE lon FLOAT(7,4);

DECLARE lat FLOAT(6,4);

DECLARE position VARCHAR(100);

-- Deleting all.

DELETE FROM Points;

WHILE i > 0 DO

SET lon = RAND() * 360 - 180;

SET lat = RAND() * 180 - 90;

SET position = CONCAT( 'POINT(', lon, ' ', lat, ')' );

INSERT INTO Points(name, location) VALUES ( CONCAT('name_', i), ST_GeomFromtext(position) );

SET i = i - 1;

END WHILE;

END

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值