使用NoSQL提升写入性能
数据库系统大多使用的是传统的机械磁盘,对于机械磁盘的访问方式有两种:一种是随机IO;另一种是顺序IO。随机IO就需要花费时间做昂贵的磁盘寻道,一般来说,它的读写效率要比顺序IO小两到三个数量级,所以我们想要提升写入的性能就要尽量减少随机IO。
以MySQL的InnoDB存储引擎来说,更新binlog、redolog、undolog都是在做顺序IO,而更新datafile和索引文件则是在做随机IO,而为了减少随机IO的发生,关系数据库已经做了很多的优化,比如说写入时先写入内存,然后批量刷新到磁盘上,但是随机IO还是会发生。而且一旦发生了页分裂,就不可避免会做数据的移动,也会极大地损耗写入性能。
NoSQL数据库在性能、扩展性上的优势,以及它的一些特殊功能特性
1.在性能方面,NoSQL数据库使用一些算法将对磁盘的随机写转换成顺序写,提升了写的性能;
2.在某些场景下,比如全文搜索功能,关系型数据库并不能高效地支持,需要NoSQL数据库的支持;
3.在扩展性方面,NoSQL数据库天生支持分布式,支持数据冗余和数据分片的特性。
这些都让它成为传统关系型数据库的良好的补充,你需要了解的是,NoSQL可供选型的种类很多,每一个组件都有各自的特点。你在做选型的时候需要对它的实现原理有比较深入的了解,最好在运维方面对它有一定的熟悉,这样在出现问题时才能及时找到解决方案。否则,盲目跟从地上了一个新的NoSQL数据库,最终可能导致会出了故障无法解决,反而成为整体系统的拖累。