海量积分数据实时排名处理方式
需求概述 积分排名在很多项目都会出现,大家都不会陌生,需求也很简单,积分排名主要满足以下需求: 查询用户名次。 查询TopN(即查询前N名的用户) 实时排名(很多项目是可选的) 当排序的数据量不大的时候,这个需求很容易满足,但是如果数据量很大的时候比如百万级、千万级甚至上亿的时候,或者有实时排名需求;这个时候要满足性能、低成本等需求,在设计上就变得复杂起来了 常规积分排...
需求概述 积分排名在很多项目都会出现,大家都不会陌生,需求也很简单,积分排名主要满足以下需求: 查询用户名次。 查询TopN(即查询前N名的用户) 实时排名(很多项目是可选的) 当排序的数据量不大的时候,这个需求很容易满足,但是如果数据量很大的时候比如百万级、千万级甚至上亿的时候,或者有实时排名需求;这个时候要满足性能、低成本等需求,在设计上就变得复杂起来了 常规积分排...
堆 堆这种数据结构,有很多的实现,比如:最大堆,最小堆,斐波那锲堆,左派堆,斜堆等。从孩子节点的个数上还可以分为二叉堆,N叉堆等。本文我们从最大二叉堆堆入手看看堆究竟是什么 什么是堆 我们先看看它的定义 堆是一种完全二叉树(不是平衡二叉树,也不是二分搜索树哦) 堆要求孩子节点要小于等于父亲节点(如果是最小堆则大于等于其父亲节点) 满足以上两点性质即可成为一棵合格的堆数据结构...
报文分析 例子: 名称服务器 (nameserver) 地址为 192.168.18.135。 该名称服务器管理了一个区域 (zone),区域的名称为 example.com.。 环境中有一台用户终端,地址为 192.168.18.136,其在名称服务器中添加了一条解析记录,记录为 user.example.com,该记录的值为本机的地址。 +----------------+ qu...
我们知道查询一个域名,需要与 DNS 服务器进行通信。那么,DNS 通信过程大概是怎样的呢? DNS 是一个典型的 Client-Server 应用,客户端发起域名查询请求,服务端对请求进行应答: DNS 一般采用 UDP 作为传输层协议( TCP 亦可),端口号是 53 。请求报文和应答报文均作为数据,搭载在 UDP 数据报中进行传输: 很显然,DNS 请求报文和应答报文均需...
HTTP 协议的历史 超文本传输协议(HyperText Transfer Protocol,HTTP)是一种用于分布式、协作式和超媒体信息系统的应用层协议。HTTP是万维网的数据通信的基础。 HTTP 是万维网(World Wide Web)的基础协议。自 Tim Berners-Lee 博士和他的团队在 1989-1991 年间创造出它以来,HTTP 已经发生了太多的变化,在保...
在程序设计领域, SOLID(单一功能、开闭原则、里氏替换、接口隔离以及依赖反转)是由罗伯特·C·马丁在21世纪早期其著作《敏捷软件开发:原则、模式与实践》(Agile Software Development: Principles, Patterns, and Practices)中引入的记忆术首字母缩略字,指代了面向对象编程和面向对象设计的五个基本原则 SOLID 原则旨在解决软件开...
死锁概念 在许多应用中进程需要以独占的方式访问资源,当操作系统允许多个进程并发执行时可能会出现进程永远被阻塞现象,如两个进程分别等待对方所占的资源,于是两者都不能执行而处于永远等待状态,此现象称为死锁。 死锁通常被定义为:如果一个进程集合中的每个进程都在等待只能由此集合中的其他进程才能引发的事件,而无限期陷入僵持的局面称为死锁。 死锁发生条件 互斥条件: 临界资源是独占资...
Go,通常被称为 golang,它是一门由 Google 创建的现代化的开源编程语言,它允许你构建实时并且高效的应用。 很多流行的应用程序,例如 Kubernetes,Docker,Prometheus 和 Terraform,都是使用 Go 来编写的。 这篇教程讲解如何在 Ubuntu 20.04 上下载和安装 Go。 下载 Go 压缩包 在写这篇文章的时候,Go 的最新版为 1.1...
P2P 通信最大的障碍就是 NAT(网络地址转换),NAT 使得局域网内的设备也可以与公网进行通讯,但是不同 NAT 下的设备之间通讯将会变得很困难。UDP 打洞就是用来使得设备间绕过 NAT 进行通讯的一种技术。 简单解释 NAT NAT 大家应该十分熟悉了,它分为几种。一种就叫做 NAT,它只对 IP 地址进行转换;另一种叫做 NAPT(Network Address/Port Tra...
安装 OpenWRT 咔咔塞了一大堆插件后,可怜的剩余空间被插件和日志耗尽,不得不对 OpenWRT overlay 进行扩容,本文对此进行了记录 什么是 overlay OpenWRT 一般使用的文件系统是 SquashFS ,这个文件系统的特点就是:只读。 一个只读的文件系统要怎么做到保存设置和安装软件的呢?这里就是使用 /overlay 的分区,overlay 顾名思义就是覆盖...