为什么使用数据库

许多人会问为什么软件存储数据会使用数据库?记得当时有一位做Flash开发的朋友说,你们做后端开发的一旦牵涉到存储数据就会想用数据库。其实存储数据可以使用文件。他的说法有一定道理。那么需要存储数据时,什么情况使用文件、什么情况使用数据库呢?前端存储数据使用文件都能解决吗?这篇文章会解答这些问题。

关系型数据库优点

关系型数据库的理论依据是笛卡尔的关系数学理论,但是实际上,大多数使用维护数据库的同行对关系数学都是一知半解,不幸的是我也是其中一位。我知道的是基于关系数学理论设计的关系数据库能够满足减少数据冗余(不是绝对避免,数据冗余有一定的好处),去除数据不一致性的要求。这是关系型数据库数学理论给它带来的优点,因此学习一些理论知识武装头脑能够提高软件开发效率、降低运维成本,甚至创造更高的价值。

关系型数据库跟文件存储数据最大的区别不仅于此,更在于关系型数据库能够带来高性能。一个关系型数据库能够支持成百上千的进程同时读写数据,而一个文件在有多个进程读写数据时会锁死,甚至带来数据的不一致性。那么关系型数据库是怎样做到在保证高性能的同时保证数据的一致性呢?(这句话有一定片面,本质上这两个指标之间是一对矛盾,数据的一致性有多个级别:强一致性、弱一致性、最终一致性,而越高的一致性则带来越低的性能。这需要看您在系统设计时更重视哪个指标)

因为数据库系统在设计时运行了多个进程,并且将数据文件按照块为单位进行了划分,同时在内存中也对相关数据及索引区域以块为单位进行了划分。在进行数据写入时,有些数据库会先写日志,然后返回给程序。在数据库根据管理员配置的参数及内存相关区域容量的情况下决定是否将数据回写磁盘。在多个进程的配合下,数据库能够保证高性能与一致性。同时,数据库系统的设计者们运用了B+树等结构对数据在存储时进行了索引,您在查询数据时数据库尽可能的应用索引,因此数据的读取也会更加快速。同时,数据库会将热数据存储在较快的存储中作为缓存(内存、固态系统硬盘等),这样也能够显著的提高效率。

(至于怎样调整参数优化MySQL数据的效率,将在 数据库的性能的几个关键参数(为什么参数设置后未生效)进行讲解。)

因此,关系型数据库相比文件存储数据来说具有:高性能、一致性等优点。而关系型数据库相对Nosql数据来说,高性能并不能算作他的长处,一致性则成为关系型数据库的长处。

怎样选择存储系统

如果您像我的朋友一样制作一个单人的Flash系统,可以考虑文件存储数据。而据我做手机软件的同事来说,他们在做手机软件时也会选择文件存储数据。但是,大多数学习了关系型数据库理论与设计的开发人员在选择存储系统的时候则选择另外一种轻量的关系数据库:Sqlite。这种关系型数据库语法与mysql有较好的兼容性,能够提高编程质量与效率。在此,推荐同行们在制作手机软件、前端软件时使用Sqlite进行开发。

写在后面的

关系型数据库之所以在今天仍然被大量采用,是因为他的高性能与可靠性。在笔记本刚出来的时候,有很多人说台式机将会消失。同样,在Mongo出现后,有些人预言关系数据库会被替代。但是,关系型数据库仍然在不断发展,因为尺有所短、寸有所长。多样才多彩,可爱的朋友,您说呢?