高并发insert ignore是选择innodb还是myisam

TokuDB--它的fractal tree(其实就是buffered tree)能把随机IO变为顺序IO,写入性能极强,我们测试在HDD是InnoDB的3倍以上~Myisam官方已经放弃维护了,虽然插入性能也行,但不是crash safe且crash后恢复时间长,而且只有索引能缓存在内存中,所以都不一定比有热数据缓存的的InnoDB快;不要用了~
■网友
【高并发insert ignore是选择innodb还是myisam】 选择InnoDB还是MyISAM
如果不是对事务要求非常的强,高并发写推荐选择MyISAM。理由如下:
MyISAM的索引和数据是分开的,并且索引是有压缩的,内存使用率就对应提高了不少,能加载更多索引,而Innodb是索引和数据是紧密捆绑的,没有使用压缩从而会造成Innodb比MyISAM体积庞大不小;InnoDB存储引擎在插入数据时会花更多的开销在维护完整性、维持事务上,所以效率比MyISAM低;根据题主的描述,主要是插入数据,并且只有一张表,后期对该表的操作也主要是查询吧,就查询速度而言,MyISAM比InnoDB更优越,并且还有MyISAM索引,可以很好的优化查询速度。如何提高INSERT效率
根据题主的描述,每秒有5w - 7w的量,诚然这个数据量是相当惊人的。并且数据是实时产生的,那mysqlimport或者load data就无法派上用场。提供几个提高INSERT效率的办法吧。
批量插入VALUES,而不是每一次插入都是一条数据;删除MySQL的索引,有索引存在插入速度会受很大的影响;题主的表有3个int字段,并且都是唯一索引,可以指定一个主键。是否选择insert ignore
我们知道有三种插入方法,insert into、replaceinto及insert ignore。既然题主提供表的3个字段都是唯一的,那不会出现重复的数据,为什么还用insert ignore呢?insertinto此时跟insert ignore不是一样。
如上,个人拙见,仅供参考。

■网友
单线程MyISAM插入更快. innodb_flush_log_at_trx_commit=1, 禁止auto commit, 不要用单个线程或者进程插入, 同时模拟100个客户端插入, 你会发现InnoDB插入比MyISAM快. 当你更新的数据主键非常离散的时候, InnoDB可以用多个row lock而MyISAM总是lock整个table一条一条插入, MyISAM会比InnoDB慢. 事实上, MyISAM严格意义上根本不算是个数据库引擎, 最多算个结构化文件存储引擎. 在我的MBP上32个线程总共插入32万条记录, MyISAM大概是17.5秒, InnoDB大概16秒不到, 32个线程随机更新更新是MyISAM 23秒对InnoDB 19秒. 我的MBP是多通道的SSD, 如果在硬盘上测试差距会更大. 所以, 好多同学在单线程下auto-commit的测试来证明MyISAM比InnoDB快是不靠谱的. 但是无论如何, 大量插入还是NoSQL方便, 你7万的tps已经很高了, 已经非常不适合MySQL了, 如果只是峰值这样高, 建议你用文件或者队列buffer一下慢慢插, 如果是持续性的这样的TPS, 建议用append类型的NoSQL, 比如cassandra 和 redis. Netflix曾经在AWS上做过实验,288个m1el节点可以达到每秒一百万次写入, 基于SSD的商业数据库Aerospike更是只要50个节点 (参考 Daniel\u0026#39;s Blog: Cassandra and Aerospike, the one million TPS war).
■网友
肯定 MYISAM,INNODB速度太慢,不光插入,查询也是一样,不要被网上的文章误导,多用生产环境测试下。SELECT * FROM news WHERE id\u0026gt;=3678 ORDER BY intime ASC LIMIT 2;这样一条查询,我的生产环境,MYISAM比INNODB快10倍。
■网友
InnoDB,根据高性能mysql大概是说myisam在目前的版本,表现并不一定比innoDB优秀而且如果不会产生冲突,ignore也无必要
■网友
简言之,MyISAM无索引写入非常之快,非常快,但并发查询及版本控制上,InnoDB更胜一筹,如果只是Insert,当然是MyISAM~


    推荐阅读