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

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/  ):

例:springboot 2.1.6版本
		<parent>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-parent</artifactId>
			<version>2.1.6.RELEASE</version>
		</parent>

		<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-neo4j</artifactId>
        </dependency>
		<!-- Only add if you're using the Bolt driver这里我选择了http协议 -->
        <dependency>
            <groupId>org.neo4j</groupId>
            <artifactId>neo4j-ogm-http-driver</artifactId>
        </dependency>

yml配置:        

  data:
    neo4j:
      uri: http://127.0.0.1:7474
      username: neo4j
      password: "0123"

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

配置Neo4jConfiguration相关配置

neo4j config

import org.neo4j.ogm.session.SessionFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.neo4j.repository.config.EnableNeo4jRepositories;
import org.springframework.data.neo4j.transaction.Neo4jTransactionManager;
import org.springframework.transaction.annotation.EnableTransactionManagement;

/**
 * @author Eric.he
 * @description neo4j配置类
 */


@Configuration
@EnableNeo4jRepositories("com.eric.fire.video.mediaresourceadmin.neo4j.repository")
@EnableTransactionManagement
public class MediaNeo4jConfiguration {
    @Value("${spring.data.neo4j.uri}")
    private String databaseUrl;

    @Value("${spring.data.neo4j.username}")
    private String userName;

    @Value("${spring.data.neo4j.password}")
    private String password;

    @Bean
    public SessionFactory sessionFactory() {
        org.neo4j.ogm.config.Configuration configuration = new org.neo4j.ogm.config.Configuration.Builder()
                .uri(databaseUrl)
                .credentials(userName, password)
                .build();
        /**
         * 如果不指定节点映射的java bean路径,保存时会报如下警告,导致无法将节点插入Neo4j中
         * ... is not a valid entity class. Please check the entity mapping.
         */
        return new SessionFactory(configuration, "com.eric.fire.video.mediaresourceadmin.neo4j.node","com.eric.fire.video.mediaresourceadmin.neo4j.payload");
    }

    /**
     * DefaultTransactionManager  SessionFactory.openSession()
     * Neo4jTransactionManager    SessionFactory
     */
    @Bean
    public Neo4jTransactionManager transactionManager() {
        return new Neo4jTransactionManager(sessionFactory());
    }

}

neo4j node


import com.eric.fire.video.mediaresourceadmin.neo4j.payload.NeoConsts;
import lombok.*;
import org.neo4j.ogm.annotation.GeneratedValue;
import org.neo4j.ogm.annotation.Id;
import org.neo4j.ogm.annotation.NodeEntity;
import org.neo4j.ogm.annotation.Relationship;

import java.util.Set;

@Data
@NoArgsConstructor
@RequiredArgsConstructor(staticName = "of")
@AllArgsConstructor
@Builder
@NodeEntity(label = "Video")
public class VideoNode {

    @Id
    @GeneratedValue
    private Long nodeId;

    @NonNull
    private String videoName;


    @Relationship(type = NeoConsts.RELATION_IN, direction = Relationship.INCOMI
  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值