Neo4j之坑

10个月前,我开始用neo4j做cmdb. 初体验下去neo4j很美好. 但是一年中发现一些问题, 仅仅是个人的体验.经供参考

查询语言

如果接触过Neo4j,都会为Cypher的简单和易用感觉到惊叹, 向其他数据库一样,Neo4j也提供了ExplainProfile工具.这样让你容易理解查询是如何运作的.如果你看过neo4j的查询计划优化的图,你会发现一大堆牵扯的线. 最开始简单的查询,一切都很美好.当业务需求越来杂,你用到的查询越来越复杂,你就发现,天啊. 为什么我改了这么一小段代码的顺序,查询慢了这么多. 所以官方也推荐你用多个小查询替代一个大查询. 所以你要迁移部分计算任务到你的代码层,而不是通过Cypher再数据库中帮你处理.

查询的执行过程

查询监视

你有没有过这种情况, 本来你想查100条数据,但是你写错了,你写成查1M条数据. 正常情况下,一般数据库提供query watcher会阻止你这个查询进行下去,因为这太耗内存,会让数据库都崩了. Neo4j里面也有这个东西,但是好像作用不稳定.最好的结果是你等待了很久得到了一个undefined--undefined. 更差的是数据库崩了,再差一点,你的服务崩了.

读优先

Neo4j有一个设定,就是任何对Node的操作,都要先把该node的值读出来. 在关系型数据库中,你要删除一个表,是不需要读取每一列的数据的.而在neo4j里面,你要这样做. 所以如果你想要根据label比如Match (n:label) delete n.那你就要小心了.如果你这个label下有1M的node.那这个任务是无法完成的,因为你的机器RAM不够大.会让JVM GC-FULL. 所以同样,你必须在代码层做一些分块删除处理. 又增加了你的编码难度.

Neo4j的锁行为和关系型数据库不大一样.关系型数据中你做了一个更新操作,那么根据你是乐观/悲观. 或者一些策略,数据库的查询执行器会按照固定的套路进行查询. 在Neo4j中.只有一个写锁.但这个写锁是在真的set语句开始执行的时候才加上去的. 比如match (n:label {id:1}) set n.param=2.这句话中只有match执行完了之后才会加上写锁. 这在并发更新的时候就会出现问题. 这在neo4j里面被讨论的很多,很多人也提出了方案

连接

neo4j没有连接池.而且也没有参数限制数据库连接数.很多时候这个问题会导致很多不稳定的情况发生.

扩展

因为用的是Neo4j3.3的版本.没有全文检索的功能.而需求又必须支持比较强大的查询. 所以我需要一个搜索引擎. 我用了ES.但是我并不想在代码层去做neo4j和ES的数据同步. 这样又让我的代码复杂了. 所以我决定用neo4j的插件去做这件事情. neo4j没有像数据库trigger这样的东西.但是可以用transacitonEventhanlder来实现. 这就有一些问题.

  • 缺乏资料, 可能因为我是python程序员的缘故,我对java和kotlin一知半解.
  • 事件并不是真的像他说的那样运转.比如beforeCommit.这个事件应该发生在数据库未发生变化的时候,这个时候你应该是可以访问被删除的node.但是不是,你访问不了.虽然该事务未提交. 幸好graphware提供了一系列的插件来支持这些事情.

总结

我没有说Neo4j不能用于生产了,毕竟在它的官网那么多大公司都用了. 但是它至少还有待完善. 经过使用了半年之后.我就决定将数据从neo4j迁出. 只在neo4j中保留全部数据集的子集.用来做一些必要的图搜索算法.

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,456评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,370评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,337评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,583评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,596评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,572评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,936评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,595评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,850评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,601评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,685评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,371评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,951评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,934评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,167评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,636评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,411评论 2 342

推荐阅读更多精彩内容