本来今天是想休息一下,看看我喜欢看的“奇葩说”, 和看那些肥皂剧相比,唇枪舌战,脑洞大开才是我 favorite. 本期说的是死亡,听完双方慷慨激昂的PK 后,输赢我到不关心,而生命有限,做自己喜欢的事情,马上做,多做一些,此生无憾。
说道脑洞的问题,让我想到我周围众多的水瓶座的朋友。说到脑洞,没有那个星座的人,比水瓶座的人脑洞开的之大,看问题之清晰,思维之独立,内心之冷静,想法之“怪异”,在热情的外表下,有一颗寒冷的“心”。 提到数据库,Mongo DB 恐怕就是数据库中的 水瓶座,你懂他,他就是你世界,你不懂他那你只能感受“寒冰刺股”。
那你如何去懂他,更好的使用 Mongo DB,让他用独特的数据处理方式来解决那些你平时头疼的问题,让那些可能困扰你的大数据问题,在风淡云轻中被轻描淡写的化解。那我们来看看你如何来更懂他 ----
1 反范式, 提到范式,那是一个数据库人引以为傲的“知识点”,如何将数据库表设计成,符合三范式的要求,曾经成为一个DBA 或者 数据库架构师的一个卖点。 可时代变化的太快,随着数据量以几何数的方式叠加,十几个表的JOIN,才能查出你要的数据,损耗的时间,人们对时间的速度的渴求,这一切让范式变得不再重要,MONGO DB 在使用中第一个要点就是要 破除 范式的思维,如何将那些分散在每个表中的数据,变成一个collection,用冗余的数据来换取高速的查询速度,这是一个用磁盘容量换取时间的 “”脑洞问题“”。 嵌套可以将你了JOIN 彻底的打碎,在一个collection中将你所要的多个表的数据,在一次I/O操作中就能获得,这就是 水瓶座的 “脑洞”, 你或许不理解,但快速的查询速度就在哪里,水瓶也以不屑的寒光,淡然的面对那些老古董的 “固执”。
2 什么数据适合嵌套,这又是一个脑洞的问题,如果你乱用嵌套,将一些数据经常会改变的,数据在每个阶段都要求一致的,属于既要看结果,还要看过程的 leader们,我劝你还是省省吧,比射手座还爱自由的水瓶座,会再一次打破你的束缚,你的MONG DB 的设计可能需要的是, 子文档较小,数据不会经常被改变,最终数据一致即可,数据结果就可以在一个文档中得到,需要快速的读取,如果你能开这样的"脑洞" , 那你的数据的获得将变得异常的 快速。
3 一对多,多对一,多对多,这是数据库中查询经常要面对的问题,传统的子查询,EXISTS,JOIN ,传统的数据库们做着这些普通的不能在普通的工作,而在MONGO DB,这里最大的问题是多对多,而MONGO DB 要处理多对多的问题,其实也有他自己的主张,多对多,中在多也有少和多的比较,用多和少的比较关系,确定那个被嵌套更好,或者数据的变换频繁度,是嵌套好,还是引用好,是一次查询就得到数据还是二次查询获得数据更适合,这完全决定于你的数据,你的业务,这也和水瓶座性格一样,一分钟一个脑洞,你在想出一个脑洞的时候,他可能已经将你的脑洞团团围住。
4 自由,与传统的数据库表的定义不一样,MONGODB 的表(collection)也是飘忽不定,脑洞在上一个document 还是“天苍苍”,下一个document 就已经是“清明上河图了”,看似不靠谱,但生活中又有多少靠谱的事情,以包容的,淡然的心去面对那些不靠谱,这不也是水瓶对世间种种的化解。在MONGO DB 的世界里面,不是没有规矩,而是不要太多规矩,为什么要让可以简单的工作复杂化,这是MONGO 对待数据的态度,也是水瓶座对待世间问题的看法。
5 扩展性,不同于传统数据库的分库分表,Sharding 是MONGO DB 支持的,也是一个卖点,不同于MYSQL 分库分表中要不就是死去活来的设计,要不就是各种中间件的使用,造成各种故障和不便,MONGO DB 的 分片,将数据的扩展变得和吃一顿早餐一样简单,当然Shard Key 你要选择的对,就如同你如果早餐吃了咸鸭蛋,然后在上一碗豆腐脑,和一盘咸菜,想想你是要“飞”吗?shard key 让分片有效的将大数据量化解到每台MONGODB ,而选择不好,只能让你“飞”的越来越失控。和水瓶座的随性一样,完全取决于你的态度,如果你态度好,自然是everything is possible, 如果你态度恶劣,迎接你的必将是“Aurora Execution”。
6 快速的存取速度,如同你上一秒还在感叹水瓶座的热情,下一秒就会冻结你一切的幻想,在数据的存储上,同样是存储同样的尺寸的数据,传统的数据库可能还在 “毫秒”中打转,而MONGODB 就能让你领略到“速冻”的感觉,纳秒的速度对数据的存取,当然还是那句话,你的懂他,如果你还是用“老脑筋”让他去做什么聚合之类的“适合传统”的事情,那他一定也不会让你如意。
7 无以伦比的Replicate set , 说道沟通和交流以及人际关系,水瓶座绝对也是有一手的,他能很好的拿捏人与人之间的距离,不同世界观的包容,世界中不少的偏见在他那里都变得很正常,所有的数据库都有replication,集群,等等的功能,而到目前如果说,在异步复制中,做的最好的,我个人认为 MONGO DB 们在和每个节点的切换,在对应用的透明无感的转换,在对读写分离的淡然处之都是别的数据库学不来的,将这些功能交给了developers,或者说交给了developers 一大部分,这不就是对这个世界的包容吗,没有条条框框的处理,才是最好的处理,给人和人之间更多的平静,靠理性而不是感性的生活,这世界或许会更好,至少不会更糟。
MONGODB 作为文档数据库,起家,但我个人浅薄的看法,MONGODB 不会止步于此,或者现在就不,今天我们公司的一个程序员,将复杂的SQL 变量运算,移植到MONGO DB,将嵌套,JAVASCRIPT 语言结合,将复杂的事情变得简单,快速,如果能成功,那MONGO DB 绝对不再是 仅仅存一些不重要的数据,LOG ,重复性的文档,声音,图片,辅助对数据的高压缩。 彻底摆脱传统数据库的束缚,将自由开放坚持到底,给程序员一片更 “蓝” 的天空。这样的水瓶座,你不喜欢吗?