zoukankan      html  css  js  c++  java
  • Mysql-Archive存储引擎

    Archive 引擎 Archive 存储 引擎 只 支持 INSERT 和 SELECT 操作, 在 MySQL 5. 1 之前 也不 支持 索引。 Archive 引擎 会 缓存 所 有的 写 并 利用 zlib 对 插入 的 行进 行 压缩, 所 以比 MyISAM 表 的 磁盘 I/ O 更少。 但是 每次 SELECT 查询 都 需要 执行 全 表 扫描。 所以 Archive 表 适合 日志 和数 据 采集 类 应用, 这类 应用 做 数据 分析 时 往往 需要 全 表 扫描。 或者 在 一些 需要 更 快速 的 INSERT 操作 的 场合 下 也可以 使用。 Archive 引擎 支持 行 级 锁 和 专用 的 缓冲区, 所以 可以 实现 高 并发 的 插入。 在 一个 查询 开始 直到 返回 表中 存在 的 所有 行数 之前, Archive 引擎 会 阻止 其他的 SELECT 执行, 以 实现 一致性 读。 另外, 也 实现 了 批量 插入 在 完成 之前 对 读 操作 是 不 可见 的。 这种 机制 模仿 了 事务 和 MVCC 的 一些 特性, 但 Archive 引擎 不是 一个 事务 型 的 引擎, 而是 一个 针对 高速 插入 和 压缩 做了 优化 的 简单 引擎。

    ------引用 高性能Mysql第三版书籍

    Archive拥有高性能的插入.下面就建立两个表结构相同,但引擎不同的数据库表,base_archive(Archive存储引擎)和 base_innodb(Innodb存储引擎)

    下面的demo是循环给这两个表插入10000条数据,对比下性能

      1 using System;
      2 using System.Collections.Generic;
      3 using System.Linq;
      4 using System.Text;
      5 using System.Threading.Tasks;
      6 using Tops.Plan.DAO;
      7 
      8 namespace 测试Archive和Innodb性能
      9 {
     10     class Program
     11     {
     12      static int length = 10000;
     13         static void Main(string[] args)
     14         {
     15 
     16             base_innodb();
     17             base_archive();
     18             Console.WriteLine("第一次测试");
     19             base_innodb();
     20             base_archive();
     21             Console.WriteLine("第二次测试");
     22             base_innodb();
     23             base_archive();
     24             Console.WriteLine("第三次测试");
     25             base_archive();
     26             base_innodb();
     27             Console.WriteLine("第四次测试");
     28             base_archive();
     29             base_innodb();
     30             Console.WriteLine("第五次测试");
     31             base_archive();
     32             base_innodb();
     33             Console.WriteLine("第六次测试");
     34             Console.ReadKey();
     35         }
     36         public static void base_innodb()
     37         {
     38             CommonInterface pObj_Comm = CommonFactory.CreateInstance(CommonData.MySql, "server=localhost;database=db_line2;user=root;password=123q;port=3306;pooling=true;max pool size=20;persist security info=True;charset=utf8mb4;");
     39 
     40             try
     41             {
     42                 //获取机械23569工序时长
     43                 pObj_Comm.Open();
     44                 DateTime start1 = DateTime.Now;
     45                 for (int i = 0; i < length; i++)
     46                 {
     47                     string strSql = string.Format("INSERT INTO `db_line2`.`base_innodb`" +
     48                                                               " (`Test1`," +
     49                                                               " `Test2`," +
     50                                                               " `Test3`," +
     51                                                               " `Test4`," +
     52                                                               " `Test5`," +
     53                                                               " `Test6`," +
     54                                                               " `Test7`," +
     55                                                               " `Test8`," +
     56                                                               " `Test9`," +
     57                                                                  " `Test10`)" +
     58                                                                            " VALUES" +
     59                                                                            " ({0},'{1}','{2}','{3}','{4}','{5}','{6}','{7}','{8}','{9}')"
     60                                                                            , i
     61                                                                            , "大的骄傲发哦的风骚激发基地啊1" + i
     62                                                                            , "大的骄傲发哦的风骚激发基地啊2" + i
     63                                                                            , "大的骄傲发哦的风骚激发基地啊3" + i
     64                                                                            , "大的骄傲发哦的风骚激发基地啊4" + i
     65                                                                            , "大的骄傲发哦的风骚激发基地啊5" + i
     66                                                                            , "大的骄傲发哦的风骚激发基地啊6" + i
     67                                                                            , "大的骄傲发哦的风骚激发基地啊7" + i
     68                                                                            , "大的骄傲发哦的风骚激发基地啊8" + i
     69                                                                            , "大的骄傲发哦的风骚激发基地啊9" + i
     70                                                                            );
     71                     pObj_Comm.ExecuteSql(strSql);
     72 
     73                 }
     74                 Console.WriteLine(" base_innodb" + (DateTime.Now - start1).TotalMilliseconds.ToString());
     75                 pObj_Comm.Close();
     76 
     77             }
     78             catch (Exception e)
     79             {
     80                 pObj_Comm.Close();
     81             }
     82         }
     83         public static void base_archive()
     84         {
     85             CommonInterface pObj_Comm = CommonFactory.CreateInstance(CommonData.MySql, "server=localhost;database=db_line2;user=root;password=123q;port=3306;pooling=true;max pool size=20;persist security info=True;charset=utf8mb4;");
     86             try
     87             {
     88                 //获取机械23569工序时长
     89                 pObj_Comm.Open();
     90                 DateTime start1 = DateTime.Now;
     91                 for (int i = 0; i < length; i++)
     92                 {
     93                     string strSql = string.Format("INSERT INTO `db_line2`.`base_archive`" +
     94                                                               " (`Test1`," +
     95                                                               " `Test2`," +
     96                                                               " `Test3`," +
     97                                                               " `Test4`," +
     98                                                               " `Test5`," +
     99                                                               " `Test6`," +
    100                                                               " `Test7`," +
    101                                                               " `Test8`," +
    102                                                               " `Test9`," +
    103                                                               " `Test10`)" +
    104                                                               " VALUES" +
    105                                                               " ({0},'{1}','{2}','{3}','{4}','{5}','{6}','{7}','{8}','{9}')"
    106                                                               , i
    107                                                               , "大的骄傲发哦的风骚激发基地啊1" + i
    108                                                               , "大的骄傲发哦的风骚激发基地啊2" + i
    109                                                               , "大的骄傲发哦的风骚激发基地啊3" + i
    110                                                               , "大的骄傲发哦的风骚激发基地啊4" + i
    111                                                               , "大的骄傲发哦的风骚激发基地啊5" + i
    112                                                               , "大的骄傲发哦的风骚激发基地啊6" + i
    113                                                               , "大的骄傲发哦的风骚激发基地啊7" + i
    114                                                               , "大的骄傲发哦的风骚激发基地啊8" + i
    115                                                               , "大的骄傲发哦的风骚激发基地啊9" + i
    116                                                               );
    117                     pObj_Comm.ExecuteSql(strSql);
    118 
    119                 }
    120                 Console.WriteLine("base_archive" + (DateTime.Now - start1).TotalMilliseconds.ToString());
    121                 pObj_Comm.Close();
    122 
    123             }
    124             catch (Exception e)
    125             {
    126                 pObj_Comm.Close();
    127             }
    128         }
    129 
    130 
    131     }
    132 }

    测试结果:

     从测试结果可以看出Archive的插入速度在Innodb的7倍以上。

     

     Innodb的内存是的Archive27倍

    使用场景:

    一些从设备采集的数据需要大量insert,不需要更新和删除

    像这种场景用Archive就比较好。

  • 相关阅读:
    JavaScript 消息框
    DOM事件
    修改输入框placeholder文字默认颜色-webkit-input-placeholder
    css—文字渐变色
    css—各浏览器下的背景色渐变
    $.ajax()方法详解
    使用meta实现页面的定时刷新或跳转
    python的连接mysql的安装
    django安装
    速查
  • 原文地址:https://www.cnblogs.com/topsyuan/p/15010622.html
Copyright © 2011-2022 走看看