Tracking the Money — Scaling Financial Reporting at Airbnb

At Airbnb, the Payments team is responsible for everything related to moving money in Airbnb’s global marketplace. We build technology that powers Airbnb’s massive daily transaction volume to collect payments from guests and distribute payouts to hosts. Our goal is to make the payment experience on Airbnb delightful, magical, and intuitive.Historically, the payments team’s focus was to implement n...阅读全文

小型网站架构降低Apache与MySQL内存占用比率

前言这是一篇极其没有营养的文章,那么请问“什么还要写?”,正所谓“不积跬步无以至千里,不积小流无以成江海”,难得学习与总结。而且,并不一定每篇文章都需要长篇大论、“看似高深”,最后网友看后毫无感觉。这篇文章以我的阿里云服务器为例(你眼前的博客正是搭在这个服务器上),阐述下小型网站(Linux+Apache+MySQL+PHP)对于内存利用率提升的配置方法的一个点。正文我的服务器是阿里云的,在一年前由于数据库(MySQL)频繁内存不足宕机就“潇洒”地升级了配置到2G内存。所以,目前机器的配置如下CPU: 1核内存: 2048 M操作系统: CentOS 6.5 32位公网IP: 115.28.36.1带宽计费方式: 按固定带宽当前使用带宽: 1Mbp同时,正常使用情况下的内存使用情况如下图中显示MySQL占用440m,Apache占用44m。当然,这是MySQL服务和Apache服...阅读全文

深入MySQL用户自定义变量:使用详解及其使用场景案例

一、前言在前段工作中,曾几次收到超级话题积分漏记的用户反馈。通过源码的阅读分析后,发现问题出在高并发分布式场景下的计数器上。计数器的值会影响用户当前行为所获得积分的大小。比如,当用户在某超级话题下连续第n(n即计数器的值)次进行转发帖子时,将会获得与n相关的分数。然而,在第一次改进后问题依然存在。所以,这次在之前的基础上,通过使用MySQL变量的途径来解决该问题。二、到底MySQL的变量分哪几类?MySQL变量一共分为两大类:用户自定义变量和系统变量。如下用户自定义变量局部变量会话变量系统变量会话变量全局变量本文涉及的内容为用户自定义会话变量,若对其他分类无感,请点击这里。PS:用户定义的会话变量和系统定义的会话变量有什么区别?局部变量局部变量一般用于SQL的语句块中,比如存储过程中的begin和end语句块。其作用域仅限于该语句块内。生命周期也仅限于该存储过程的调用期间。上述存储过程中定义的变量c就是局部变量。...阅读全文

MySQL查询group by用法详解

group by语法可以根据给定数据列的每个成员对查询结果进行分组统计,最终得到一个分组汇总表。SELECT子句中的列名必须为分组列或列函数。列函数对于GROUP BY子句定义的每个组各返回一个结果。某个员工信息表结构和数据如下  id  name  dept  salary  edlevel  hiredate      1 张三 开发部 2000 3 2009-10-1      2 李四 开发部 2500 3 2009-10-0      3 王五 设计部 2600 5 2010-10-0      4 王六 设计部 2300 4 2010-10-0      5 马七 设计部 2100 4 2010-10-0      6 赵八 销售部 3000 5 2010-10-0      7 钱九 销售部 3100 7 2010-10-0      8 孙十 销售部 35...阅读全文

高并发、分布式数据库场景下需要注意的UPDATE SQL写法

业务模块超级话题签到积分具体场景更新签到积分行为表integration_record - 每次产生积分行为的记录表。即每当用户产生积分行为(如:在超级话题内进行签到、转发和回复等行为),就会增加一条integration_record表的记录。表明该用户在该超级话题下通过哪些行为产生了多少积分增量。integration - 每个用户的总积分表。即在每次写入一条integration_record记录后,会将积分增量累计加入到该表的总积分字段中。表明目前为止,该用户在该超级话题下通过积分行为一共获取的积分总数。表的细节就不给出了(也没必要)。这两张表都以话题ID(topic_id)和用户ID(uid_id)进行联合索引。具体问题在某些情况下,某个用户所在某个话题下的所有integration_record记录的积分总和小于该用户在该话题下的integration表记录的总积分。异常日志通...阅读全文

MySQL中的varchar与char字段类型的区别

文章1char与varchar的区别char (13)长度固定, 如'www.jb51.net' 存储需要空间 12个字符varchar(13) 可变长 如'www.jb51.net' 需要存储空间 13字符从上面可以看得出来char 长度是固定的,不管你存储的数据是多少他都会都固定的长度。而varchar则处可变长度但他要在总长度上加1字符,这个用来存储位置。所以实际应用中用户可以根据自己的数据类型来做。再看看char,与varchar在速度上的区别吧。代码如下从上面可以看出来,由于某种原因char 固定长度,所以在处理速度上要比varchar快速很多,但是对费存储空间,所以对存储不大,但在速度上有要求的可以使用char类型,反之可以用varchar类型来实例。注明在用char字符类型时内容后面有空间时必须作相关处理,要不就会把空格自动删除。建意myisam 存储引擎 建议使用...阅读全文

Mysql 事件(定时任务)

mysql 创建任务(事件1、检查数据库事件是否开启,如果 event_scheduler 等于 NO表示开启2、开启任务(事件a、set global event_scheduler=1;b、SET GLOBAL event_scheduler = ON;c、在my.cnf中的[mysqld]部分添加 event_scheduler=ON 然后重启mysql。3、关闭事件4、语法参数详细说明DEFINER: 定义事件执行的时候检查权限的用户。ON SCHEDULE schedule: 定义执行的时间和时间间隔。ON COMPLETION [NOT] PRESERVE: 定义事件是一次执行还是永久执行,默认为一次执行,即NOT PRESERVE。ENABLE | DISABLE | DISABLE ON SLAVE: 定义事件创建以后是开启还是关闭,以及在从上关闭。如果是从服务器自...阅读全文

MySQL数据库优化笔记

视频地址:http://www.imooc.com/video/3688 可以从以下几个方面进行优化 硬件系统配置数据表结构SQL语句和索引一般来说,上述方式的实现成本(自上而下)由高到低,而效果(自上而下)由低到高。使用慢查询日志使用系统的慢查询日子来监控有问题的SQL。show variables like 'slow_query_log'set global slow_query_log_file = '/home/mysql/log/slow_query_log.log'set global log_queries_no_using_indexes = onset global long_query_time = 1慢查询分析工具pt-query-digest如何发现有问题的SQL查询次数多,且占用时间长的(通常为pt-query-digest分析中前几个SQL);IO大得SQL(...阅读全文