Sky丶Memory

MySQL分区表

背景 在日常的开发中,或多或少会遇上MySQL单表存储的数据量太大导致不得不分表的情况。水平分表是解决单表数据量过大的一种方式,而MySQL自身提供了分区表的功能也可以从一定程度上解决数据量过大的问题。 通常情况下,数据分区需要指定分区规则便于将数据存储在不同的物理文件中,分区的规则一般需要考虑两个要点:是否支持多列、是否支持索引。 分区类型 目前MySQL支持RANGE、LIST、...

Redis事务

最近看redis-py源代码时,发现其支持Redis自身事务特性,就顺带整理了下相关的知识,这里做简述记录。 Redis事务与传统关系型数据库中的事务略有不同,它的事务提供两个保障: 事务中的命令顺序执行,并且在执行当前事务期间,不会有其他客户端命令穿插进来,这点与它提供的pipeline功能存在差异:pipeline中的命令是有可能穿插其他客户端的命令混合执行的。 事务中的命...

TCP学习笔记

TCP(Transmission Control Protocol),即传输控制协议,主要解决了数据在网络上的可靠传输问题。其数据流向大概为:应用层的数据会到TCP层的Segment中,然后TCP层的Segment会到IP层的Packet中,然后再到以太网Ethernet的Frame中,到达对端后,自底向上解析数据并交给应用方。 TCP、IP首部 TCP首部结构图: 一些字段说...

Python之多进程编程

在前一篇文章中提到过,CPython由于实现上的缺陷导致了其对CPU繁忙型任务支持有限,不过Python提供了一种解决方案——多进程,多进程方式通过给每个进程启动一个单独的解释器来避免了GIL问题。 多进程 多进程提供了两种使用方式: import multiprocessing import os def worker(): print("Current process...

Python之多线程编程

现代CPU大多数都支持多核,充分利用多核计算的优势,是工程师必备的技能之一。 多线程 Python中多线程编程有两种使用形式(C扩展方式不在本文讨论范围内): import threading import time def calc_sum(n): ss = 0 for i in range(n + 1): ss += i print("su...

蓄水池采样算法

蓄水池采样算法主要用于解决一类问题:输入样本空间未知的情况下,抽取$k$个样本,使得每个样本被选中的概率相同。 算法步骤,针对第$n$个样本$X_n$: $ n <= k $:$X_n$直接放入池中 $n > k$:以$\frac k n$的概率选中样本$X_n$,若选中,则从池中随机选取样本$X_i$,用$X_n$替换$X_i$ 证明 首先,考察第$j(j ...

一个问题

最近碰到一个算法题: 班级中有n个同学,每个同学有身高~hi~和~wi~,现将这些同学排成一个队,队中相邻同学需满足体重单调递减、身高递增的性质,求队列可能的最长长度。 递增或递减的性质,容易想到将这些同学以h或w进行相应的排序,这样同学间的相对位置就不再发生变化,唯一变化的是每个位置选与不选的问题。 这里以对体重降序为例,将同学以体重降序排序后,原始问题就转换为给定n个元素的...

Python性能调优

在开发中,不免会遇到一种场景:某天,某某同事向你反馈某个接口最近耗时比较久,针对此类问题,通常需要先定位慢在什么地方,只有清楚了源头,才能从本质上优化程序。 进行性能分析的工具统称性能分析器,主要分为两类: 基于事件的性能分析(event-based profiling) 统计式的性能分析(statistical profiling) 基于事件的性能分析器会记录所有的事件,...

MongoDB之复制集、分片

复制集 复制集由一组mongod进程组成,通过冗余提升数据可用性,并在主节点不可用情况下提供自动故障转移功能,一个典型的复制集: 复制集通过mongo shell的rs.initiate进行初始化,初始化后各个成员间发送心跳并发起Primary选举,获得大多数成员投票的节点会成为Primary,其余节点成为Secondary。 config = { _id : "replN...

关于时区的整理

时区 平常开发中,接触时区、时间格式还是比较常见的,这里简单整理下: UTC(Coordinated Universal Time): 世界协调时间时 CST(China Standard Time):中国标准时间 ISO时间格式为YYYY-MM-DDThh:mm:ss.sTZD,例如:1997-07-16T19:20:30.45+01:00,ISO时间格式中若带有Z,则表示UTC时...

Frequent Commands Arrange

top top命令用于实时查看进程信息,在交互式窗口下top支持不少的选项。这里说的选项指的是在交互式环境下输入对应的字母。 排序选项: P:CPU使用率排序 M:内存使用率排序 T:CPU占用时间排序 交互选项: z:单色与多色之间切换 b:粗体展示 x:高亮排序列 y:高亮运行任务 过滤选项: u:指定用户进程 o或O:指定过滤...

MongoDB基本篇

MongoDB是一款开源的、分布式文档型数据库产品,其提供了无结构、高性能、高可用、自动伸缩的特性吸引了不少开发者的青睐,公司里面不少项目中都有它的影子,所以打算学习学习。 MongoDB Docker仓库地址bitnami/mongodb,本文中所有命令都在mongo shell环境下执行 基本概念 MongoDB 关系型数据库 ...

Celery基本篇

Celery是一个基于Python开发的分布式任务队列系统,支持实时性、周期性任务,各组件关系图: Broker Celery支持多种Broker,完整支持列表Brokers,官方推荐使用RabbitMQ作为Broker,为简单起见,本文使用Redis作为例子介绍。 一个简单的例子 同一文件夹下创建tasks.py、celerycfg.py两个文件,文件内容分别为: #...

Python之描述符工作机制

描述符,算得上Python语言层次上面一个高级的特性,这篇文章会从三个方面介绍描述符特性:定义、触发机制、应用例子。另外,本文中所有代码均在Python 3.4下进行测试 定义 Python标准语法规定描述符需要实现特定的描述符协议,其具体的描述符协议对应如下: object.__get__(self, obj, type=None) --> value object._...

Redis过期功能介绍

Redis作为一款NoSQL数据库产品,其自身提供了自动过期功能来清理失效数据,这可以大大简化开发人员的工作,使其更关注于业务层的逻辑,这篇文章从使用、自动清理策略、对持久化、复制的影响三个方面来介绍Redis过期功能。 使用 Redis默认提供了5种方式设置生存或过期时间,其基本语法大体如下: EXPIRE key seconds: 将键key的生存时间设置为seco...

itertools基本使用

itertools算得上是Python中比较常用的一个模块,它主要提供了操作在可迭代对象上的一些实用函数,这篇文章主要介绍这些函数的基本等价实现与一些使用心得.(Python Version:3.6.3) cycle 基本等价实现: def cycle(iterable): # cycle('ABCD') ---> A B C D A B C D A B C D... ...