使用Arrow生成一段连续的日期时间

日常工作中经常需要按天分表生成某一年的全部表,如下: table_20150101 table_20150102 ...... ...... table_20151231 虽然Python自带的datetime能完成这样的工作,但datetime使用不太简洁直观,可能需要如下的代码: #!/usr/bin/env python3 import datetime dt = datetime.date(2015,1,1) end = datetime.date(2015,12,31) step = datetime.timedelta(days=1) while dt < end: print(dt.strftime('%Y-%m-%d')) dt += step 而Arrow这个第三方模块就能很方便的实现上诉场景,如下: #!/usr/…

使用MyDumper迁移InnoDB到TokuDB

最近几台微信买家相关数据库数据量增长迅猛,空间紧张,因而考虑迁移到压缩率超高的TokuDB,一个比较流行的迁移方法是用mysqldump导出同时修改InnoDB字符串到TokuDB: mysqldump ...... | sed -e 's/^) ENGINE=MyISAM/) ENGINE=InnoDB/' > dump.sql 但这样导出的单一文件恢复时太慢,虽然有各种第三方方法能使mysqldump导出多个文件,但复杂了些;而mydumper因为并行特性是一个更理想的迁移工具,但0.6之前因为锁时间太长导致实际不可用,而0.6后大大降低了锁时间,因而这次我尝试使用MyDumper来迁移InnoDB到TokuDB,我的思路是: 因为MyDumper导出的文件是schema和data分开的,因而可以先导入schema,修改成TokuDB引擎后再将数据导入 以下是步骤: 1.导出文件 mydumper ...... -o /data/dump 2.将schema和data文件分离 mkdir /data/dump_schema mv /data/dump/*schema* /data/dump_schema mv…

使用q和pt-find了解机器上的库表

当DBA换工作到新环境时,肯定需要大概了解下各台机器有什么库表,如下sql就能打印这台机器上所有非系统自带的库名和表名: select TABLE_SCHEMA,TABLE_NAME from information_schema.tables where TABLE_SCHEMA not in ('mysql','information_schema','performance_schema'); 但有这样一种情况--机器因为分库分表虽然有几十个库和成百上千的表,但大部分库表类型其实是相同的,如下所示: +--------------+-------------------+ | db_a01 | tab_c01 | | db_a02 | tab_c02 | ............ ............ | db_b10 | tab_d09 | | db_b10 | tab_d10 | +--------------+-------------------+ 上诉表格虽然有20个库(db_a01~db_a10、…

db-topology:显示MySQL/MariaDB复制的的拓扑结构

尽管pt-slave-find是个很好的主从拓扑发现工具,但命令行看起来毕竟不太直观,db-topology是我写的一个python小工具,可以以图方式直观显示MySQL/MariaDB的拓扑结构.如下图: 一主两从 级联复制 基本思路: 脚本里指定user和password,这个user能连上所有节点,且至少具有replication slave、replication client、process权限,通过 show slave status; show slave host; select host from INFORMATION_SCHEMA.PROCESSLIST where command = 'Binlog Dump' 递归找出它的所有master和slave. 依赖: Python3 Connector/Python NetworkX 使用方法 $ git clone https://github.com/leafonsword/db-topology.git $ cd db-topology…

一道Redis面试题

这道面试题是这样子的: 请用Redis和任意语言实现一段恶意登录保护的代码,限制1小时内每用户Id最多只能登录5次。具体登录函数或功能用空函数即可,不用详细写出。 我乍看下觉得像是面试开发的题~ 花了一下午了解了下redis,发现这货似乎蛮简单的,而且有哈希和列表数据结构.我一开始想用哈希,每个用户为key,登陆时间为value,统计下now和now-1h之间的key数目是否大于5,类似这样的sql select count(user) from user_log where access between date_sub(now, interval 1 hour) and now(). 但感觉这种范围查找会比较慢.后来觉得用列表是个好方法:列表中每个元素代表登陆时间,只要最后的第5次登陆时间和现在时间差不超过1小时就禁止登陆.用Python写的代码如下,感觉蛮简练的,如果网友有更巧妙的方法,欢迎指教. #!/usr/bin/env python3 import redis import sys import time r…

从10s到0.2s--个人博客提速简明手记

近期将博客从DigitalOcean迁移到Linode了,迁移完毕后顺便优化了下主机,效果很明显,访问速度从10s降低到0.2s,有图有真相: Yslow的评分是95分! 以下是我的一些总结: 一.主机选择 1.地理位置--响应时间VS带宽 通常一个误区是新加坡、日本、香港的VPS速度要比美国快,但这里的快只是因为地理位置接近而响应时间很快,也即ping显示数值小;但因为主机商的带宽提供各异和近几年国人对亚洲机房的蜂拥,在晚间访问速度并不一定比美国主机具有优势. 2.DNS 现在VPS厂商大都顺带提供域名解析服务,譬如linode的是nsX.linode.com;假如一个用户第一次访问你的博客,而假如他的本地宽带运营商没有缓存你的域名记录,解析就需到就需先到VPS提供商那,假如VPS提供商是海外的那解析时间还是比较长的;所以使用国内dns解析服务(如dnspod)可能是个比较好的提速选择. 3.虚拟化 一般OpenVZ的这种指令级虚拟化的提供商都会超卖,看起来实惠,其实很不稳定;KVM、XEN能较好的保证稳定性. 二.系统优化 1.系统选择 这没什么说的,Linux是标配了,windows用的少,也贵. 2.Linux优化相关 limits.…