kafka详解
Java BIO NIO AIO
什么是BIO、NIO和AIO?三者有什么区别?具体如何使用?
输入/输出是信息处理系统(例如计算机)与外部世界(可能是人类或另一信息处理系统)之间的通信。
输入是系统接收的信号或数据,输出则是从其发送的信号或数据。
在Java中,提供了一些列API,可以供开发者来读写外部数据或文件。我们称这些API为Java IO。
IO是Java中比较重要,且比较难的知识点,主要是因为随着Java的发展,目前有三种IO共存。分别是BIO、NIO和AIO。
orientdb 常用语句
orientdb启动后可以在 http://localhost:2480 打开前端管理界面操作,也可以在shell里操作
orientdb的很多语句很像mysql和neo4j,学习的时候可以用来对比
常用语句
orientdb | mysql | |
---|---|---|
连接数据库 | CONNECT remote:127.0.0.1 root root | mysql -u root -p root |
查看所有数据库 | LIST DATABASES | show databases |
创建数据库 | CREATE DATABASE remote:127.0.0.1/db_test_wkq root root | create database db_test_wkq |
使用某个数据库 | CONNECT remote:127.0.0.1/db_test_wkq root root | use db_test_wkq |
查询节点类型(表)个数 | LIST CLASSES select expand(classes) from metadata:schema |
show tables |
创建某类节点 | CREATE CLASS TestVertex extends V | create table table1 |
查看某个类型的结构 | INFO CLASS OUser | desc table1 |
查看某个类型的数据 | BROWSE CLASS OUser | select * from OUser limit 20 |
CREATE DATABASE <database-url> [<user>] [<password>] [<storage-type>] [<db-type>] [<[options]>]
创建数据库 CREATE DATABASE PLOCAL:/usr/local/orientdb/databases/db_test_wkq
CREATE DATABASE remote:127.0.0.1/db_test_wkq root root plocal graph
MySQL order by 原理
16 “order by”是怎么工作的?
select city,name,age from t where city='杭州' order by name limit 1000 ;
全字段排序
以我们前面举例用过的市民表为例,假设你要查询城市是“杭州”的所有人名字,并且按照姓名排序返回前 1000 个人的姓名、年龄。
Extra 这个字段中的“Using filesort”表示的就是需要排序,MySQL 会给每个线程分配一块内存用于排序,称为 sort_buffer。
通常情况下,这个语句执行流程如下所示 :
1.初始化 sort_buffer,确定放入 name、city、age 这三个字段;
2.从索引 city 找到第一个满足 city=’杭州’条件的主键 id,也就是图中的 ID_X;
3.到主键 id 索引取出整行,取 name、city、age 三个字段的值,存入 sort_buffer 中;
4.从索引 city 取下一个记录的主键 id;
5.重复步骤 3、4 直到 city 的值不满足查询条件为止,对应的主键 id 也就是图中的 ID_Y;
6.对 sort_buffer 中的数据按照字段 name 做快速排序;
7.按照排序结果取前 1000 行返回给客户端。
MySQL 不走索引
转自 18 | 为什么这些SQL语句逻辑相同,性能却差异巨大?
案例一:条件字段函数操作
对索引字段做函数操作,可能会破坏索引值的有序性,因此优化器就决定放弃走树搜索功能。
假设你现在维护了一个交易系统,其中交易记录表 tradelog 包含交易流水号(tradeid)、交易员 id(operator)、交易时间(t_modified)等字段。为了便于描述,我们先忽略其他字段。这个表的建表语句如下:1
2
3
4
5
6
7
8
9mysql> CREATE TABLE `tradelog` (
`id` int(11) NOT NULL,
`tradeid` varchar(32) DEFAULT NULL,
`operator` int(11) DEFAULT NULL,
`t_modified` datetime DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `tradeid` (`tradeid`),
KEY `t_modified` (`t_modified`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
假设,现在已经记录了从 2016 年初到 2018 年底的所有数据,运营部门有一个需求是,要统计发生在所有年份中 7 月份的交易记录总数。这个逻辑看上去并不复杂,你的 SQL 语句可能会这么写:
为什么我只查一行的语句,也执行这么慢
需要说明的是,如果 MySQL 数据库本身就有很大的压力,导致数据库服务器 CPU 占用率很高或 ioutil(IO 利用率)很高,这种情况下所有语句的执行都有可能变慢,不属于我们今天的讨论范围。
为了便于描述,我还是构造一个表,基于这个表来说明今天的问题。这个表有两个字段 id 和 c,并且我在里面插入了 10 万行记录。
1 | mysql> CREATE TABLE `t` ( |
mysql random
转自 17 | 如何正确地显示随机消息?- MySQL45讲
这个英语学习 App 首页有一个随机显示单词的功能,也就是根据每个用户的级别有一个单词表,然后这个用户每次访问首页的时候,都会随机滚动显示三个单词。他们发现随着单词表变大,选单词这个逻辑变得越来越慢,甚至影响到了首页的打开速度。
1 | mysql> CREATE TABLE `words` ( |
go入门笔记
(1) 安装
go 安装包下载地址:(下面三个都可以)
https://studygolang.com/dl
https://golang.google.cn/dl/
https://golang.org/dl/
比较喜欢用压缩包,解压完配置就可以使用。
go1.12.3.windows-amd64.zip
go1.12.3.linux-amd64.tar.gz
(2) 配置环境变量
(2.1) mac
修改 .bash_profile
文件1
2
3export GOROOT=/usr/local/go
export PATH=$PATH:$GOROOT/bin
export GOPATH=
source .bash_profile
1 | go version |
(3) 牛刀小试
新建一个文件 hello.go ,文件内容如下:1
2
3
4
5
6package main
import "fmt"
func main() {
fmt.Println("Hello, GO !")
}
go run hello.go
输出 Hello, GO !
1 | go run hello.go |
1 | $ go |
(4) 可能遇到的问题
(4.1) ‘go’ 不是内部或外部命令,也不是可运行的程序 或批处理文件。
如果出现 'go' 不是内部或外部命令,也不是可运行的程序 或批处理文件。
就是没有配置path环境变量的原因。
(5) 入门
1 | // 单行注释 |
References
[1] Go 编程语言-中文
[2] 如何使用Go编程-中文
[3] Command go-中文
[4] GO 指南-中文
[5] Go 语言之旅-中文
[6] Go 维基-英文
[7] 包文档-中文
[8] 语言规范-中文
[9] Go 内存模型-中文
[10] go源代码
[11] 一刻钟学会Go语言
[12] Learn X in Y minutes
[13] 再见,Python!你好,Go 语言
kafka 安装 使用
http://kafka.apache.org/downloads
(1) 安装
使用kafka时需要zookeeper,所以需要安装 kafka 和 zookeeper
(1.1) zookeeper安装
下载 apache-zookeeper-3.5.5-bin.tar.gz
解压 tar -zxvf apache-zookeeper-3.5.5-bin.tar.gz
配置 cp -rf conf/zoo_sample.cfg conf/zoo.cfg
启动 ./bin/zkServer.sh start
1 | ZBMAC-C02PGMT0F:apache-zookeeper-3.5.5-bin weikeqin1$ ./bin/zkServer.sh start |