提起双鱼座,估计大多想起的是偶像剧里面的神经的男偶(呕吐)像和哭哭啼啼大呼小叫的“女神”经。不过双鱼座本身的真面目却不那么简单,具有天蝎座的第六感,还是加强型,具有巨蟹座的柔情,具有摩羯座的“老道(其实是暗黑)”,在加上双鱼本身的弯弯绕,这个看似柔弱的星座,其实就是扮猪吃老虎。他要想让你死,可以让你死的不明不白。话归数据库,数据库界的双鱼座,那必然是一个狠角色,NEO4J。
废话不说,看看狠角色能干点啥
就这样一个图,如果我每个点都和其他点有关系,然后我会任意通过查一个点,得到其他点的数据,来来来,你让ORACLE ,SQL SERVER , MYSQL, 试试,那必然就是 餐具的 亲戚 杯具。(POSTGRESQL)可以通过对象的方式设计勉为其难的干这样的事情。
MONGO DB 可以通过某些设计达到这样的逻辑需要和快速查询,但太麻烦了,可以但好用又是另一个问题。虽然我还是比较喜欢 MONGO。
在星座界,双鱼座代表着颜值,在数据库界,估计NEO4J 的颜值也是NO.1,看一下界面。(不允许盗图哦)
怎么样,颜值绝对是NO.1
输入一条语句看看
MATCH p=()-[r:`驾照=`]->() RETURN p LIMIT 25
结果一定让你在传统数据界经验,惊一下(虽然POSTGRESQL 的 CLIENT 也很好看,至少比ORALCE PL/SQL developer臭样子要好看的多),图形的结果呈现,极其复杂的关系,也只有双鱼座,能理清这些关系。
有人问,有啥用,我LEFT JOIN ,INNER JOIN , GROUP BY ,窗口函数都能完成,呵呵 我就问一句,上面那些复杂的关系你能在瞬间就把数据库以图形化的方式展现吗,而且不用你写任何的 SQL ,而且数据库量都是 亿万等级。 估计你已经开始吐血了吧。
NEO4J,就是图形界的双鱼座,看似没啥出奇,但你用上你就知道他的厉害,作为图形数据库的 NO.1 众多金融公司使用 这样的数据库解决复杂的关系模型和复杂关系的梳理与展示。传统数据库在这里虽然不至死,但绝对占不到便宜。
通脱cypher CQL 语言来操作查询,这样的图数据库也是需要建立索引的,又熟悉有陌生的一种数据库。
Neo4j的优点
它很容易表示连接的数据
检索/遍历/导航更多的连接数据是非常容易和快速的
它非常容易地表示半结构化数据
Neo4j CQL查询语言命令是人性化的可读格式,非常容易学习
它使用简单而强大的数据模型
它不需要复杂的连接来检索连接的/相关的数据,因为它很容易检索它的相邻节点或关系细节没有连接或索引
也就是说传统数据库复杂的 JOIN ,子查询 ,EXISTS , 嵌套查询等等在这里都不需要,你只需建立NODE 节点,在建立附属的关系,例如
这个人是你二大爷的三舅母的二姑夫的小姨子的同学的同事的小孩的爷爷
这个人到底是谁,通过传统数据库估计你的跳楼,而图形数据库,还是轻描淡写的用图形告诉你,那个小孩的爷爷就是你二大爷。(开玩笑了),并且将你这一连串的关系用图形的方式展示出来,瞬间让不够用的大脑觉得这世界太简单了。
那这个数据库到底让什么他能处理别的数据库处理不能或不方便处理的数据库
在Neo4j中,存储节点时使用了"index-free adjacency",即每个节点都有指向其邻居节点的指针,可以让我们在O(1)O(1)的时间内找到邻居节点。另外,按照官方的说法,在Neo4j中边是最重要的,是"first-class entities",所以单独存储,这有利于在图遍历的时候提高速度,也可以很方便地以任何方向进行遍历。
存储数据的结构不同也让他变得擅长处理这样的数据,将节点的类别,属性,关系的类别,分别存储,并添加相关索引或许是他的秘诀。
和Cassandra 一样,基于 JAVA 编写的数据库,启动安装都异常的方便,或许集群方面还有待加强。所以在使用的时候最好对JVM 尤其是内存的使用有一定了解,方便调试,增强数据库的性能。
随着数据的种类,分析,展示的多样化,类似双鱼座这样的数据库,必然也会有自己的水塘,不可侵犯的水塘。