正在载入,请稍候.......


MongoDB 更新文档

MongoDB 使用 update()save() 方法来更新集合中的文档。

update() 方法

update() 方法用于更新已存在的文档。语法格式如下:

1
2
3
4
5
6
7
8
9
db.collection.update(
<query>,
<update>,
{
upsert: <boolean>,
multi: <boolean>,
writeConcern: <document>
}
)
参数说明:
  • query : update 的查询条件,类似 sql update 查询内 where 后面的。
  • update : update 的对象和一些更新的操作符(如$,$inc…)等,也可以理解为 sql update 查询内 set 后面的
  • upsert : 可选,这个参数的意思是,如果不存在 update 的记录,是否插入 objNew,true 为插入,默认是 false,不插入。
  • multi : 可选,mongodb 默认是 false,只更新找到的第一条记录,如果这个参数为 true,就把按条件查出来多条记录全部更新。
  • writeConcern :可选,抛出异常的级别。

官方连接连接地址

阅读全文 »

在github.com上 建立了一个小项目,push 的时候,提示

1
2
3
fatal: unable to access 'https://github.com/xxx.git/': error setting certificate verify locations: 
CAfile: D:/Git/mingw64/ssl/certs/ca-bundle.crtle
CApath: none

而且用 https 在 push 都要输入用户名和密码,很是麻烦

还是 ssh 方便 下面把它换成 ssh 方式的

git remote -v

可以看到形如一下的返回结果

1
2
3
origin https://github.com/xxx.git (fetch)

origin https://github.com/xxx.git (push)
  • 移除本地分支
    git remote rm origin
  • 添加远程分支
    git remote add origin 'git@github.com:xxx/***.git'
  • 最后就阔以愉快的用 ssh 方式了(前提是配置了 ssh key)

大型网站为了软解大量的并发访问,除了在网站实现分布式负载均衡,远远不够.
到了数据业务层、数据访问层,如果还是传统的数据结构,
或者只是单单靠一台服务器来处理如此多的数据库连接操作,数据库必然会崩溃,特别是数据丢失的话,后果更是不堪设想.
利用主从数据库来实现读写分离,从而分担主数据库的压力.
在多个服务器上部署 mysql,将其中一台认为主数据库,而其他为从数据库,实现主从同步.
其中主数据库负责主动写的操作,而从数据库则只负责主动读的操作(slave 从数据库仍然会被动的进行写操作,为了保持数据一致性),
这样就可以很大程度上的避免数据丢失的问题,同时也可减少数据库的连接,减轻主数据库的负载.

主从同步复制有以下几种方式:

  • 同步复制:master 的变化,必须等待 slave-1,slave-2,…,slave-n 完成后才能返回。
  • 异步复制:master 只需要完成自己的数据库操作即可,至于 slaves 是否收到二进制日志,是否完成操作,不用关心。MYSQL 的默认设置。
  • 半同步复制:master 只保证 slaves 中的一个操作成功,就返回,其他 slave 不管。这个功能,是由 google 为 MYSQL 引入的。

mysql 主从复制的思路:

  • 配置主服务器,即 msater,使之具备一下能力(主要接受用户的写操作,并且负责将二进制日志同步给从服务器)

    • 记录二进制日志
    • 为从服务提供一个用户(设置密码),提高二进制日志同步得安全性
  • 配置从服务器,即 slave,使之具备一下能力(主要负责用户的读操作(分担主服务器的读写压力),并且负责重放 master的 写操作,还能实现容灾能力,保证高可用)

    • 记录中继日志
    • 连接到 mysql 可以启动 slave 功能,并且设置 master 信息,通过配置信息,开启 IO_THREAD 和 SQL_THREAD 线程
阅读全文 »

安装 mysql-server
  • 下载并安装 mysql yum 源
    1
    2
    wget -i -c http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm
    yum -y install mysql57-community-release-el7-10.noarch.rpm

运行查看可安装的mysql的命令:yum repolist all| grep mysql
可以修改 yum 配置(enabled=1 想要安装哪个版本就在哪个版本的后面把 0 换成 1,因为默认是最新版,所以需要把最新版的 1 换成 0,5.7 的换为 1)
路径 /etc/yum.repos.d/mysql-community.repo
这里下载的是 5.7 版本的源就不要修改了

  • 安装 mysql-server
    yum -y install mysql-community-server
阅读全文 »

Explain有什么用

ExplainSQL语句一起使用时,MySQL会显示来自优化器关于SQL执行的信息。
也就是说,MySQL解释了它将如何处理该语句,包括如何连接表以及什么顺序连接表等。

  • 表的加载顺序
  • sql的查询类型
  • 可能用到哪些索引,哪些索引又被实际使用
  • 表与表之间的引用关系
  • 一个表中有多少行被优化器查询
阅读全文 »

  • 安装 Docker
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# 安装依赖
sudo yum install -y yum-utils \
device-mapper-persistent-data \
lvm2

# 添加docker下载仓库(由于网络原因,这里添加的是阿里云镜像)
sudo yum-config-manager \
--add-repo \
https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

# 安装docker-ce
sudo yum install docker-ce

# 开机自启
sudo systemctl enable docker
# 启动docker-ce
sudo systemctl start docker

# 验证
sudo docker --version

# 默认情况下,docker 命令会使用 Unix socket 与 Docker 引擎通讯。
# 而只有 root 用户和 docker 组的用户才可以访问 Docker 引擎的 Unix socket。
# 可将非 root 用户 加入 docker 组:($USER 当前用户)
sudo usermod -aG docker $USER
  • 安装 docker-compose
1
2
3
4
5
6
7
8
# 下载 docker-compose (有可能比较慢 可下载好上传) 版本 1.25.5
sudo curl -L "https://github.com/docker/compose/releases/download/1.25.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

# 修改权限
sudo chmod +x /usr/local/bin/docker-compose

# 验证
sudo docker-compose --version

注意需要使用 root 账户或可以使用 sudo 的账户

分页查询时,我们会在 LIMIT 后面传两个参数,一个是偏移量(offset),一个是获取的条数(limit)。当偏移量很小时,查询速度很快,但是当 offset 很大时,查询速度就会变慢。

MySQL Limit 语法格式:

1
SELECT * FROM table LIMIT [offset,] rows | rows OFFSET offset

假设有一张 300w 条数据的表,对其进行分页查询。

1
2
3
4
5
6
7
select * from tbl limit 1, 10		// 31.6ms
select * from tbl limit 10, 10 // 34.9ms
select * from tbl limit 100, 10 // 35.6ms
select * from tbl limit 1000, 10 // 38.3ms
select * from tbl limit 10000, 10 // 5561ms
select * from tbl limit 100000, 10 // 60.6s
select * from tbl limit 1000000, 10 // 272.3s

LIMIT分页查询的时间与偏移量值成正比。当偏移量越大时,查询时间越长。这种情况,会随着业务的增加,数据的增多,会越发的明显。那么,如何优化这种情况呢?答案是,覆盖索引。

阅读全文 »

在项目中使用 PHP7 新特性时 PHPStorm 出现了红色波浪线错误,鼠标移上去看,提示 Coalesce operator is available in PHP 7 Only,这明显不是代码错误,项目基于 PHP7.0+的,有点强迫症,必须把这个给干掉

阅读全文 »

我们有时会遇到这样的情况,正在dev分支开发新功能,做到一半时有人过来反馈一个bug,让马上解决,要切换分支(git checkout),
但是新功能做到了一半你又不想提交,这时就可以使用 git stash 命令先把当前进度保存起来,然后切换到另一个分支去修改bug,修改完提交后,再切回dev分支,
使用 git stash pop 来恢复之前的进度继续开发新功能。下面来看一下 git stash 命令的常见用法

阅读全文 »
0%