程序员学数据库那些事儿
最近有人问(是问,不是请教)我数据库怎么学?要学哪些?以下我谈一些个人想法。
其实我的数据库知识不是很扎实,真心的。
当年我学这个东西时某个大神告诉我“学会sql server”走遍天下都不怕。事实上,这几年如果只会sqlserver根本到哪都很惊悚。
原因?
1、如果是政府软件,虽然不像互联网那样高,但是数据存储量确实很大很大,大家想想譬如财政数据、公积金数据、民政局数据等,而且很多数据不能使用缓存,必须实时计算,当sql2008还没出现时,确实在大数据计算性能上不如oracle(同时期版本)
2、由于某些原因(你懂的),政府很少会同意使用windows服务器平台,大都会使用unix或linux平台,这就决定了sqlserver或者.net应用很难卖出去(当然不是完全不行,有些局部部门的软件还是可以的,机密数据那想都不要想)
3、对于企业项目,很多中小企业为了节约成本又想有节操的不使用盗版,那么mysql是他们最好的选择。
4、对于自己做网站,前期如果不想花大成本购买独立服务器的话,使用mysql是正道,便宜而且好用,最重要的是前期也没有这么多数据和人气让我们需要上高级数据库。
其实我个人认为,至少掌握1-2个数据库是很有必要的,譬如mysql和oracle,至于sqlserver不是它简单,而是微软的大部分东西(没说全部)在用户体验和易学性上确实做得更甚一筹(易学性既是优点也是缺点,缺点在于出了问题你很难找到根本原因)
以下有几个建议关于怎么玩数据库。
换个方法学习
一、 不建议按部就班的学习,因为你这么学,别人也是这么学,而每个人的理解能力、技术基础、记忆力、周边环境和自己肚皮饱饿程度都是不同的,这些要素直接影响你的学习速度。
如果大家都在同一起跑线上,使用相同的学习办法是不可取的
二、自己逼自己
模拟项目学习是我个人认为最好的办法。
首先需要了解基本的语法,譬如select insert update 等等(还有一些,这里不一一列出)
譬如我们新建一个新闻表叫做 news ,里面包含 id,title,content(text型),addtime,clickcount 5个字段。
然后手工insert into 这张表50万条高仿真数据,注意是50万或更多且新闻内容字段数据必须要大(如"111,aaa,大大大" 这样的测试数据不如赶紧洗洗睡)。
然后做一个页面,展示某一条新闻的详细,右边边栏展示(1、相关新闻 2、人气排行 3、两天内发布的新闻 等各10条)
(1) 这时你会发现,取数据还真不能简单的 select * from 表 where id=X,你会需要学习如何创建字段索引、如何需要在该表中加入冗余字段,你还会发现当新闻表特别大的时候,用户每点击一次新闻此时如果update这张表的clickcount时页面很慢,你的笔记本风扇很烫。
(2) 如果再复杂点需求,你会发现用视图比较好,或者用存储过程来更新一些数据效率更高,然后你会发现新增新闻时还要使用事务才行。于是逼着你去学这些知识。
(3) 再进一步,你会发现自己做的新闻页面好丑好丑,于是逼着你去学css和html 和jquery
(4) 然后你把表中的数据扩展到2000万以上,你会发现某些功能还真不是一张表可以搞定的。貌似还得了解数据库的分区甚至分表更甚的是你会发现还得用到分布式部署。 你还会学会用数据库sql查询分析器来分析哪条sql语句占了很大性能。甚至不同的sql语句有的比较耗内存,而有的sql语句让你的cpu涨到了100%。
于是,我个人认为你本来学1个月然后做测试项目,共需2个月左右才能基本掌握一个数据库知识,如果用同步边学边自虐的方式很可能时间要节约20%-30%以上,并且让你掌握的更扎实。
这就是为什么有的计算机系大学毕业的学生不如其他专业转行的学生。
总结:
当然,技术(这里主要指开发相关)做到高级境界 其实是数学知识和自然社会知识的碰撞,和编程语言也就关系不大了。但是数据库知识是必须掌握的,不管你做什么样的应用,只要你需要存储数据那么必须了解数据库。
如果你想作为业余爱好更深入的了解数据库,那么你可以从数据结构学起,深入了解数据库是怎么运作的,当然mysql都是开源的,学学思想很不错,当然我从没看过(因为看不懂以及没有经济实力去研究)。
如果在你还没有成为大神时就想自己开发一个关系型数据库,那可能不太现实。在我国玩这种事情的前提是必须要有钱,然后才能谈技术、谈团队、谈产品,否则你会深陷泥塘不可自拔。
还有一句话,好的并且是赚钱的程序员大部分都是在特定时事背景中逼出来的,在这个范围内没有天才。
以上为个人观点,见仁见智。并非在任何场合都是正确的。