mysql不同版本和存储引擎选型的验证
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不同版本和存储引擎选型的验证的更多相关文章
- MySQL表类型和存储引擎版本不一致解决方法
使用的是老版本的mysql客户端Navicate 8 ,mysql 服务端用的是mysql5.6的版本,在修改版本引擎的时候出现版本不对; mysql error ‘TYPE=MyISAM’ 解决办法 ...
- MySQL内核:InnoDB存储引擎 卷1
MySQL内核:InnoDB存储引擎卷1(MySQL领域Oracle ACE专家力作,众多MySQL Oracle ACE力捧,深入MySQL数据库内核源码分析,InnoDB内核开发与优化必备宝典) ...
- MySql常用两大存储引擎简介
MyISAM存储引擎简介 MyISAM存储引擎的表在数据库中,每一个表都被存放为三个以表名命名的物理文件. 首先肯定会有任何存储引擎都不可缺少的存放表结构定义信息的.frm文件,另外还有.MYD和.M ...
- 《mysql技术内幕 InnoDB存储引擎(第二版)》阅读笔记
一.mysql架构 mysql是一个单进程多线程架构的数据库. 二.存储引擎 InnoDB: 支持事务 行锁 读操作无锁 4种隔离级别,默认为repeatable 自适应hash索引 每张表的存储都是 ...
- mysql 数据表操作 存储引擎介绍
一 什么是存储引擎? 存储引擎就是表的类型. mysql中建立的库===>文件夹 库中建立的表===>文件 现实生活中我们用来存储数据的文件有不同的类型,每种文件类型对应各自不同的处理机制 ...
- Mysql技术内幕——InnoDB存储引擎
Mysql技术内幕——InnoDB存储引擎 http://jingyan.baidu.com/article/fedf07377c493f35ac89770c.html 一.mysql体系结构和存储引 ...
- MySQL数据库篇之存储引擎
主要内容: 一.数据引擎 二.MySQL支持的存储引擎 三.使用存储引擎 1️⃣ 什么是存储引擎? MySQL中建立的库----> 文件夹,库中建立的表----->文件. 现实生活中我们用 ...
- mysql 库操作、存储引擎、表操作
阅读目录 库操作 存储引擎 什么是存储引擎 mysql支持的存储引擎 如何使用存储引擎 表操作 创建表 查看表结构 修改表ALTER TABLE 复制表 删除表 数据类型 表完整性约束 回到顶部 一. ...
- mysql三-1:理解存储引擎
一.什么是存储引擎 mysql中建立的库===>文件夹 库中建立的表===>文件 生活中我们用来存储数据的文件有不同的类型,每种文件类型对应各自不同的处理机制:比如处理文本用txt类型,处 ...
随机推荐
- 白话Https
本文试图以通俗易通的方式介绍Https的工作原理,不纠结具体的术语,不考证严格的流程.我相信弄懂了原理之后,到了具体操作和实现的时候,方向就不会错,然后条条大路通罗马.阅读文本需要提前大致了解对称加密 ...
- 网络编程之socket新解
由于工作并不是很忙,闲暇之余就读了下tomcat的源代码.我是从事java服务器开发工作的,大体的一些服务器线程模型我都是了解的.其大部分都是由一个线程调用监听端口等待客户端的链接,建立连接后再交由其 ...
- Windows Azure Traffic Manager (5) Traffic Manager Overview
<Windows Azure Platform 系列文章目录> 笔者默默地看了一下之前写的Traffic Manager内容,已经差不多是3年前的文章了.现在Azure Traffic M ...
- 大话ASP.NET开发(第一章 html5+css3+解耦问题的探讨)
一.拉近我们的距离 我想,很多人会问,如今IE6还占据颇多份额的中国,html5.css3是否还很遥远?我会很直接告诉他们:其实就在你的眼前.我们来看两个图: ...
- Dapper学习 - Dapper的基本用法(一) - 查询
上一篇, 提到Query<Test>查询的时候, 如果Test中包含自定义class, Dapper不会给自定义class完成映射, 而是直接给null, 其实是可以实现的, 答案就在下面 ...
- C# 与 Java 中的枚举
C#代码: 利用扩展方法,扩展枚举功能 using System; using System.Collections.Generic; using System.Text; using System. ...
- ASP.NET MVC程序中动态修改form的Action值
在练习ASP.NET MVC时,为了实现一个小功能,POST数据至服务器执行时,需要动态修改form的action值. 下面Insus.NET列举一个例子来演示它.让它简单,明白易了解. 你可以在控制 ...
- 自己动手写计算器v1.2
1.2版本主要添加了分数.取负.开方三个功能,由于这三中运算输入单目运算,所以,新声明了一个新类 class OPeratorV1_2 至此基本完成了一个标准计算器,至于拥有更多功能的科学计算器,日后 ...
- ASP.NET访问Excel 失败的解决方法(错误号:80070005,8000401a)
用asp.net把值写入Excel在本地测试通过,然后提交服务器后老是写入不成功 并提示错误: Retrieving the COM class factory for component with ...
- 【C#进阶系列】15 枚举类型和位标志
实际上本章就只讲枚举类型,因为位标志本来就可以当做一个特殊的枚举类型. 关于枚举类型 枚举类型是一种消灭魔法数字的好方法,使程序更容易编写,阅读和维护. 枚举类型是值类型,然而有别于其它值类型,枚举类 ...