BLOG
Enjoy when you can, and endure when you must.
MAR 21, 2016/数据库
大型网站 Mysql 的演变史

本文主要描述在网站的不同的并发访问量级下,MySQL 架构的演变。

MAY 05, 2014/数据库
MySQL用户管理常用命令
用户管理是MySQL的基本操作之一,为了确保数据库的安全,必须时刻注意用户的增删改以及权限的分配。 从创建用户说起,我们首先来创建一个名为“user1”的用户并设置其密码为“123456”: MariaDB [mysql]> CREATE USER user1 IDENTIFIED BY '123456'; Query OK, 0 rows affected (0.00 s...
DEC 20, 2013/数据库
Redis整数集合
整数集合(intset)是redis的集合(set)类型的一个encoding方式之一,如果set中值包含整数,并且元素较少的话,redis就会采用intset作为该类型的实现。简单看一下整数集合(intset)的定义:typedef struct intset {     // 保存元素所使用的类型的长度     uint32_t encoding;     // 元素个数   &...
DEC 18, 2013/数据库
Redis压缩列表
压缩列表(ziplist)是由一系列特殊编码的内存块构成的列表,它对于Redis的数据存储优化有着非常重要的作用。 为了更好的理解为什么压缩列表更为高效,我们需要从链表谈起。对于一个典型的双向链表,它的每个数据结点中都有两个指针,分别指向直接后继和直接前驱。另外还有一个指针指向该节点的字符串。每一个字符串又实际分为三个部分:一个代表该字符串长度的整数,一个代表剩余字节的整数以及以“\0”结尾的字符串本身。以下是一个示例: 忽略其余细节,除字符串本身和空余的字节外,三个指针和两个整数都会占用额外的空间。而压缩列表转为存储上一个结点长度、当前结点长...
DEC 04, 2013/数据库
构建基于Redis的简单社交网络(四)
本文部分翻译自Josiah L Carlson的《Redis in Action》,CHAPTER 8: Building a simple social network。除了关注功能外,另外一个最基本的功能要数发布状态消息,这是用户发布分享的入口。当别人对你的内容感兴趣时,你就会受到关注。之前我们已经阐述了如何创建消息,但仅仅是局限在创建而并未更新用户自己和其粉丝的时间轴内以供展示。这正是我们这一部分重点讨论的内容。更新时间轴的操作取决于一个用户的粉丝数。如果当前用户的粉丝数较少(例如1000以内),则可以对所有相关用户的时间轴进行即时的更新。而如果该用户的粉丝团很庞大,那恐怕一个同步...
DEC 02, 2013/数据库
构建基于Redis的简单社交网络(三)
本文部分翻译自Josiah L Carlson的《Redis in Action》,CHAPTER 8: Building a simple social network。 分享是Twitter这样的社交网站的基本功能。关注则意味着你对对方所发表的内容感兴趣并且希望得到对方的关注。 本节我们将讨论如何管理用户的关注与粉丝列表,以及在进行关注/取消关注后用户首页的时间轴的变化。 在之前实现时间轴时,我们将状态消息的ID和时间戳放在ZSET中,这里同样可以使用该方法,将用户ID作为成员并以关注的时间作为分数。如下图所示: 在进行关注或取消关注的时候,需要更新用...
NOV 29, 2013/数据库
构建基于Redis的简单社交网络(二)
本文部分翻译自Josiah L Carlson的《Redis in Action》,CHAPTER 8: Building a simple social network。 当用户登录到Twitter后,首先映入眼帘的即是一条由自己以及所关注的用户发布的状态消息所组成的时间轴。作为最基本的入口,其中的数据必须能够尽可能快的获取到。 这一部分,我们就来讨论如何存储时间轴数据并能快速的将其拿出来展示。 对于首页时间轴来说,所需的就是一个包含当前用户自己和关注者的状态消息列表。我们将其保存在ZSET中并以消息ID和时间戳分别作为成员和分数,如下图所示: 不过ZS...
NOV 28, 2013/数据库
构建基于Redis的简单社交网络(一)
本文翻译自Josiah L Carlson的《Redis in Action》,CHAPTER 8: Building a simple social network。 本章,我们将阐述实现一个类似Twitter这样的社交网站所需的数据结构和概念。当然,这并不代表阅读完本章,你就能应付一个真正的大型网站,而是通过其中的机制让你能够更好的去理解如何用简单的方法达到我们的目标。 本章将涉及如下内容: 用户与状态消息 时间轴 关注/被关注列表 发布/删除状态更新 Streaming API 1. 用户和状态消息: 当用户与Twitter进行...
NOV 20, 2013/数据库
一个简单的Redis邮件发送队列
Redis一大特色就是拥有多种数据类型,其中的LIST是有序列表,利用其特性可以很方便的模拟一个队列。下面的代码示例展示了一个简单的Redis邮件发送队列:def send_email_via_queue(conn, to_email, content):     data = {         'to_email': to_email,     ...
NOV 12, 2013/数据库
Redis学习:IP查询(二)
本文部分翻译自《Redis in Action》(Josiah L Carlson)。之前,我们利用ZSET建立了一张城市ID与起始IP地址的对应表。要查询一个IP,我们首先需要使用与之前一样的办法,即将IP转换为10进制整数。之后找到比该IP值相等或较小的最大起始IP。之前已经提到,之所以用到ZSET,就是方便这里的查询。即我们可以利用ZREVRANGEBYSCORE,通过传递START=0,NUM=1,从而实现预想的查询方法。正确获取城市ID后,我们再利用ID到城市ID与信息映射表(HASH)中查询到对应的城市信息。具体的实现代码如下:def find_city_by_ip...
1 2 >