当前位置:   article > 正文

知识图谱 - 使用图数据库(记一次eno4j搭建分享)_知识图谱 node4j

知识图谱 node4j

1.Neo4j是一个高性能的,是由Java和Scala写成的一个NOSQL图形数据库

neo4j官网下载地址:https://neo4j.com/download-center/#enterprise
neo4j中文社区:http://neo4j.com.cn/


优点:

  • 查询速度快: 关系型数据库,存储数据量大,关联表多的时候,查询效率就会降低,neo4j从一个节点开始,根据其连接的关系,可以快速和方便地找出它的邻近节点,不会对整个数据库进行搜索,这种查找数据的方法并不受数据量的大小所影响,查询速度不会因数据量的增长而下降。        
  • 灵活性好:  非结构化数据存储方式,在数据库设计上能很好地适应需求变化,因为随着需求的变化而增加的节点、关系及其属性并不会影响到原来数据的正常使用。
  • 事务:  完全支持ACID完整的事务管理特性(原子性,一致性,隔离性和持久性)规则
  • 可靠性: 数据库安全可靠,可以实时备份数据,很方便恢复数据
  • 相比于其他图数据库,Neo4j作为较早的一批图形数据库之一,文档和各种技术博客较多,技术成熟可用成功案例多,图的数据结构表现的更直观

缺点:

  • 社区版免费开源,企业版闭源且费用昂贵
  • 大数据量导入麻烦,官方提供的load csv模式性能也不够理想节点数据量稍微超万级别效率很慢,插入关系数据量效率更慢,经常会出现内存不够/溢出的问题,neo4j-admin-import效率不错,但是只能用于数据库初始化局限性太大
  • 想要提高性能和容量,只能在硬件上处理,增加内存和硬盘,硬件上总会达到瓶颈

适用并使用场景:知识图谱

Windows和Linux下载解压,启动后浏览器输出:http://localhost:7474/ 即可登录。

第一次访问需要修改密码,默认的账号密码都为neo4j,后续若是修改密码,只需要在控制台输入:server change-password

配置文件:

开启远程访问:(远程其他电脑可以用本机的IP或者域名后面跟上7474 端口就能打开web界面了 如: https://:7473)
3.0以前的版本:在安装目录的/conf/neo4j.conf 文件内,找到并将注释#号去掉并修改就可以了。

 #dbms.connector.https.address=localhost:7473 

改为 
 dbms.connector.https.address=0.0.0.0:7473 

3.1及以后的版本:在安装目录的/conf/neo4j.conf 文件内,找到并将注释#号去掉就可以了 。

dbms.connectors.default_listen_address=0.0.0.0

neo4j-admin-import 或 load csv 导数据内存溢出问题:
在 安装目录/conf/neo4j.conf 文件内,找到并修改设置JVM初始堆内存和JVM最大堆内存即可。

# 设置JVM初始堆内存和JVM最大堆内存
# 生产环境给的JVM最大堆内存越大越好,但是要小于机器的物理内存
dbms.memory.heap.initial_size=5g
dbms.memory.heap.max_size=10g

集成springboot:

集成springboot中版本问题!!(请对应版本号,不同大版本可能会有很大区别 版本对应地址   https://neo4j.com/developer/neo4j-ogm/  ):

  1. 例:springboot 2.1.6版本
  2. <parent>
  3. <groupId>org.springframework.boot</groupId>
  4. <artifactId>spring-boot-starter-parent</artifactId>
  5. <version>2.1.6.RELEASE</version>
  6. </parent>
  7. <dependency>
  8. <groupId>org.springframework.boot</groupId>
  9. <artifactId>spring-boot-starter-data-neo4j</artifactId>
  10. </dependency>
  11. <!-- Only add if you're using the Bolt driver这里我选择了http协议 -->
  12. <dependency>
  13. <groupId>org.neo4j</groupId>
  14. <artifactId>neo4j-ogm-http-driver</artifactId>
  15. </dependency>

yml配置:        

  1. data:
  2. neo4j:
  3. uri: http://127.0.0.1:7474
  4. username: neo4j
  5. password: "0123"

密码数字如果以零为开头切记,spring boot yml配置文件中 ,配置前缀0的数字时,会被当成8进制数进行处理,登录neo4j会报密码错误等  例:0123,解决办法"0123"即可

配置Neo4jConfiguration相关配置

neo4j config

  1. import org.neo4j.ogm.session.SessionFactory;
  2. import org.springframework.beans.factory.annotation.Value;
  3. import org.springframework.context.annotation.Bean;
  4. import org.springframework.context.annotation.Configuration;
  5. import org.springframework.data.neo4j.repository.config.EnableNeo4jRepositories;
  6. import org.springframework.data.neo4j.transaction.Neo4jTransactionManager;
  7. import org.springframework.transaction.annotation.EnableTransactionManagement;
  8. /**
  9. * @author Eric.he
  10. * @description neo4j配置类
  11. */
  12. @Configuration
  13. @EnableNeo4jRepositories("com.eric.fire.video.mediaresourceadmin.neo4j.repository")
  14. @EnableTransactionManagement
  15. public class MediaNeo4jConfiguration {
  16. @Value("${spring.data.neo4j.uri}")
  17. private String databaseUrl;
  18. @Value("${spring.data.neo4j.username}")
  19. private String userName;
  20. @Value("${spring.data.neo4j.password}")
  21. private String password;
  22. @Bean
  23. public SessionFactory sessionFactory() {
  24. org.neo4j.ogm.config.Configuration configuration = new org.neo4j.ogm.config.Configuration.Builder()
  25. .uri(databaseUrl)
  26. .credentials(userName, password)
  27. .build();
  28. /**
  29. * 如果不指定节点映射的java bean路径,保存时会报如下警告,导致无法将节点插入Neo4j中
  30. * ... is not a valid entity class. Please check the entity mapping.
  31. */
  32. return new SessionFactory(configuration, "com.eric.fire.video.mediaresourceadmin.neo4j.node","com.eric.fire.video.mediaresourceadmin.neo4j.payload");
  33. }
  34. /**
  35. * DefaultTransactionManager SessionFactory.openSession()
  36. * Neo4jTransactionManager SessionFactory
  37. */
  38. @Bean
  39. public Neo4jTransactionManager transactionManager() {
  40. return new Neo4jTransactionManager(sessionFactory());
  41. }
  42. }

neo4j node

  1. import com.eric.fire.video.mediaresourceadmin.neo4j.payload.NeoConsts;
  2. import lombok.*;
  3. import org.neo4j.ogm.annotation.GeneratedValue;
  4. import org.neo4j.ogm.annotation.Id;
  5. import org.neo4j.ogm.annotation.NodeEntity;
  6. import org.neo4j.ogm.annotation.Relationship;
  7. import java.util.Set;
  8. @Data
  9. @NoArgsConstructor
  10. @RequiredArgsConstructor(staticName = "of")
  11. @AllArgsConstructor
  12. @Builder
  13. @NodeEntity(label = "Video")
  14. public class VideoNode {
  15. @Id
  16. @GeneratedValue
  17. private Long nodeId;
  18. @NonNull
  19. private String videoName;
  20. @Relationship(type = NeoConsts.RELATION_IN, direction = Relationship.INCOMI
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小舞很执着/article/detail/748061
推荐阅读
相关标签
  

闽ICP备14008679号