即将去内蒙古农业大学读林业工程,不清楚未来会是什么样,也无法确定未来走向,可以确定的是,我对代码还是挺喜爱的。

故重新拾起博客,花时间学点自己认为有成就感的事情。Just do it.

redis geo 性能分析及对问题的思考

[toc]

对 redis 进行压力测试

将数据存入 redis 后(共 85318 条有效数据),通过压测工具redis-benchmark对 redis 进行压测。

1
redis-benchmark -h 127.0.0.1 -p 6379 -c 50 -n 1000 -q georadius outlet 112 -7 200 km withdist

并发数为 50,每个并发发送 1000 个请求,结果如下:

image-20210726174917453

注:本文所用电脑为 MacBook Pro (16-inch, 2019),cpu 为:Intel(R) Core(TM) i7-9750H CPU @ 2.60GHz,内存为 16 g。

阅读全文 »

PostgreSQL-gis Redis-geo BuntDB 性能比拼

[toc]

听说 postgresql 中的 postGIS 在处理经纬度方面速率很快(gist 内部使用的是搜索树,geo 内部使用的是 geohash),所以比较一下,看看 8w 数据量的情况下,哪个快一点。

PostgreSQL(pg)搭建

pg 添加 postGIS 扩展(postGIS 扩展很强大,建议深入学习):

1
create extension postgis;

附:Mac 安装 PostGIS 流程:link

pg 创建测试表:

1
postgres=# create table gis_idx_test(id int, info text, pos geometry) with (autovacuum_enabled=off,toast.autovacuum_enabled=off);

pg 创建索引(使用 gist 的原因是:gist 比 RTree 更强大,虽然插入数据慢,但是检索数据快,适合存储空间的数据):

1
create index idx_gis_idx_test on gis_idx_test using gist (pos);
阅读全文 »

概述

本博客是讲解 nsq 中一些文件中的主要函数的作用,另外,我个人还针对 nsq v0.1.1 版本的相关代码实现做了一些注释笔记,感兴趣的可以自行阅读:nsq-0.1.1-ghorges

阅读全文 »

nsq 源码分析-1

前言

前几周在学习 raft,但由于 raft 需要耗费的周期比较长,打算等到大四了再好好学一学论文和啃一啃 raft 源码(其实我已经把 raft 的 log 层、log 存储、process 等源码啃的差不多了,剩下最难啃的 raft 层和 node 层了。。。),最近不搞这个了,先认真备战秋招。

这两周学习 nsq,是因为之前在公司用到消息队列的场景还挺多的(客户端打点,日志等之类的都会用到),而我基本没学过 java,看不了 kafka,所以把用 go 编写的 nsq 拿来啃一啃。

阅读全文 »

Mysql 锁学习记录

Mysql 锁设计的初衷是处理并发问题。根据加锁的范围,MySQL 里面的锁大致可以分成全局锁、表级锁和行锁三类。

由于自己基本没有使用过锁,对锁的理解不够深刻,大都仅限于概念,所以需要多多实践。

全局锁

全局锁就是对整个数据库实例加锁。MySQL 提供了一个加全局读锁的方法,命令是:

1
Flush tables with read lock;

当你需要让整个库处于只读状态的时候,可以使用这个命令,之后其他线程的以下语句会被阻塞:数据更新语句(数据的增删改)、数据定义语句(包括建表、修改表结构等)和更新类事务的提交语句。

阅读全文 »

着实睡不着,看一看并记录记录股票的知识吧。

长白线

长白线是指交易时段的开盘价位于最低价附近,收盘价位于最高价附近。

根据某些阴阳线专家的看法,一根具有明显意义的长白线,其实体的长度至少需要是前一天实体长度的三倍。

意思就是说,长白线要尽量的足够长,太短的没有啥意义。

阅读全文 »

为什么需要索引?

一句话:索引的目的就是提高效率。

索引的常见模型

哈希

哈希速度很快,但是有一些缺点:

  • 只适用于等值查询,不适用于范围查询。
  • 如果数据量特别多,冲突多,哈希速度会显著下降。
  • 不能利用索引排序(order by)。
  • 不支持多列联合索引的最左匹配规则。

所以哈希适用于等值查询,Nosql 等等,但是不适合 mysql。

阅读全文 »

立个 flag,早早睡觉,昨天一天就是因为头疼导致学习的时候超容易走神,今天为什么现在还没睡!!!
我太难了,待会出去喝碗胡辣汤就睡。。。


其实最近还有一个小问题,大多时间用在学 Mysql 上了,看 Raft 时间少了。
这个之后再说吧。只要在进步就行,少写点 if else 就行|・ω・`)~
现在感觉这时光真美好,没有 oncall、没有产品给你提需求,想学什么就学什么,想几点睡就几点睡???

阅读全文 »

前置知识

并发事务处理带来的问题

  • 脏读(Dirty reads):一个事务处理一条数据,在这个事务还没有 commit 的时候,另一个事务来读取这个记录,并且用这个记录做一些工作。
  • 不可重复读(Non-repeatable Reads):一个事务在读取某些数据已经发生了改变、或某些记录已经被删除了。举个通俗点的例子:事务A第一次查询得到一行记录 row1,事务 B 提交修改后,事务 A 第二次查询得到 row1,但列内容发生了变化(相当于读到了 B 提交修改后的内容)。
  • 幻读(Phantom Reads):一个事务按相同的查询条件重新读取以前检索过的数据,却发现其他事务插入了满足其查询条件的新数据,这种现象就称为 “幻读” 。
阅读全文 »