Mysql的版本和存储引擎较多,为了选择最适合业务使用的系统,需要进行一定的验证,本文描述mysql的验证过程和思路。

主要涉及:

Mysql的版本

v Mariadb

v Tokudb

v Oracle

具体的存储引擎

v Myisam

v Innodb

v TokuDB

v Maria

如下是具体的思路

My.cnf配置

log-bin=mysql-bin 关闭,不要写日志

skip-networking 开启

安装和配置

v mariadb5.5

v Oracle

v Tokudb

如上目录下有对应的安装,卸载脚本

具体步骤如下:

1.首先停止mysql服务

a) service mysql stop / service mysqld stop

b) killall -9 mysql | killal -9 mysqld

c) /etc/profile中不要有mysql的环境变量设置

2.安装引擎

a) 以上的各个对应目录有安装的脚本

3.检验

a) 进入对应的安装目录下的bin目录

b) ./mysql -uroot -p123456 检查安装的版本信息是否正确

c) show engines; show plugins; 可以查看引擎的安装情况

4.运行单元测试验证各个引擎的性能

单元测试[Gtest]

基础插入函数

包括

v 迭代次数

v 存储包的大小:数据字段可设置大小

###是具体的业务表

static void insertOneSession(int count, int size, bool canTruncate = true){

### item = createItem(size);

cppdb::session session;

static const std::string sql =

"insert into `###`) \

VALUES ( ?, FROM_UNIXTIME(?), ?, ?, ?, ?, ?, \

INET_ATON(?), ?, ?, ?, ?, ?, \

?, ?, ?)";

{

try {

session = cppdb::session(::common::base::BaseData::dbConnectString);

cppdb::statement stmt;

if (canTruncate) {

const static string ready = "TRUNCATE table ***";

stmt = session.prepare(ready);

stmt.exec();

}

stmt = session.prepare(sql);

for (int i = 0; i < count; i++) {

stmt.reset();

stmt.bind(###);

...

stmt.exec();

}

} catch (std::exception const &e) {

LOG(ERROR)<< "saveDB:" << e.what();

}

// //关闭链接

if (session.is_open())

session.close();

}

{

//统计出表空间

session =

cppdb::session(

"mysql:user=root;password=123456;database=mysql;set_charset_name=utf8; @pool_size=1");

cppdb::statement stmt =

session.create_statement(

"select table_name,engine,ROUND(data_length/1024,2) size,table_rows from information_schema.tables where table_schema='###' and table_name='traffic'");

cppdb::result r = stmt.query();

while(r.next()){

string table_name, engine;

long size, table_rows;

r.fetch(table_name);

r.fetch(engine);

r.fetch(size);

r.fetch(table_rows);

LOG(INFO) <<"TableInfo::" << table_name << " " << engine <<" " << size << " "<<table_rows;

}

if (session.is_open())

session.close();

}

}

Isam存储测试

class benchMyisamTest: public testing::Test {

public:

static void SetUpTestCase() {

//建立对应的表结构

std::string mysql = "/usr/local/mysql/bin/mysql --default-character-set=utf8 -uroot -p123456 -D mysql -e \"source myisam.sql\"";

system(mysql.c_str());

}

static void TearDownTestCase() {

}

};

TEST_F(benchMyisamTest, 1w100) {

insertOneSession(10000, 100);

}

TEST_F(benchMyisamTest, 1w1000) {

insertOneSession(10000, 1000);

}

....

多线程存储测试

#include <mysql.h>

//多个工作线程的处理

int thread_Num, thread_Size;

void worker(){

insertOneSession(thread_Num, thread_Size);

}

void workerThread(int ts, int count, int size){

//多线程模式下必须使用,否则mysql client库无法连接错误111

mysql_library_init(0, NULL, NULL);

thread_Num = count;

thread_Size = size;

boost::thread_group threads;

for (int i = 0; i < ts; ++i){

threads.create_thread(&worker);

}

threads.join_all();

LOG(INFO) << "done";

//这个错误好像是libmysqlclient的兼容问题 Error in my_thread_global_end(): 4 threads didn't exit

mysql_library_end();

}

TEST_F(benchMyisamTest, thread_1w100) {

workerThread(2, 10000, 100);

}

TEST_F(benchMyisamTest, thread_30w) {

workerThread(3, 100000, 1000);

}

..

其他引擎测试

和如何类似,你可以写出你自己的测试引擎

结果

如下只是我用的虚拟机平台的结果,不代表普适性

存储引擎

优点

缺点

MyISAM

v 插入快

v 查询可以使用索引

v 存在表崩溃问题

ARCHIVE

v 大量时比myisam还快

v 无索引

v 不能更新、删除

InnoDB

v 支持事务

v 慢

TokuDB

v 写入的高性能没有测到

v

Maria

v 和Myisam类似

v 对崩溃安全

v

http://pan.baidu.com/s/1sj0cI8t 是具体的一些安装和配置不同的数据库脚本

mysql不同版本和存储引擎选型的验证的更多相关文章

  1. MySQL表类型和存储引擎版本不一致解决方法

    使用的是老版本的mysql客户端Navicate 8 ,mysql 服务端用的是mysql5.6的版本,在修改版本引擎的时候出现版本不对; mysql error ‘TYPE=MyISAM’ 解决办法 ...

  2. MySQL内核:InnoDB存储引擎 卷1

    MySQL内核:InnoDB存储引擎卷1(MySQL领域Oracle ACE专家力作,众多MySQL Oracle ACE力捧,深入MySQL数据库内核源码分析,InnoDB内核开发与优化必备宝典) ...

  3. MySql常用两大存储引擎简介

    MyISAM存储引擎简介 MyISAM存储引擎的表在数据库中,每一个表都被存放为三个以表名命名的物理文件. 首先肯定会有任何存储引擎都不可缺少的存放表结构定义信息的.frm文件,另外还有.MYD和.M ...

  4. mysql技术内幕InnoDB存储引擎-阅读笔记

    mysql技术内幕InnoDB存储引擎这本书断断续续看了近10天左右,应该说作者有比较丰富的开发水平,在源码级别上分析的比较透彻.如果结合高可用mysql和高性能mysql来看或许效果会更好,可惜书太 ...

  5. MySQL存储引擎选型

    一.MySQL的存储引擎 完整的引擎说明还是看官方文档:http://dev.mysql.com/doc/refman/5.6/en/storage-engines.html 这里介绍一些主要的引擎 ...

  6. MySQL数据库和InnoDB存储引擎文件

    参数文件 当MySQL示例启动时,数据库会先去读一个配置参数文件,用来寻找数据库的各种文件所在位置以及指定某些初始化参数,这些参数通常定义了某种内存结构有多大等.在默认情况下,MySQL实例会按照一定 ...

  7. mysql修改表的存储引擎(myisam&lt;=&gt;innodb)

    查看当前数据库的所支持的数据库引擎以及默认数据库引擎 mysql> show engines; +--------------------+---------+----------------- ...

  8. 修改MySQL的默认数据存储引擎

    因为MySQL默认的是MyISAM数据引擎,不支持事务也不支持外键,所以需要用到Innodb引擎,于是决定将mysql的默认引擎设置为innodb.1 . 查看MySQL存储引擎是用的哪个?登录MyS ...

  9. mysql数据库 myisam数据存储引擎 表由于索引和数据导致的表损坏 的修复 和检查

    一.mysqlcheck 进行表的检查和修复 1.检查mysqlisam存储引擎表的状态 #mysqlcheck -uuser -ppassword database  table  -c  #检查单 ...

随机推荐

  1. 【知识必备】ezSQL,最好用的数据库操作类,让php操作sql更简单~

    最近用php做了点小东东,用上了ezSQL,感觉真的很ez,所以拿来跟大家分享一下~ ezSQL是一个非常好用的PHP数据库操作类.著名的开源博客WordPress的数据库操作就使用了ezSQL的My ...

  2. 优化一个奇葩表设计上的全表扫描SQL

    之前在一个比较繁忙的系统抓到的耗时长.消耗CPU多的一条SQL,如下:SELECT * FROM Z_VISU_DATA_ALARM_LOG TWHERE TO_DATE(T.T_TIMESTR, ' ...

  3. 实战MEF(1):一种不错的扩展方式

    在过去,我们完成一套应用程序后,如果后面对其功能进行了扩展或修整,往往需要重新编译代码生成新的应用程序,然后再覆盖原来的程序.这样的扩展方式对于较小的或者不经常扩展和更新的应用程序来说是可以接受的,而 ...

  4. html 以及JavaScript 转义

    1.之前遇到一个问题,在用js给某个控件赋值时如果含有单引号'或者双引号"有可能导致赋值不成功,如document.getElementById("txtTestBox1" ...

  5. 理解RESTful

    REST全称为Representational State Transfer,可以翻译为“表现状态转换”,是由是Roy Thomas Fielding在他2000年的博士论文中提出的,目的是为了得到一 ...

  6. SWFUpload - JQuery上传插件

    首先,大家可以去SWF的官网下载相关Demo或者源码. 官方地址:http://code.google.com/p/swfupload/ 官方Demo:http://demo.swfupload.or ...

  7. C# 小例子

    数组冒泡排序(升序排序): , , , , , , , , , , , }; //第一种 ; i < num.Length - ; i++) { ; j < num.Length - i ...

  8. 2.python算法之回形矩阵

    代码: #!/usr/bin/env python # encoding: utf-8 """ @author: 侠之大者kamil @file: 2.回形矩阵.py @ ...

  9. python 编码 UnicodeDecodeError

    将一个py脚本从Centos转到win运行,出错如下: UnicodeDecodeError: 'gbk' codec can't decode byte 0xff in position 0: il ...

  10. Websocket协议的学习、调研和实现

    本文章同时发在 cpper.info. 1. websocket是什么 Websocket是html5提出的一个协议规范,参考rfc6455. websocket约定了一个通信的规范,通过一个握手的机 ...