MongDB常用操作

Reference:https://docs.mongodb.com/manual/tutorial/iterate-a-cursor/

在 Mongo Shell 中使用游标

db.collection.find() 方法返回一个游标,要访问文档需要迭代游标。然而在 mongo shell 中如果没有使用 var 关键字分配给返回的游标变量,游标会自动迭代 20 次最多返回 20 条数据。

以下案例演示如何使用游标访问文档以及如何使用游标索引。

MongoDB官网入门指南

Reference: https://docs.mongodb.com/guides/

保护你部署的 MongoDB

介绍如何在本地 MongDB 部署中使用强制认证

1.通过 mongo shell 连接到 MongoDB 服务端

mongo --host <HOSTNAME> --port <PORT> # 默认端口 27017

2.切换到 admin 数据库

use admin

大海捞针 — Scan

keys 的问题

由于众所周知的原因,keys 命令不能随便使用,尤其是在 redis 的实例有成千上万个的时候,使用 keys 会全量遍历导致阻塞其他线程造成线上业务卡顿。

近水楼台 — GeoHash

用数据库来计算附近的人

地球上的任一位置都可以用经纬度(经度:东西方向,以本初子午线为起始点;纬度:南北方向,以赤道为起始点)来表示,如果将坐标位置存在数据库中,它的数据模型应该是:

坐标表(元素id,经度值x,纬度值y)

一毛不拔 — 漏斗限流

设计思想

漏斗限流是最常用的限流方式之一,其来源灵感于漏斗。漏斗的容量是有限的,如果将溜嘴堵住,然后一直往里面灌水,它就会变满,直至再也装不进去。如果将漏嘴放开,水就会往下流,流走一部分后,又可以继续往里面灌水。如果漏嘴流水的速率大于灌水的速率,那么漏斗就永远都装不满。如果漏嘴流水速率小于灌水速率,那么一旦漏斗满了,灌水就需要暂停并等待漏斗腾出一部分空间。

所以,漏斗的剩余空间代表当前行为可以持续进行的数量,漏嘴的流水速率代表着系统允许该行为的最大频率。

断尾求生 — 简单限流

简单限流

限流算法在分布式领域是一个经常被提起的话题,当系统处理能力有限时,如何阻止计划外的请求继续对系统施压,这是一个需要重视的问题。

以论坛社区为例,我们可以通过限流控制用户行为,避免垃圾请求。比如用户的发帖、点赞、回复等行为需要严格管控,限定某行为在规定的时间内次数,超过了次数就是非法行为。

层峦叠嶂 — 布隆过滤器

什么是布隆过滤器

使用 HyperLogLog 数据结构进行去重统计非常高效,但是如果我们想知道某个 value 是否在 HyperLogLog 结构里面这时它就无能为力了。它只提供了 pf.add 和 pd.count 方法,并没有 pf.contains 方法。

四两拨千斤 — HyperLogLog

何为 HyperLogLog

HyperLogLog 是一种高级数据结构,在数据去重统计时非常有用。假设我们需要对网站的每个页面计算 UV,每个用户一天之内的多次访问只计算一次,这里涉及到数据的去重。

节衣缩食 — 位图

何为位图(bitmap)

位图不是特殊的数据结构,它本身是一个普通字符串,即 byte 数组。一个 byte 使用 8 个二进制位存储。redis 提供一系列操作二进制位的指令操作,这些操作称为「位图操作」。

计算机存储单位有:bit、byte、KB、MB、GB、TB、ZB、EB、BB。bit 是计算机的最小存储单位,存储的都是 0 和 1;byte(字节)是计算机的最小数据处理单元,一个字母用一个 byte 存储,一个汉字用两个 byte 存储,1 Byte = 8 bit。
\
1 byte = 8bit
1 kb = 1024byte
1 mb = 1024kb
……

缓兵之计 — 延时队列

异步消息队列

使用 redis 的 list 数据结构可以实现简单的消息队列效果。redis 消息队列没有 ask 机制,如果对消息的可靠性有严格要求则应该使用专业的消息队列中间件如 rabbitmq、kafka。

要使用 redis 的消息队列可以通过搭配 rpush、lpoplpush、rpop 命令实现。

生产者通过 rpush、lpush 推送消息到 list 中,消费者不断轮询 key,通过 rpop、lpop 获取消息。

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×