图数据库分为两大类:native graph和non-native graph
native graph:
数据只能存放在一台机器上。不支持分片。如果你的数据量非常大,Neo4j是扛不住的。
它的优点是读写速度都非常快,查关系也非常快。
典型代表是Neo4j。网上查了很久,Neo4j的团队认为你应该只把最重要的数据存到图里。Neo4j不愿意牺牲速度。因为目前图数据库分片是一个NP complete的问题。他们说与其实现一个naive(幼稚的)分片,不如把速度搞好。显然这是冲着数据分析来的。速度上来了,配合spark,分析数据就更快了,这样才有可能挖掘出更有价值的数据。
non-ative graph:
数据可以存储在多台机器上。支持分片(partition/sharding)。这个自然是冲着大数据来的。好处是不用担心一台机器硬盘的容量不够了,坏处是牺牲了性能。
这一类的图数据库有titan,orly,cayley。
titan的backend可以配置成Hbase或者Cassandra,可以做到分片。
cayley如果backend配置的是分布式的mongo的话,也能做到分片。
orly不依赖第三方backend。直接做到分片,并且声称性能还很好。
虽然支持分片,但其实titan和cayley只是一个graph layer。因为他们底层依赖其他存储系统。既然是graph layer,有人就质疑说titan和cayley能否称得上真正的图数据库。titan和orly做的挺好,都被收购了,然后就死掉了。github上很久没人更新了。目前也只能寄希望于cayley了。这个是go语言写的。社区也很活跃。
插一段废话:
我不懂大数据,更不懂数据挖掘。只能谈谈自己的一点理解。
零散的数据没什么价值,但是一旦把数据关联起来,即便是看起来是垃圾数据也可能会得出非常有价值的结论。怎么关联?抽取实体,建立关系,抽象出模型。据说行话叫构建知识图谱。然后从关联的数据量找出有价值的东西。这需要对数据极度敏感,智力还要好。这种活我们这些小程序员可干不了,得数学家和科学家来。科学家是大朋友,我们只是小朋友。小朋友可以很容易培养,科学家却不可多得。李开复说的,我觉得说的很有道理。我们能做什么?做大数据采集。做爬虫也好,做大数据存储也好都是为数据挖掘的人服务的。哦,对了,怎么挖掘数据?我也不知道,大概是机器学习,深度学习吧。