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架构 mysql是一个单进程多线程架构的数据库. 二.存储引擎 InnoDB: 支持事务 行锁 读操作无锁 4种隔离级别,默认为repeatable 自适应hash索引 每张表的存储都是 ...

  5. mysql 数据表操作 存储引擎介绍

    一 什么是存储引擎? 存储引擎就是表的类型. mysql中建立的库===>文件夹 库中建立的表===>文件 现实生活中我们用来存储数据的文件有不同的类型,每种文件类型对应各自不同的处理机制 ...

  6. Mysql技术内幕——InnoDB存储引擎

    Mysql技术内幕——InnoDB存储引擎 http://jingyan.baidu.com/article/fedf07377c493f35ac89770c.html 一.mysql体系结构和存储引 ...

  7. MySQL数据库篇之存储引擎

    主要内容: 一.数据引擎 二.MySQL支持的存储引擎 三.使用存储引擎 1️⃣ 什么是存储引擎? MySQL中建立的库----> 文件夹,库中建立的表----->文件. 现实生活中我们用 ...

  8. mysql 库操作、存储引擎、表操作

    阅读目录 库操作 存储引擎 什么是存储引擎 mysql支持的存储引擎 如何使用存储引擎 表操作 创建表 查看表结构 修改表ALTER TABLE 复制表 删除表 数据类型 表完整性约束 回到顶部 一. ...

  9. mysql三-1:理解存储引擎

    一.什么是存储引擎 mysql中建立的库===>文件夹 库中建立的表===>文件 生活中我们用来存储数据的文件有不同的类型,每种文件类型对应各自不同的处理机制:比如处理文本用txt类型,处 ...

随机推荐

  1. 轻松自动化---selenium-webdriver(python) (十一)

    本节重点: 控制滚动条到底部 有时候我们需要控制页面滚动条上的滚动条,但滚动条并非页面上的元素,这个时候就需要借助js是来进行操作.一般用到操作滚动条的会两个场景: 注册时的法律条文需要阅读,判断用户 ...

  2. 微信支付v3发布到iis时的证书问题

    一开始报“出现了内部错误” 解决方法是 方法一 var cer = new X509Certificate(certpath, password,X509KeyStorageFlags.Machine ...

  3. No resource identifier found for attribute 'showAsAction' in package 'android'

    运行一个项目时在一个menu.xml文件item属性android:showAsAction 报错 No resource identifier found for attribute 'showAs ...

  4. JS的toFixed方法设置小数点位数后再进行计算,数据出错问题

    这个应该算作失真,或者也不算.情况就是用了toFixed后再进行相关计算,得不到预期的结果 具体看例子 比如想动态计算百分比,保留一位小数如94.4%这样子 var blobTo = 409600; ...

  5. 关于IE6中做兼容的那点事。

    前言 对于程序员来说,一听到你做的程序必须兼容IE6(当然主流浏览器肯定得兼容的),那颗滚烫的心瞬间哇凉哇凉的,但是有时,项目就要求这样,你也只能硬着头皮跟IE6来个亲密接触,最近正好做了个项目,关于 ...

  6. 理解TCP/IP三次握手与四次挥手的正确姿势

    背景 注:以下情节纯属虚构,我并没有女朋友==. 和女朋友异地恋一年多,为了保持感情我提议每天晚上视频聊天一次. 从好上开始,到现在,一年多也算坚持下来了. 问题 有时候聊天的过程中,我的网络或者她的 ...

  7. 新学C++的for,switch和随机数

    通过一个小程序学习: #include<iostream> #include<cstdlib> #include<ctime> using namespace st ...

  8. ExtJs动态生成treepanel的Json格式

    在节点中加上"checked"属性,会自动生成checkbox. 获取选中节点 var nodeArray = ""; var nodesObj = mytre ...

  9. jquery可见性选择器(匹配匹配所有显示的元素)

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  10. 解决SqlPlus前台程序出现中文乱码的问题

    在使用sqlplus的过程中,常常会遇到某一台机器在访问oracle数据库时中文显示乱码的问题,实际上这是因为客户端字符集和服务器字符集不一致导致的.在实际使用中,服务器字符集,客户端字符集和操作系统 ...