大型新闻网站点击量的技术方案咨询

网友提问:

1.问题主题

如何记录用户发表的文章的点击量

2.问题补充描述

当并发非常小的时候可以直接存在这个文章表里面,叫一个click_count,但是如果网站的访问量很高,那这样数据库肯定要累死,各位大牛有什么好的解决办法么?

8.5.3

mysqlops回答:

我们只讨论访问量很高的情况,例如:每天1亿及以上PV的新闻网站,建议做法可以分为2种方式:

1.使用缓存系统,

数据库数字参考表的妙用

今天的主角就是数字参考表,什么是数字参考表?一个表中,存放了从1开始连续到很大值的数字的表,我们称为数字参考表。

DROP TABLE IF EXISTS ref_number;
CREATE TABLE `ref_number` (
  `id` INT(11) NOT NULL AUTO_INCREMENT,
  `status` TINYINT(3) DEFAULT 0 NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=INNODB DEFAULT CHARSET=utf8

#填充数据的存储过程

DELIMITER $$
USE `test`$$
DROP PROCEDURE IF EXISTS `sp_pCreateNums`$$
CREATE DEFINER=`root`@`localhost` PROCEDURE `sp_pCreateNums`( cnt INT UNSIGNED)

MySQL数据库InnoDB存储引擎多版本控制(MVCC)实现原理分析

文/何登成

导读:  

来自网易研究院的MySQL内核技术研究人何登成,把MySQL数据库InnoDB存储引擎的多版本控制(简称:MVCC)实现原理,做了深入的研究与详细的文字图表分析,方便大家理解InnoDB存储引擎实现的多版本控制技术(简称:MVCC)。

基本知识

假设对于多版本控制(MVCC)的基础知识,有所了解。MySQL数据库InnoDB存储引擎为了实现多版本的一致性读,采用的是基于回滚段的协议。

行结构

MySQL数据库InnoDB存储引擎表数据的组织方式为主键聚簇索引。由于采用索引组织表结构,记录的ROWID是可变的(索引页分裂的时候,Structure Modification Operation,SMO),因此二级索引中采用的是(索引键值, 主键键值)的组合来唯一确定一条记录。

MySQL数据库之枚举数据类型ENUM的DDL变更测试

导读

针对四种数据类型:布尔类型BOOL或称布尔类型BOOLEAN、微整型TINYTINT、枚举类型ENUM、集合类型SET,我们已经分多篇文章篇幅给出详细的介绍与功能测试数据,接下来我们深入介绍枚举类型EUNM和集合类型SET。测试基于InnoDB存储引擎上,对MySQL数据库枚举类型ENUM的字段进行DDL变更操作,是否需要重新创建表呢?对数据库的事务处理有何影响?对数据库的数据服务提供有何性能影响?

(一)   系统环境

硬件:DELL R510  10块盘做的RAID5,上面跑了几十个虚拟机

操作系统:CentOS release 5.5 (Final)

MySQL数据库:5.5.15-log

InnoDB存储引擎:plugin-InnoDB 1.1.8

mysql技术内幕-innodb存储引擎读书笔记(下)

第六章、锁

锁是区别文件系统和数据库系统的一个关键特性。

6.1、什么是锁?
锁是用来管理对共享文件的并发访问。innodb会在行级别上对数据库上锁。不过innodb存储引擎会在数据库内部其他多个地方使用锁,从而允许对不同资源提供并发访问。例如操作缓冲池中的LRU列表,删除,添加,移动LRU列表中的元素,为了保证一致性,必须有锁的介入。

6.2、innodb存储引擎中的锁
6.2.1、锁的类型
S lock 共享锁 允许事务读一行数据
X lock 排它锁 允许事务删除或者更新一条数据
IS lock 意向共享锁 事务想要获得一个表中某几行的共享锁

mysql技术内幕-innodb存储引擎读书笔记(中)

第四章、表

4.1、innodb存储引擎表类型
innodb表类似oracle的IOT表(索引聚集表-indexorganized table),在innodb表中每张表都会有一个主键,如果在创建表时没有显示的定义主键则innodb如按照如下方式选择或者创建主键。
首先表中是否有唯一非空索引(unique not null),如果有则该列即为主键。
不符合上述条件,innodb存储引擎会自动创建一个6字节大小的指针,rowid().

4.2、innodb逻辑存储结构
innodb的逻辑存储单元由大到小分别是 tablespace,segment,extent,page(block)组成。

mysql技术内幕-innodb存储引擎读书笔记(上)

第一章、mysql体系结构和存储引擎

1.1、数据库和实例的区别
数据库:物理操作系统或其他形式文件类型的集合。在mysql下数据库文件可以是frm,myd,myi,ibd结尾的文件。
数据库实例:由数据库后台进程/线程以及一个共享内存区组成。
mysql数据库是但进程多线程的程序。

1.2、mysql的体系结构
mysql由连接池组件、管理服务和工具组件、sql接口组建、查询分析器组件、优化器组件、缓存组件、插件是存储引擎、物理文件。
示意图见书:P4.

1.3、mysql存储引擎

MySQL数据库Concat和outfile函数妙用

大家有没有接触过这样的需求,采集历史数据库中或者其他数据库中的某些信息,这些信息是另一个服务器需要执行sql的条件。通常我们的处理手段是把这个信息通过sql找出来或导出,然后使用脚本或者手工拼凑新的新的sql语句。在很多紧急情况下(产品bug、数据错乱)会产生这样的需求,这个时候处理的是在线数据库,不能有一点马虎、如果数据量稍微大一点,DBA们就够焦头烂额了。我之前也多次遇见这种情况,我把一些经验介绍给大家。
其实这种情况下使用concat+out file会得到事半功倍的效果。

甲骨文战略主导下 MySQL数据库将走向何方

导读

2012年2月23日,甲骨文公司联合上海爱可生信息技术有限公司,于上海举办的MySQL创新技术大会上宣布MySQL 5.6企业版本的开发蓝图,并且MySQL官方网站提前一天公布停止更新MySQL 5.1版本的计划,以及会议现场嘉宾分享与问答交流的信息,越来越使我们意识到MySQL数据库产品,将会因甲骨文公司的市场战略需要,而重新走向另外一个MySQL用户不太乐意看见的方向。

(一)   信息梳理

(1).     甲骨文于2005年10月份收购InnoDB存储引擎开发商芬兰公司Innobase;

(2).     SUN于2008年1月份收购MySQL AB公司;

(3).     甲骨文于2009年4月份收购SUN公司及其子公司的全部资产;